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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            母乳一区在线观看| 欧美激情在线狂野欧美精品| 国产午夜精品全部视频在线播放| 性欧美超级视频| 小处雏高清一区二区三区| 国产视频一区免费看| 久久一区二区视频| 欧美久久视频| 久久www免费人成看片高清| 久久久久.com| 日韩一级裸体免费视频| 亚洲综合电影| 亚洲国产精品电影在线观看| 亚洲美洲欧洲综合国产一区| 国产日产欧美一区| 欧美激情一区三区| 国产精品欧美在线| 欧美黄色片免费观看| 国产精品毛片在线| 欧美激情网友自拍| 国产精品永久免费观看| 亚洲国产成人一区| 国产日产欧美精品| 亚洲美女毛片| 在线观看亚洲专区| 一区二区三区国产精华| 在线不卡视频| 亚洲一区二区三区视频播放| 亚洲人成在线观看| 久久xxxx精品视频| 亚洲欧美另类久久久精品2019| 久久精品国产91精品亚洲| 一区二区三区国产在线观看| 久久精品在这里| 亚洲欧美国产一区二区三区| 欧美xx视频| 狂野欧美激情性xxxx欧美| 国产精品久久久久久模特| 亚洲二区在线观看| 伊人久久婷婷| 午夜日韩视频| 亚洲欧美自拍偷拍| 欧美日产在线观看| 亚洲国产老妈| 亚洲高清资源| 久久久久久久欧美精品| 欧美在线你懂的| 国产精品高清在线观看| 日韩小视频在线观看| 日韩视频亚洲视频| 欧美成人精品h版在线观看| 久久久久久久网| 国产精品中文字幕在线观看| 99这里只有久久精品视频| 日韩一级在线观看| 欧美激情第六页| 亚洲国产另类精品专区| 亚洲精品偷拍| 欧美金8天国| 亚洲美女色禁图| 日韩亚洲在线观看| 欧美视频一区二区| 亚洲视频免费在线观看| 亚洲欧美综合精品久久成人| 国产精品婷婷| 久久99在线观看| 久久人人爽人人爽爽久久| 黄色精品一二区| 久久综合激情| 亚洲黄色精品| 亚洲尤物视频网| 国产欧美日韩伦理| 欧美有码在线观看视频| 免费高清在线视频一区·| 亚洲国产第一页| 欧美人成在线| 亚洲一区二区三区成人在线视频精品 | 欧美激情小视频| 日韩亚洲不卡在线| 欧美午夜不卡视频| 欧美在线91| 亚洲第一精品久久忘忧草社区| 亚洲精品一区二区三区蜜桃久| 欧美日韩在线播放| 亚洲免费一在线| 蜜桃av噜噜一区| 一二美女精品欧洲| 国产欧美一区二区三区沐欲| 久久女同精品一区二区| 亚洲免费不卡| 久久午夜激情| 在线亚洲欧美| 激情成人在线视频| 欧美日韩一区二区在线观看| 午夜精品福利电影| 亚洲国产日韩一区二区| 欧美一区二区三区四区高清| 亚洲黄色尤物视频| 国产欧美在线看| 欧美国产先锋| 欧美一区二区成人6969| 亚洲黄色一区二区三区| 久久av一区二区三区| 亚洲日本中文| 狠狠色丁香久久综合频道 | 久久久久久久欧美精品| 一区二区三区久久| 欧美激情中文字幕乱码免费| 久久国产66| 亚洲永久免费| 亚洲精品中文在线| 在线观看视频欧美| 国产欧美一区二区三区另类精品| 欧美电影免费观看| 久久久久女教师免费一区| 亚洲淫片在线视频| 日韩午夜在线| 亚洲人在线视频| 欧美高清视频在线播放| 久久色在线观看| 欧美专区日韩专区| 亚洲免费影视第一页| 99国产精品久久久久老师| 亚洲电影在线播放| 狠狠色丁香久久综合频道 | 欧美视频在线免费看| 欧美大片一区二区| 麻豆精品在线播放| 久久久久免费视频| 久久亚洲精品伦理| 久久久一区二区| 久久久在线视频| 久久久亚洲午夜电影| 欧美在线影院| 久久国产精品99精品国产| 欧美在线播放高清精品| 欧美一区免费视频| 欧美一级专区免费大片| 欧美一区二区三区视频免费播放| 亚洲一区二区三区在线看| 亚洲视频在线观看网站| 一本一本久久a久久精品综合麻豆| 亚洲国产免费看| 日韩一区二区精品视频| 日韩亚洲欧美成人| 亚洲特级片在线| 亚洲欧美日韩区| 久久精品国产一区二区三| 久久久久久久欧美精品| 米奇777超碰欧美日韩亚洲| 免费在线观看日韩欧美| 欧美日产一区二区三区在线观看| 欧美日韩亚洲视频| 国产精品有限公司| 狠狠色伊人亚洲综合成人| 亚洲激情欧美激情| 一区二区三区四区五区精品视频| 亚洲图中文字幕| 久久精品在线视频| 欧美大片一区二区| 9色精品在线| 午夜精品久久久久| 狼人天天伊人久久| 欧美日韩在线看| 国产日韩精品入口| 亚洲国产一区二区a毛片| 亚洲天堂成人在线观看| 久久青草久久| 日韩亚洲欧美成人| 久久黄色小说| 欧美日韩精品一区二区天天拍小说| 欧美色中文字幕| 伊人天天综合| 亚洲在线视频| 美女久久一区| 在线亚洲观看| 麻豆久久婷婷| 国产精品一区二区久久国产| 亚洲高清久久久| 欧美一区二区视频97| 亚洲国产欧美日韩精品| 午夜欧美大尺度福利影院在线看| 欧美h视频在线| 国产一区二区三区电影在线观看| 亚洲精品影院| 免费在线亚洲欧美| 亚洲制服av| 欧美日韩一区二区精品| 亚洲第一页自拍| 久久国产精品第一页| 日韩视频在线永久播放| 久久久久网站| 国内成人精品2018免费看| 亚洲一区二区黄色| 亚洲第一福利视频| 久久久国产午夜精品| 国产欧美精品一区二区三区介绍| 99伊人成综合| 亚洲国产婷婷| 欧美成人激情视频免费观看|