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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            欧美日本二区| 欧美激情久久久久| 国产精品日韩精品| 亚洲欧美日韩国产一区二区三区| 日韩亚洲欧美中文三级| 国产精品a久久久久| 午夜精品视频在线观看| 性色一区二区| 亚洲第一页在线| 亚洲精品美女久久久久| 欧美午夜美女看片| 欧美中文字幕精品| 玖玖玖国产精品| 中国成人亚色综合网站| 亚洲欧美综合v| 亚洲激情小视频| 艳妇臀荡乳欲伦亚洲一区| 国产欧美视频一区二区三区| 另类亚洲自拍| 欧美性色视频在线| 女女同性女同一区二区三区91| 欧美大秀在线观看 | 午夜精品电影| 影音先锋久久| 在线视频免费在线观看一区二区| 国产免费亚洲高清| 欧美激情国产日韩| 国产精品久久久久久久7电影| 久久久久久电影| 欧美激情一级片一区二区| 亚洲欧美日韩视频二区| 久久综合久久88| 久久超碰97人人做人人爱| 欧美sm视频| 久久久久久有精品国产| 欧美伦理在线观看| 女仆av观看一区| 国产精品一区二区在线观看网站| 欧美激情欧美激情在线五月| 国产精品一区视频网站| 91久久嫩草影院一区二区| 国产日产欧产精品推荐色| 亚洲精品一区二区三区樱花| 在线视频成人| 欧美中在线观看| 欧美一区二区啪啪| 欧美视频在线观看一区| 亚洲国产天堂久久综合网| 国模私拍视频一区| 午夜亚洲影视| 亚欧美中日韩视频| 国产精品日韩在线播放| 日韩午夜在线| 在线视频亚洲欧美| 欧美久久久久久久久| 欧美黄色一区| 亚洲国产日韩欧美综合久久| 久久久久久91香蕉国产| 久久精品99无色码中文字幕| 国产精品乱人伦一区二区| 日韩午夜免费视频| 亚洲一区二区三区精品动漫| 欧美日韩成人一区二区三区| 亚洲国产精品久久久久婷婷老年| 在线观看日韩av| 久热精品在线| 亚洲国产黄色| 一区二区三区国产精华| 欧美精品一区二区在线播放| 91久久中文| 亚洲午夜精品| 国产日韩欧美在线视频观看| 新狼窝色av性久久久久久| 欧美在线免费视屏| 国产一区二区黄色| 久久综合色婷婷| 亚洲黄网站在线观看| 99精品欧美一区| 欧美午夜a级限制福利片| 亚洲天堂视频在线观看| 欧美一级夜夜爽| 在线观看三级视频欧美| 免费久久精品视频| 日韩一区二区电影网| 欧美一区二区三区视频| 好看不卡的中文字幕| 免费观看日韩| 亚洲图片欧洲图片日韩av| 久久成人国产| 亚洲精品中文字幕在线| 国产精品久久久久aaaa九色| 欧美一区二区三区四区在线| 欧美激情久久久| 亚洲一区图片| 狠狠色噜噜狠狠色综合久| 欧美精品九九99久久| 亚洲一区国产精品| 欧美成人精品在线播放| 亚洲视频免费观看| 一区二区在线观看视频| 欧美日韩系列| 久久精品女人| 在线视频欧美日韩| 可以免费看不卡的av网站| 宅男精品导航| 伊人成综合网伊人222| 欧美无乱码久久久免费午夜一区| 久久精品99无色码中文字幕| 日韩视频中午一区| 欧美a级一区| 欧美在线观看网站| 中国成人黄色视屏| 亚洲国内欧美| 黄色一区二区在线观看| 国产精品vvv| 欧美黑人国产人伦爽爽爽| 香蕉久久夜色精品国产使用方法| 亚洲人成77777在线观看网| 久久国内精品视频| 午夜精品国产| 中文日韩在线视频| 亚洲美女淫视频| 亚洲高清视频在线观看| 国产欧美一区二区三区另类精品| 欧美好吊妞视频| 蜜臀久久久99精品久久久久久 | 久久精品一区| 欧美在线视频观看免费网站| 一本久久a久久精品亚洲| 1024成人网色www| 精品动漫一区二区| 国产一区二区久久| 国产日韩欧美a| 国产女人水真多18毛片18精品视频| 欧美理论电影在线观看| 美女脱光内衣内裤视频久久网站| 欧美与黑人午夜性猛交久久久| 亚洲女爱视频在线| 亚洲影视在线| 午夜天堂精品久久久久| 亚洲免费在线播放| 亚洲伊人伊色伊影伊综合网| 一区二区黄色| 亚洲午夜三级在线| 亚洲欧美另类国产| 欧美一级电影久久| 欧美自拍偷拍午夜视频| 久久国产精品久久久久久| 欧美一区二区视频97| 欧美影院精品一区| 久久精品国产96久久久香蕉| 久久国产日韩欧美| 久久综合中文| 欧美精品一区二区在线播放| 欧美日韩成人一区| 国产精品国产三级国产aⅴ无密码| 欧美午夜免费电影| 国产老肥熟一区二区三区| 国产一区成人| 亚洲国产精选| 亚洲一区二区三区色| 欧美亚洲一区二区在线观看| 久久久久久国产精品mv| 牛人盗摄一区二区三区视频| 亚洲欧洲三级电影| 亚洲天堂免费观看| 久久久国产精品一区二区中文 | 欧美高清视频在线| 国产精品伦理| 亚洲电影免费观看高清完整版在线 | 亚洲精品1234| 亚洲一二三区精品| 久久久精品国产免大香伊| 欧美刺激午夜性久久久久久久| 亚洲精品国产精品乱码不99| 亚洲免费在线视频| 免费欧美电影| 国产欧美日韩视频在线观看| 亚洲第一页中文字幕| 亚洲女优在线| 欧美成人亚洲成人日韩成人| 一区二区三区高清在线观看| 久久精品中文| 欧美日韩蜜桃| 在线成人激情黄色| 亚洲一区二区伦理| 欧美福利影院| 欧美一二区视频| 欧美日韩免费一区二区三区| 狠狠干狠狠久久| 亚洲综合精品四区| 欧美激情性爽国产精品17p| 亚洲欧美国产日韩天堂区| 蜜臀a∨国产成人精品| 国产日本亚洲高清| 亚洲综合首页| 91久久综合| 牛人盗摄一区二区三区视频| 国产视频一区二区三区在线观看| 99成人在线|