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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波 閱讀(4766) 評論(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>
            美女精品网站| 亚洲精品乱码视频| 亚洲国产欧美久久| 国产精品视频内| 亚洲国产你懂的| 狠狠色丁香婷婷综合久久片| 亚洲精品美女免费| 久久国产精品99国产| 亚洲视频在线观看网站| 免费久久99精品国产自在现线| 久久精品麻豆| 国产精品久久久久久久免费软件 | 久久只精品国产| 欧美性淫爽ww久久久久无| 欧美顶级艳妇交换群宴| 国产视频一区二区三区在线观看| 亚洲人在线视频| 亚洲国产日韩一区二区| 久久久av网站| 麻豆精品在线播放| 影音先锋久久久| 久久精品国产亚洲高清剧情介绍| 欧美亚洲免费电影| 国产精品美女一区二区| 99在线精品视频在线观看| 日韩亚洲国产欧美| 欧美日韩国产小视频在线观看| 欧美激情影院| 亚洲精品四区| 欧美精品一区在线播放| 亚洲乱码国产乱码精品精天堂| 欧美午夜精品一区| 99日韩精品| 午夜在线a亚洲v天堂网2018| 国产精品久久久久久久电影 | 欧美午夜精品久久久| 一区二区91| 亚洲欧美日本精品| 国产欧美综合在线| 久久久久综合网| 美女黄网久久| 亚洲片区在线| 欧美日韩在线综合| 亚洲免费在线视频一区 二区| 欧美亚日韩国产aⅴ精品中极品| 亚洲午夜精品久久久久久app| 欧美特黄一区| 校园春色国产精品| 欧美 亚欧 日韩视频在线| 亚洲精品在线免费| 国产精品成人免费精品自在线观看| 亚洲特级毛片| 欧美~级网站不卡| 一区二区冒白浆视频| 国产精品免费一区二区三区观看| 久久av老司机精品网站导航| 精品91久久久久| 欧美极品影院| 午夜精品在线| 亚洲国产欧美在线| 午夜精品久久久久久久99黑人| 狠狠久久五月精品中文字幕| 欧美巨乳波霸| 久久国产精品久久久久久久久久| 精久久久久久久久久久| 欧美日韩免费一区| 久久九九国产精品怡红院| 99re成人精品视频| 欧美不卡视频| 午夜精品一区二区三区在线视| 红桃视频成人| 欧美视频在线观看一区二区| 久久精品一区二区三区不卡牛牛| 亚洲卡通欧美制服中文| 久久综合一区二区三区| 亚洲亚洲精品在线观看 | 亚洲人成网站色ww在线| 欧美一区二区三区四区夜夜大片| 91久久在线观看| 国产亚洲激情视频在线| 欧美日韩一视频区二区| 另类天堂av| 欧美在线网址| 中文av一区二区| 91久久精品一区| 欧美69视频| 久久久久久穴| 午夜亚洲福利| 亚洲免费视频在线观看| 亚洲美女av在线播放| 影音先锋欧美精品| 国产综合香蕉五月婷在线| 国产精品久久久久久久电影| 欧美日韩日本视频| 欧美国产欧美亚州国产日韩mv天天看完整| 香蕉久久久久久久av网站| 一区二区三区四区蜜桃| 亚洲人成亚洲人成在线观看图片 | 亚洲激情第一页| 伊人久久综合97精品| 国产在线精品一区二区夜色| 亚洲午夜在线视频| 一区二区三区黄色| 一本久久青青| 亚洲视频一区二区免费在线观看| 亚洲欧洲日韩女同| 亚洲国产精品成人综合| 亚洲国产成人porn| 亚洲高清视频在线观看| 在线观看亚洲视频啊啊啊啊| 伊人精品成人久久综合软件| 一区二区三区中文在线观看 | 国产一区二区精品丝袜| 国产色产综合产在线视频| 国产手机视频一区二区| 国产在线高清精品| 在线精品观看| 91久久国产自产拍夜夜嗨| 亚洲人成亚洲人成在线观看图片 | 欧美黄色片免费观看| 女女同性女同一区二区三区91| 能在线观看的日韩av| 欧美国产精品人人做人人爱| 亚洲国产成人av| 亚洲精品影视| 亚洲欧美日韩中文视频| 久久都是精品| 欧美顶级大胆免费视频| 欧美日韩中文字幕在线视频| 国产精品人成在线观看免费| 国产欧美亚洲视频| 激情丁香综合| 99国产精品久久久久久久成人热 | 欧美中文在线字幕| 玖玖玖国产精品| 亚洲激情在线观看| 亚洲中无吗在线| 久久美女艺术照精彩视频福利播放| 免费影视亚洲| 国产精品久久久久久久久动漫| 国产在线视频欧美一区二区三区| 在线日韩成人| 亚洲欧美日韩在线综合| 久久中文精品| 99精品国产在热久久下载| 欧美一区二区黄| 欧美精品尤物在线| 国产一区二区三区精品久久久| 亚洲欧洲一级| 欧美一区网站| 亚洲精品你懂的| 亚洲网站在线| 欧美成人按摩| 国产一区二区三区在线观看网站 | 欧美一区二区精美| 欧美伦理影院| 亚洲综合日韩在线| 久久亚洲欧美国产精品乐播| 在线观看日产精品| 亚洲视频一区二区| 欧美chengren| 亚洲欧美日韩天堂| 欧美日韩国产在线一区| 狠狠色丁香婷婷综合影院| 午夜精品理论片| 亚洲日本一区二区| 麻豆精品在线观看| 国模叶桐国产精品一区| 亚洲男人av电影| 91久久精品美女高潮| 久久视频免费观看| 国产日韩1区| 亚洲欧美一区二区三区在线| 亚洲国产日韩在线| 欧美成人按摩| 欧美在线观看一区二区| 国产精品久久久久aaaa九色| 亚洲精品小视频在线观看| 猛干欧美女孩| 久久久国产亚洲精品| 欧美中文在线字幕| 国产欧美精品| 欧美在线观看你懂的| 一区二区三区精密机械公司| 欧美日韩1区| 99视频精品全国免费| 亚洲国产精品va在线看黑人动漫| 久久天堂成人| 在线观看欧美视频| 麻豆av一区二区三区| 久久狠狠亚洲综合| 精品动漫3d一区二区三区| 久久久xxx| 欧美xxx在线观看| 久久亚洲二区| 91久久国产综合久久蜜月精品| 欧美电影在线观看| 欧美成人性生活| 欧美日韩不卡一区| 亚洲小说欧美另类婷婷|