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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            久久精品国产精品 | 老色鬼久久亚洲一区二区 | 麻豆freexxxx性91精品| 午夜视频一区二区| 国产在线精品二区| 欧美不卡视频一区| 欧美日韩国产综合新一区| 亚洲午夜久久久久久久久电影院| 中文亚洲字幕| 国内精品免费在线观看| 欧美激情视频免费观看| 欧美日韩精品免费 | 亚洲精品永久免费精品| 亚洲狼人综合| 国产日本欧美视频| 亚洲第一福利视频| 欧美日韩国产限制| 久久久久久亚洲精品不卡4k岛国| 免播放器亚洲一区| 午夜视频一区在线观看| 久久久久国色av免费看影院| 亚洲免费av电影| 午夜精品久久久久久久99樱桃| 一区二区三区在线视频播放| 欧美激情精品| 国产精品亚洲综合| 欧美高清自拍一区| 国产精品亚洲成人| 亚洲国产精品高清久久久| 国产精品一二三视频| 免费欧美日韩| 国产精品青草综合久久久久99| 老司机午夜精品视频| 欧美视频在线一区二区三区| 鲁大师成人一区二区三区| 欧美揉bbbbb揉bbbbb| 免费不卡中文字幕视频| 欧美三级视频在线播放| 嫩草成人www欧美| 国产精品免费在线| 亚洲欧洲一区| 亚洲国产精品美女| 久久精品国产一区二区三| 在线视频欧美精品| 免费欧美高清视频| 乱人伦精品视频在线观看| 国产精品乱子乱xxxx| 亚洲黑丝一区二区| 在线看片第一页欧美| 午夜精品一区二区三区在线视| 99国产精品99久久久久久粉嫩 | 欧美黑人在线观看| 国户精品久久久久久久久久久不卡 | 亚洲大胆美女视频| 欧美一级久久久久久久大片| 亚洲免费视频网站| 欧美日韩国产成人在线免费| 欧美激情视频免费观看| 狠狠色丁香久久婷婷综合_中| 亚洲一级二级| 午夜在线播放视频欧美| 国产精品久久久亚洲一区| 亚洲精品女av网站| 在线观看成人av电影| 久久精品人人爽| 久久性色av| 在线成人激情视频| 男人的天堂成人在线| 欧美岛国激情| 亚洲欧洲另类| 欧美99在线视频观看| 亚洲高清电影| 一区二区三区四区五区视频 | 欧美日韩国产欧美日美国产精品| 亚洲国产毛片完整版| 99ri日韩精品视频| 欧美视频免费在线观看| 亚洲综合色噜噜狠狠| 亚洲欧美视频| 好看的av在线不卡观看| 久久九九99视频| 亚洲国产你懂的| 一区二区三区精品视频在线观看| 欧美性色aⅴ视频一区日韩精品| 一本到高清视频免费精品| 性欧美xxxx视频在线观看| 国产一区二区三区日韩欧美| 久久综合久久久| 亚洲人成在线免费观看| 欧美一区二区日韩| 亚洲电影免费在线| 欧美日韩国产在线观看| 午夜日韩激情| 亚洲国产精品一区| 午夜日本精品| 亚洲人成人一区二区三区| 欧美性片在线观看| 久久精品久久综合| 日韩一二三区视频| 久久久久久亚洲精品杨幂换脸 | 国产精品国产三级国产aⅴ浪潮 | 欧美中文字幕在线视频| 欧美激情一二三区| 亚洲欧美中文日韩v在线观看| 伊人久久婷婷色综合98网| 欧美日韩亚洲一区二区三区在线观看 | 嫩草影视亚洲| 亚洲天堂成人| 亚洲国产日韩在线一区模特| 亚欧成人在线| 亚洲精品视频免费观看| 国产一区二区三区电影在线观看| 欧美成人综合网站| 欧美在线免费视频| aa国产精品| 欧美刺激性大交免费视频| 午夜精品www| 亚洲美女精品一区| 精品69视频一区二区三区| 国产精品久久久久久五月尺| 久久只精品国产| 小黄鸭精品密入口导航| 中日韩美女免费视频网址在线观看| 老司机午夜精品视频在线观看| 亚洲一区二区三区高清不卡| 亚洲国产免费看| 国一区二区在线观看| 国产精品久久久久久av福利软件| 欧美大片第1页| 久久免费精品视频| 久久成人免费电影| 欧美亚洲视频在线观看| 中日韩美女免费视频网址在线观看| 亚洲激情在线视频| 亚洲国产精品久久久久秋霞不卡| 欧美 日韩 国产在线 | 亚洲先锋成人| 一片黄亚洲嫩模| 日韩西西人体444www| 亚洲国产激情| 亚洲国产精品视频一区| 亚洲国产精品久久久久| 在线欧美日韩国产| 在线成人激情| 亚洲国产一区二区三区青草影视| 在线播放亚洲一区| 91久久精品久久国产性色也91| 亚洲国产美女| 99精品欧美一区二区蜜桃免费| 亚洲经典三级| 日韩一级欧洲| 亚洲天堂视频在线观看| 亚洲一区二区三| 欧美一区二区免费观在线| 久久成人av少妇免费| 欧美在线啊v一区| 久久精品国产91精品亚洲| 浪潮色综合久久天堂| 免费在线观看一区二区| 欧美韩国在线| 日韩午夜三级在线| 亚洲一区二区三区中文字幕 | 亚洲精选大片| 亚洲午夜精品久久久久久浪潮| 亚洲永久在线| 久久精品一区二区三区不卡牛牛| 久久久久久久久久看片| 欧美va亚洲va香蕉在线| 欧美三级电影精品| 国产一区二区三区在线观看免费视频| 国内激情久久| 日韩一级大片| 久久se精品一区二区| 免费在线观看精品| av72成人在线| 久久久国产一区二区| 欧美激情综合五月色丁香小说| 国产精品美女久久久免费| 一区二区三区亚洲| 亚洲一区在线直播| 巨胸喷奶水www久久久免费动漫| 最新中文字幕亚洲| 欧美一区二区三区在线| 欧美另类videos死尸| 国产综合久久久久久鬼色| 一区二区免费在线观看| 久久婷婷麻豆| 亚洲图色在线| 欧美精品偷拍| 激情另类综合| 欧美一级免费视频| 亚洲国产视频一区二区| 久久精品国产一区二区三区| 欧美日韩在线播放一区| 亚洲国产欧美一区| 久久精品男女| 亚洲视频成人| 欧美日韩高清在线一区| 亚洲黄色在线看| 久久天天躁夜夜躁狠狠躁2022|