青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

speex 的一個例子, 使用了SPEEX抖動緩存.

轉載自:http://blog.163.com/yuan_zhch/blog/static/193790046201172743047588/

http://svn.xiph.org/trunk/speex/speexclient/
/***************************************************************************
   Copyright (C) 2004-2006 by Jean-Marc Valin
   Copyright (C) 2006 Commonwealth Scientific and Industrial Research
                      Organisation (CSIRO) Australia

   Redistribution and use in source and binary forms, with or without
   modification, are permitted provided that the following conditions
   are met:
   
   - Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
   
   - Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.
   
   - Neither the name of the Xiph.org Foundation nor the names of its
   contributors may be used to endorse or promote products derived from
   this software without specific prior written permission.
   
   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   
***************************************************************************
*/

 
#ifdef HAVE_CONFIG_H
#include 
<config.h>
#endif

#include 
<stdlib.h>
#include 
<sys/types.h>
#include 
<sys/socket.h>
#include 
<netinet/in.h>
#include 
<arpa/inet.h>
#include 
<netdb.h>
#include 
<stdio.h>
#include 
<unistd.h> /* close() */
#include 
<string.h> /* memset() */

#include 
"alsa_device.h"
#include 
<speex/speex.h>
#include 
<speex/speex_jitter.h>
#include 
<speex/speex_preprocess.h>
#include 
<speex/speex_echo.h>
#include 
"speex_jitter_buffer.h"

#include 
<sched.h>

#define MAX_MSG 1500

#define SAMPLING_RATE 16000
#define FRAME_SIZE 320

int main(int argc, char *argv[])
{
   
   
int sd, rc, n;
   
int i;
   
struct sockaddr_in cliAddr, remoteAddr;
   
char msg[MAX_MSG];
   
struct hostent *h;
   
int local_port, remote_port;
   
int nfds;
   
struct pollfd *pfds;
   SpeexPreprocessState 
*preprocess;
   AlsaDevice 
*audio_dev;
   
int tmp;

   
if (argc != 5)
   
{
      fprintf(stderr, 
"wrong options\n");
      exit(
1);
   }

  
   h 
= gethostbyname(argv[2]);
   
if(h==NULL) {
      fprintf(stderr, 
"%s: unknown host '%s' \n", argv[0], argv[1]);
      exit(
1);
   }


   local_port 
= atoi(argv[3]);
   remote_port 
= atoi(argv[4]);
   
   printf(
"%s: sending data to '%s' (IP : %s) \n", argv[0], h->h_name,
          inet_ntoa(
*(struct in_addr *)h->h_addr_list[0]));

   
{
      remoteAddr.sin_family 
= h->h_addrtype;
      memcpy((
char *&remoteAddr.sin_addr.s_addr,
            h
->h_addr_list[0], h->h_length);
      remoteAddr.sin_port 
= htons(remote_port);
   }

   
/* socket creation */
   sd
=socket(AF_INET, SOCK_DGRAM, 0);
   
if(sd<0{
      printf(
"%s: cannot open socket \n",argv[0]);
      exit(
1);
   }


   
/* bind any port */
   cliAddr.sin_family 
= AF_INET;
   cliAddr.sin_addr.s_addr 
= htonl(INADDR_ANY);
   cliAddr.sin_port 
= htons(local_port);

   rc 
= bind(sd, (struct sockaddr *&cliAddr, sizeof(cliAddr));
   
if(rc<0{
      printf(
"%s: cannot bind port\n", argv[0]);
      exit(
1);
   }


   
/* Setup audio device */
   audio_dev 
= alsa_device_open(argv[1], SAMPLING_RATE, 1, FRAME_SIZE);
   
   
/* Setup the encoder and decoder in wideband */
   
void *enc_state, *dec_state;
   enc_state 
= speex_encoder_init(&speex_wb_mode);
   tmp 
= 8;
   speex_encoder_ctl(enc_state, SPEEX_SET_QUALITY, 
&tmp);
   tmp 
= 2;
   speex_encoder_ctl(enc_state, SPEEX_SET_COMPLEXITY, 
&tmp);
   dec_state 
= speex_decoder_init(&speex_wb_mode);
   tmp 
= 1;
   speex_decoder_ctl(dec_state, SPEEX_SET_ENH, 
&tmp);
   SpeexBits enc_bits, dec_bits;
   speex_bits_init(
&enc_bits);
   speex_bits_init(
&dec_bits);
   
   
   
struct sched_param param;
   
/*param.sched_priority = 40; */
   param.sched_priority 
= sched_get_priority_min(SCHED_FIFO);
   
if (sched_setscheduler(0,SCHED_FIFO,&param))
      perror(
"sched_setscheduler");

   
int send_timestamp = 0;
   
int recv_started=0;
   
   
/* Setup all file descriptors for poll()ing */
   nfds 
= alsa_device_nfds(audio_dev);
   pfds 
= malloc(sizeof(*pfds)*(nfds+1));
   alsa_device_getfds(audio_dev, pfds, nfds);
   pfds[nfds].fd 
= sd;
   pfds[nfds].events 
= POLLIN;

   
/* Setup jitter buffer using decoder */
   SpeexJitter jitter;
   speex_jitter_init(
&jitter, dec_state, SAMPLING_RATE);
   
   
/* Echo canceller with 200 ms tail length */
   SpeexEchoState 
*echo_state = speex_echo_state_init(FRAME_SIZE, 10*FRAME_SIZE);
   tmp 
= SAMPLING_RATE;
   speex_echo_ctl(echo_state, SPEEX_ECHO_SET_SAMPLING_RATE, 
&tmp);

   
/* Setup preprocessor and associate with echo canceller for residual echo suppression */
   preprocess 
= speex_preprocess_state_init(FRAME_SIZE, SAMPLING_RATE);
   speex_preprocess_ctl(preprocess, SPEEX_PREPROCESS_SET_ECHO_STATE, echo_state);
   
   alsa_device_start(audio_dev);
   
   
/* Infinite loop on capture, playback and receiving packets */
   
while (1)
   
{
      
/* Wait for either 1) capture 2) playback 3) socket data */
      poll(pfds, nfds
+1-1);
      
/* Received packets */
      
if (pfds[nfds].revents & POLLIN)
      
{
         
/*fprintf (stderr, "x");*/
         n 
= recv(sd, msg, MAX_MSG, 0);
         
int recv_timestamp = ((int*)msg)[1];
         
int payload = ((int*)msg)[0];
   
         
if ((payload & 0x80000000== 0
         
{
            
/* Put content of the packet into the jitter buffer, except for the pseudo-header */
            speex_jitter_put(
&jitter, msg+8, n-8, recv_timestamp);
            recv_started 
= 1;
         }


      }

      
/* Ready to play a frame (playback) */
      
if (alsa_device_playback_ready(audio_dev, pfds, nfds))
      
{
         
short pcm[FRAME_SIZE];
         
if (recv_started)
         
{
            
/* Get audio from the jitter buffer */
            speex_jitter_get(
&jitter, pcm, NULL);
         }
 else {
            
for (i=0;i<FRAME_SIZE;i++)
               pcm[i] 
= 0;
         }

         
/* Playback the audio and reset the echo canceller if we got an underrun */
         
if (alsa_device_write(audio_dev, pcm, FRAME_SIZE))
            speex_echo_state_reset(echo_state);
         
/* Put frame into playback buffer */
         speex_echo_playback(echo_state, pcm);
      }

      
/* Audio available from the soundcard (capture) */
      
if (alsa_device_capture_ready(audio_dev, pfds, nfds))
      
{
         
short pcm[FRAME_SIZE], pcm2[FRAME_SIZE];
         
char outpacket[MAX_MSG];
         
/* Get audio from the soundcard */
         alsa_device_read(audio_dev, pcm, FRAME_SIZE);
         
         
/* Perform echo cancellation */
         speex_echo_capture(echo_state, pcm, pcm2);
         
for (i=0;i<FRAME_SIZE;i++)
            pcm[i] 
= pcm2[i];
         
         speex_bits_reset(
&enc_bits);
         
         
/* Apply noise/echo suppression */
         speex_preprocess_run(preprocess, pcm);
         
         
/* Encode */
         speex_encode_int(enc_state, pcm, 
&enc_bits);
         
int packetSize = speex_bits_write(&enc_bits, outpacket+8, MAX_MSG);
         
         
/* Pseudo header: four null bytes and a 32-bit timestamp */
         ((
int*)outpacket)[0= htonl(0);
         ((
int*)outpacket)[1= send_timestamp;
         send_timestamp 
+= FRAME_SIZE;
         rc 
= sendto(sd, outpacket, packetSize+80,
                (
struct sockaddr *&remoteAddr,
                
sizeof(remoteAddr));
         
         
if(rc<0{
            printf(
"cannot send audio data\n");
            close(sd);
            exit(
1);
         }

      }

      

   }



   
return 0;
}

posted on 2012-11-23 16:56 楊粼波 閱讀(4760) 評論(0)  編輯 收藏 引用 所屬分類: 文章收藏

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区日韩精品| 香蕉久久精品日日躁夜夜躁| 久久久综合激的五月天| 一区免费观看| 欧美大胆人体视频| 欧美岛国在线观看| 中文一区二区| 午夜亚洲激情| 在线国产精品播放| 亚洲激情女人| 欧美视频在线观看视频极品| 亚洲综合视频在线| 性18欧美另类| 91久久久在线| 亚洲视频免费在线| 激情婷婷久久| 日韩亚洲在线观看| 国产午夜精品全部视频在线播放| 久久久久久久综合日本| 欧美电影免费观看高清| 亚洲中字黄色| 久久久久欧美精品| 亚洲一区久久久| 久久激情视频免费观看| 日韩午夜高潮| 欧美一区二区视频在线观看2020 | 欧美日韩一区二区在线观看| 亚洲欧美国产日韩中文字幕| 久久久久久日产精品| 一本色道**综合亚洲精品蜜桃冫| 亚洲欧美日韩视频二区| 亚洲激情在线播放| 中文国产成人精品久久一| 一区二区视频欧美| 在线亚洲美日韩| 91久久精品国产91久久性色tv| av成人免费在线| 亚洲大片av| 亚洲一区二区三区乱码aⅴ| 亚洲高清在线播放| 中文精品一区二区三区| 亚洲韩日在线| 久久精品国产69国产精品亚洲| 亚洲神马久久| 欧美高清视频一区二区三区在线观看| 性伦欧美刺激片在线观看| 欧美精品三级| 欧美高清视频| 一区免费观看| 久久久99久久精品女同性| 香蕉乱码成人久久天堂爱免费| 欧美美女视频| 亚洲国产一区二区三区在线播| 国产一区二区中文| 亚洲欧美精品伊人久久| 亚洲欧美不卡| 国产精品二区在线| 一区二区动漫| 午夜精彩国产免费不卡不顿大片| 欧美日韩在线观看一区二区| 欧美激情网友自拍| 91久久在线观看| 欧美成人福利视频| 亚洲黑丝在线| 99热免费精品| 欧美日韩成人在线| 一本色道久久综合亚洲精品婷婷| 99在线热播精品免费| 欧美多人爱爱视频网站| 亚洲国产日韩一区二区| 亚洲精品久久在线| 欧美精品一区三区在线观看| 91久久久精品| 在线视频你懂得一区二区三区| 欧美日韩八区| 一区二区三区毛片| 欧美中文字幕久久| 极品尤物一区二区三区| 蜜臀av一级做a爰片久久| 欧美韩日一区| 亚洲一级片在线观看| 国产欧美91| 久久久蜜臀国产一区二区| 亚洲电影免费| 亚洲一区3d动漫同人无遮挡| 国产日韩成人精品| 老牛国产精品一区的观看方式| 亚洲欧洲另类国产综合| 亚洲在线播放| 国内精品久久久久影院 日本资源| 久久五月婷婷丁香社区| 亚洲精品国产无天堂网2021| 午夜亚洲视频| 亚洲第一视频网站| 欧美小视频在线观看| 欧美一区二区三区精品 | 午夜精品电影| 黄色国产精品| 欧美日韩亚洲一区二区| 欧美一级免费视频| 亚洲日本激情| 久久国产精品一区二区三区四区| 亚洲国产精品成人综合| 国产精品美女在线观看| 麻豆久久精品| 亚洲欧美日韩国产一区二区三区| 欧美成人黄色小视频| 亚洲欧美国产制服动漫| 最新国产成人在线观看| 国产日韩欧美在线观看| 欧美伦理影院| 久久男女视频| 午夜久久电影网| 妖精视频成人观看www| 免费久久99精品国产自| 欧美一级电影久久| 一区二区三区视频在线看| 伊人久久久大香线蕉综合直播| 欧美日韩综合在线免费观看| 久久久国产精品一区| 亚洲欧美在线一区| 这里只有精品视频| 亚洲经典三级| 欧美激情性爽国产精品17p| 久久久精品一品道一区| 午夜精品一区二区在线观看 | 国产精品红桃| 欧美激情四色 | 亚洲精品一级| 亚洲第一精品夜夜躁人人爽 | 亚洲一区精彩视频| 亚洲三级影院| 亚洲国产日本| 亚洲福利视频二区| 精品99一区二区三区| 国产欧美一区二区三区在线老狼| 欧美视频在线免费| 欧美日韩1区2区3区| 欧美福利专区| 欧美精品自拍| 欧美国产精品久久| 欧美精品91| 欧美激情亚洲自拍| 欧美激情精品| 免费一级欧美在线大片| 每日更新成人在线视频| 久久综合狠狠综合久久综合88| 久久久国产一区二区| 久久久亚洲影院你懂的| 久久久噜噜噜久久人人看| 麻豆成人在线观看| 欧美成人精品三级在线观看| 久久影院午夜论| 欧美国产日产韩国视频| 欧美精品麻豆| 国产精品色婷婷久久58| 国产在线视频欧美| 在线观看不卡av| 99视频一区二区| 香蕉久久a毛片| 久久亚洲视频| 亚洲国产另类久久精品| 日韩一级片网址| 亚洲欧美日韩一区二区三区在线 | 最新国产成人av网站网址麻豆 | 久久久国际精品| 蜜臀91精品一区二区三区| 欧美成人激情在线| 亚洲精品日日夜夜| 亚洲欧美在线高清| 老牛影视一区二区三区| 欧美色播在线播放| 国产日韩综合一区二区性色av| 伊人狠狠色j香婷婷综合| 日韩视频免费| 欧美在线影院| 亚洲黄色免费电影| 亚洲综合丁香| 欧美国产欧美亚洲国产日韩mv天天看完整 | 亚洲少妇一区| 欧美在线免费看| 欧美日韩黄视频| 韩国欧美国产1区| 亚洲午夜未删减在线观看| 久久天天躁狠狠躁夜夜av| 亚洲精品护士| 中国亚洲黄色| 韩国三级电影一区二区| 国产精品亚洲人在线观看| 欧美理论大片| 国内外成人免费激情在线视频| 亚洲人成网站999久久久综合| 午夜一级久久| 亚洲精品日产精品乱码不卡| 先锋影音网一区二区| 欧美日韩在线影院| 91久久极品少妇xxxxⅹ软件| 欧美一区二区在线观看| 欧美激情性爽国产精品17p| 欧美一级专区|