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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            欧美va天堂在线| 亚洲欧美影院| 欧美大片在线观看一区二区| 欧美淫片网站| 影音先锋亚洲精品| 欧美高清在线精品一区| 欧美国产在线电影| 亚洲午夜av| 欧美在线一级视频| 伊人久久亚洲美女图片| 欧美激情一区二区三级高清视频| 欧美国产精品| 亚洲欧美一区二区三区在线| 欧美一区二区三区四区在线观看| 激情一区二区| 日韩视频一区二区在线观看 | 欧美日韩一区二区在线播放| 宅男噜噜噜66一区二区| 亚洲一区二区三区乱码aⅴ| 国产亚洲亚洲| 亚洲激情六月丁香| 欧美午夜无遮挡| 久久久噜噜噜久久人人看| 免费成人高清在线视频| 亚洲资源在线观看| 久久精品中文| 亚洲视频在线观看一区| 欧美一区91| 亚洲精品极品| 国产在线观看91精品一区| 亚洲第一精品夜夜躁人人爽| 国产精品久久久久免费a∨| 裸体丰满少妇做受久久99精品| 欧美高清影院| 久久久久久亚洲精品杨幂换脸| 老色鬼久久亚洲一区二区| 亚洲一区观看| 蜜桃av综合| 欧美一区亚洲一区| 欧美裸体一区二区三区| 久久永久免费| 国产精品久久午夜| 最近中文字幕mv在线一区二区三区四区 | 黄色在线成人| 999在线观看精品免费不卡网站| 国户精品久久久久久久久久久不卡 | 国产一区视频在线看| 亚洲欧洲一区二区三区在线观看 | 国产精品家庭影院| 欧美二区在线观看| 国产日韩av高清| 99xxxx成人网| 日韩亚洲国产欧美| 免费在线观看日韩欧美| 久久久xxx| 国产女人精品视频| 亚洲一二三级电影| 这里只有精品视频在线| 欧美电影免费观看高清完整版| 麻豆精品精华液| 国产亚洲精品自拍| 午夜精品久久久久久久99水蜜桃| 亚洲图色在线| 欧美美女喷水视频| 亚洲蜜桃精久久久久久久| 日韩视频在线你懂得| 欧美电影免费观看| 欧美顶级艳妇交换群宴| 久久九九免费| 亚洲国产欧美在线人成| 正在播放欧美视频| 欧美激情自拍| 亚洲国产高清自拍| 久久一区二区三区av| 美女成人午夜| 亚洲第一页自拍| 亚洲一区国产视频| 欧美性猛片xxxx免费看久爱| 亚洲精品小视频在线观看| 夜夜嗨一区二区三区| 欧美日韩在线观看一区二区三区| 亚洲精品婷婷| 亚洲欧美日韩在线综合| 国产精品亚洲综合| 久久成人18免费网站| 欧美成人国产一区二区| 亚洲精品一品区二品区三品区| 欧美日产一区二区三区在线观看| 欧美国产精品一区| 免费在线播放第一区高清av| 欧美视频在线观看一区二区| 亚洲午夜精品17c| 久久三级视频| 亚洲精选一区| 国产毛片久久| 欧美成人高清视频| 亚洲在线观看视频| 欧美成ee人免费视频| 国产精品99久久久久久宅男| 国产精品一区二区三区乱码 | 欧美成人精品在线视频| 亚洲精品久久久一区二区三区| 欧美日韩国产高清| 欧美一区二区三区视频| 最新精品在线| 欧美一区二区三区四区在线| 亚洲国产综合在线看不卡| 欧美三级电影大全| 久久亚洲视频| 亚洲欧美日本国产有色| 亚洲欧洲一区| 久久综合狠狠综合久久综合88| 亚洲视频一二区| 亚洲大胆女人| 国产一区久久久| 国产精品家庭影院| 欧美激情自拍| 久久裸体艺术| 午夜欧美不卡精品aaaaa| 亚洲免费观看高清完整版在线观看熊 | 欧美日韩播放| 美女91精品| 亚洲永久免费精品| 激情综合电影网| 噜噜噜在线观看免费视频日韩| 国产精品尤物| 欧美四级在线观看| 免费欧美网站| 久久亚裔精品欧美| 欧美在线视频日韩| 亚洲综合社区| 中文精品视频一区二区在线观看| 欧美激情一区二区三区不卡| 久久深夜福利| 久久福利毛片| 久久成人免费日本黄色| 亚洲欧美综合网| 亚洲欧美国产一区二区三区| 亚洲视频999| 亚洲午夜视频在线观看| 99国产麻豆精品| 亚洲精品中文字幕有码专区| 亚洲第一页在线| 亚洲第一天堂av| 亚洲激情av在线| 亚洲精品乱码久久久久久| 91久久嫩草影院一区二区| 国内精品久久久久久久影视麻豆| 亚洲自拍偷拍麻豆| 亚洲高清在线视频| 欧美国产日韩精品| 亚洲大片在线| 亚洲欧洲在线免费| 亚洲精品色图| 在线亚洲免费视频| 午夜免费日韩视频| 欧美在线免费播放| 久久亚洲一区二区| 免费观看亚洲视频大全| 欧美激情精品久久久| 欧美日韩国产精品自在自线| 欧美性色aⅴ视频一区日韩精品| 国产精品99免费看| 国产亚洲一级| 亚洲高清资源综合久久精品| 亚洲精品久久| 香蕉久久夜色精品| 久久婷婷久久一区二区三区| 欧美黄色影院| 亚洲免费激情| 久久成人免费视频| 母乳一区在线观看| 国产精品美女久久久久av超清| 欧美亚洲色图校园春色| 麻豆视频一区二区| 久久gogo国模裸体人体| 久久在线视频在线| 亚洲激情小视频| 亚洲欧美国产高清va在线播| 快播亚洲色图| 国产精品久久久久国产精品日日| 黑人极品videos精品欧美裸| 亚洲乱码精品一二三四区日韩在线| 亚洲一区免费看| 女人色偷偷aa久久天堂| 一区二区三区精品视频| 久久精品五月| 国产精品国产a级| 影音先锋亚洲一区| 午夜伦理片一区| 91久久香蕉国产日韩欧美9色| 午夜免费在线观看精品视频| 欧美成人一区二区三区片免费| 国产精品免费福利| 亚洲精品一区二区网址| 久久欧美肥婆一二区| 中国女人久久久| 欧美高清hd18日本| 尤物在线观看一区| 欧美一区二区免费|