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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            久久久九九九九| 久久夜色精品国产欧美乱极品| 欧美h视频在线| 亚洲第一视频网站| 免费亚洲电影在线观看| 香蕉亚洲视频| 国产欧美精品在线播放| 亚洲欧美综合精品久久成人| 99综合在线| 欧美日韩日本国产亚洲在线| 一区二区三区欧美视频| 亚洲人成在线观看一区二区| 免费亚洲电影在线| 亚洲激情电影中文字幕| 欧美一区二区视频在线观看2020| 一区二区三区视频免费在线观看| 欧美日韩一级黄| 午夜精品一区二区三区在线| 亚洲欧美一区二区视频| 国产亚洲精品aa| 久久这里只精品最新地址| 久久久久久久波多野高潮日日| 亚洲大片精品永久免费| 亚洲第一搞黄网站| 欧美日韩影院| 亚洲免费电影在线| 亚洲精美视频| 欧美久久电影| 午夜精品久久一牛影视| 久久爱另类一区二区小说| 亚洲国产一二三| 一本色道久久99精品综合 | 久久精品一区| 久久青草欧美一区二区三区| 亚洲日本在线观看| 亚洲国产日韩欧美| 欧美精品成人91久久久久久久| 亚洲免费视频在线观看| 午夜在线精品| 一区二区三区在线观看国产| 亚洲激情婷婷| 欧美女人交a| 久久精品成人一区二区三区| 久久久久久久一区| 亚洲一级特黄| 久久亚洲视频| 午夜精品美女自拍福到在线| 美女尤物久久精品| 亚洲一区二区视频在线观看| 久久成人免费| 午夜亚洲福利| 欧美顶级艳妇交换群宴| 久久av资源网| 欧美色视频一区| 欧美大片在线影院| 国产精品视频免费| 最新中文字幕一区二区三区| 国产精品久久久久久av福利软件 | 夜夜嗨av色一区二区不卡| 亚洲欧美日韩精品久久亚洲区| 国产一区二区三区久久久| 欧美国产精品久久| 国产欧美一区二区三区国产幕精品 | 久久狠狠久久综合桃花| 亚洲图片欧洲图片av| 久久亚洲捆绑美女| 香蕉国产精品偷在线观看不卡| 欧美va天堂在线| 免费看精品久久片| 国产午夜精品全部视频播放| 一本久道综合久久精品| 亚洲裸体在线观看| 久久久999精品视频| 欧美在线视频全部完| 国产精品久久国产愉拍| 亚洲美女网站| 99国产精品久久久久久久成人热| 亚洲免费视频在线观看| 亚洲激情av在线| 免费久久99精品国产| 免费在线国产精品| 国外视频精品毛片| 久久精品欧美| 久久综合给合久久狠狠色| 国产在线观看91精品一区| 亚洲永久免费av| 欧美伊人久久大香线蕉综合69| 久久久亚洲国产美女国产盗摄| 亚洲社区在线观看| 欧美婷婷久久| 亚洲专区国产精品| 久久久国产精品亚洲一区| 国产日韩一区二区三区在线播放| 欧美亚洲一区二区在线观看| 久久手机精品视频| 亚洲人精品午夜| 欧美日韩亚洲一区三区| 正在播放欧美视频| 午夜精品久久久久99热蜜桃导演| 国产精品日本一区二区| 欧美在线高清| 欧美成人在线免费视频| 日韩视频精品在线| 欧美午夜精品久久久久久孕妇| 亚洲一区二区欧美| 久久久蜜桃一区二区人| 亚洲电影在线播放| 欧美日韩高清在线| 亚洲男女毛片无遮挡| 麻豆国产精品va在线观看不卡| 国产精品一区久久久| 久久九九99视频| 亚洲免费观看高清完整版在线观看熊 | 免费日韩一区二区| 99精品视频一区二区三区| 国产精品美女久久久久aⅴ国产馆| 新67194成人永久网站| 欧美激情一区二区三区全黄| 一区二区三区四区五区精品视频| 国产精品你懂的在线欣赏| 久久精品水蜜桃av综合天堂| 亚洲欧洲久久| 久久精品国产第一区二区三区最新章节 | 一本色道久久综合| 久久亚洲图片| 亚洲天堂免费在线观看视频| 黄色精品一区二区| 欧美日韩中文在线观看| 久久亚洲不卡| 亚洲一二三区在线观看| 免费成人网www| 亚洲精品久久久一区二区三区| 国产精品久久久久久户外露出| 久久久国产精品一区| 在线亚洲一区观看| 欧美激情精品久久久久久变态| 99精品视频免费观看| 国产美女精品视频免费观看| 欧美精品三级日韩久久| 久久久水蜜桃av免费网站| 亚洲一区二区三区免费在线观看| 亚洲精品久久久久久久久久久久久 | 亚洲国产精品激情在线观看| 黄色亚洲网站| 国语对白精品一区二区| 激情亚洲网站| 一色屋精品视频在线看| 亚洲精品女av网站| 韩国欧美国产1区| 韩国v欧美v日本v亚洲v| 尹人成人综合网| 亚洲韩国日本中文字幕| 亚洲国产一区二区三区a毛片| 亚洲国产cao| 亚洲精品影院| 亚洲午夜精品福利| 亚洲欧美日韩国产综合精品二区| 亚洲制服av| 久久精品中文字幕免费mv| 久久久一本精品99久久精品66| 久久天天狠狠| 亚洲电影免费| 一区二区三区回区在观看免费视频| 一区二区三区四区五区在线 | 久久久夜夜夜| 欧美大胆成人| 99视频超级精品| 亚洲欧美文学| 免费成人在线观看视频| 欧美片网站免费| 国产嫩草影院久久久久| 激情国产一区| 亚洲精品视频免费在线观看| 亚洲特黄一级片| 久久久人成影片一区二区三区| 欧美激情黄色片| 亚洲视频在线播放| 欧美在线看片| 欧美人体xx| 狠狠色综合色区| 亚洲天堂成人| 欧美成年视频| 亚洲综合第一页| 美女视频黄免费的久久| 国产精品免费久久久久久| 在线观看视频日韩| 亚洲主播在线观看| 欧美激情一区二区久久久| 亚洲一区二区三区在线观看视频| 久久人人看视频| 国产精品日韩欧美综合| 亚洲欧洲偷拍精品| 久久精品日韩一区二区三区| 亚洲卡通欧美制服中文| 久久激情综合网| 国产老肥熟一区二区三区| 9i看片成人免费高清| 美女亚洲精品| 久久gogo国模裸体人体| 国产精品国产三级国产aⅴ入口 |