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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波 閱讀(4752) 評論(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国产欧美久久久精品| 欧美一区二区三区视频免费播放 | 蜜臀av性久久久久蜜臀aⅴ| 国产精品裸体一区二区三区| 亚洲精品网站在线播放gif| 在线观看日韩www视频免费 | 国产亚洲精品bv在线观看| 夜夜夜久久久| 亚洲视频久久| 欧美日韩国产一级片| 亚洲久久成人| 99国产精品| 欧美激情视频一区二区三区免费| 久久夜色精品一区| 国产一区二区三区成人欧美日韩在线观看| 日韩一级黄色av| 亚洲一区视频在线观看视频| 欧美另类久久久品| 亚洲品质自拍| 日韩亚洲欧美中文三级| 欧美国产精品人人做人人爱| 亚洲福利av| 亚洲精品一区二区三区在线观看 | 免费成人高清| 91久久精品美女| 99精品视频免费观看| 欧美日韩国产页| 亚洲婷婷综合久久一本伊一区| 亚洲一区三区视频在线观看| 欧美天天影院| 午夜精品美女久久久久av福利| 欧美一区二区在线观看| 国产偷久久久精品专区| 久久成人在线| 亚洲电影免费在线| 亚洲天堂av综合网| 国产午夜精品美女视频明星a级| 小处雏高清一区二区三区 | 亚洲一区二区三区视频播放| 国产毛片一区| 欧美va亚洲va国产综合| 亚洲人成网站色ww在线| 亚洲一区国产精品| 国产视频一区在线| 久久综合激情| 亚洲视频在线免费观看| 欧美在线视频二区| 在线观看亚洲精品视频| 欧美国产欧美综合| 亚洲欧美激情在线视频| 欧美二区在线| 亚洲天天影视| 在线观看成人网| 欧美日韩在线不卡一区| 欧美在线免费观看| 亚洲毛片播放| 你懂的网址国产 欧美| 亚洲一区二区三| 亚洲国产精品va在看黑人| 欧美色区777第一页| 久久久久国产精品一区| 亚洲区一区二| 国产精品久久77777| 久久一区二区三区国产精品| 亚洲一区二区三区三| 欧美激情久久久久| 久久精品官网| 亚洲一区二区三区精品在线| 伊人久久亚洲热| 国产精品久久午夜夜伦鲁鲁| 欧美韩国在线| 久久精品日韩| 亚洲男人的天堂在线aⅴ视频| 欧美国产日韩一区二区在线观看| 欧美亚洲在线观看| 一本久久a久久精品亚洲| 激情综合色综合久久综合| 国产精品盗摄久久久| 欧美成人tv| 久久综合国产精品| 欧美在线首页| 午夜一区二区三区在线观看 | 美女网站久久| 久久精品国产欧美亚洲人人爽 | 一区二区三区精品在线| 亚洲成色777777在线观看影院| 久久国产精品一区二区三区四区 | 韩国成人福利片在线播放| 国产精品免费在线| 欧美区一区二区三区| 免费在线看一区| 久久综合中文字幕| 久久国产手机看片| 欧美一区二区精品久久911| 永久域名在线精品| 国产偷自视频区视频一区二区| 国产精品视区| 国产精品中文字幕在线观看| 国产精品扒开腿爽爽爽视频| 欧美日韩美女在线观看| 欧美日韩八区| 欧美视频精品在线| 欧美日韩专区| 欧美午夜精品久久久久久超碰| 欧美日韩一区在线播放| 欧美日韩亚洲视频| 欧美四级在线观看| 国产精品婷婷| 国产一区三区三区| 一区二区在线视频播放| 亚洲狠狠婷婷| 一区二区三区精品久久久| 一本色道久久综合狠狠躁篇怎么玩 | 亚洲女人天堂成人av在线| 亚洲免费在线视频| 欧美一区二区三区播放老司机| 久久xxxx精品视频| 老司机精品导航| 欧美黄色免费| 99精品国产热久久91蜜凸| 亚洲视频一区二区在线观看| 亚洲一区免费| 欧美专区一区二区三区| 久久综合久色欧美综合狠狠| 欧美激情一区二区| 国产精品久久久久天堂| 国内精品视频在线播放| 亚洲精品一区二区三区四区高清| 中国成人黄色视屏| 欧美尤物一区| 免费看成人av| 一本一本久久a久久精品综合麻豆| 亚洲日本视频| 亚洲视频狠狠| 美女被久久久| 一本综合精品| 久久综合精品一区| 国产精品捆绑调教| 亚洲高清视频在线观看| 亚洲一区二区欧美日韩| 麻豆精品一区二区综合av| 日韩性生活视频| 久久精品亚洲一区二区三区浴池| 欧美国产日韩免费| 国产精品三上| 亚洲精品免费电影| 欧美主播一区二区三区美女 久久精品人 | 亚洲激情综合| 欧美一区二区成人6969| 欧美另类视频| 亚洲福利视频二区| 香蕉精品999视频一区二区| 欧美国产日本在线| 午夜精品美女自拍福到在线| 欧美日韩久久久久久| 国产揄拍国内精品对白| 亚洲一区二区精品| 亚洲激情女人| 久久天天躁狠狠躁夜夜av| 国产精品久久77777| 最新亚洲一区| 美女视频一区免费观看| 亚洲综合三区| 国产精品国产自产拍高清av| 亚洲茄子视频| 欧美不卡福利| 久久精品一区二区| 国产区日韩欧美| 亚洲综合二区| 一卡二卡3卡四卡高清精品视频| 美女国内精品自产拍在线播放| 国产一区二区三区的电影 | 日韩午夜三级在线| 欧美黑人国产人伦爽爽爽| 在线日韩欧美视频| 久久精品成人| 性做久久久久久| 国产日韩欧美综合精品| 午夜精品久久久久久久99樱桃| 99re6这里只有精品视频在线观看| 免费一区二区三区| 亚洲激情婷婷| 欧美国产一区二区三区激情无套| 久久精品在线播放| 狠狠色丁香婷婷综合久久片| 久久久亚洲一区| 久久精品人人做人人爽电影蜜月| 国产主播一区二区| 六月丁香综合| 亚洲欧美国产精品桃花| 亚洲午夜未删减在线观看| 国产精品成人午夜| 欧美一区二区国产| 欧美一区二区三区喷汁尤物| 狠狠色综合网站久久久久久久| 久久免费国产| 免费不卡中文字幕视频| 亚洲美女尤物影院|