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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            久久综合久久综合久久| 免费成人小视频| 国产精品久久网站| 午夜激情综合网| 亚洲免费在线精品一区| 国产一区二区中文| 欧美v国产在线一区二区三区| 老牛嫩草一区二区三区日本 | 一本色道久久88综合日韩精品| 欧美乱在线观看| 亚洲欧美日韩在线一区| 欧美一区二区三区啪啪| 亚洲第一狼人社区| 亚洲日本激情| 国产精品日韩精品欧美精品| 久久国产精品黑丝| 免费看精品久久片| 午夜精品久久久久久| 久久久久国产精品一区三寸| 日韩亚洲欧美高清| 欧美一区二区三区免费视| 亚洲激情在线激情| 亚洲小说欧美另类婷婷| 在线电影国产精品| 99国产精品久久久久老师| 国产曰批免费观看久久久| 亚洲精品乱码久久久久| 国产日本欧美一区二区| 亚洲黄色在线观看| 国产自产在线视频一区| 亚洲日本中文字幕| 精品999久久久| 在线亚洲美日韩| 亚洲成人资源网| 亚洲一区二区在线免费观看视频 | 国产精品欧美精品| 欧美成人自拍| 国产日韩一区二区三区在线| 亚洲精品影院在线观看| 一区二区在线观看视频| 亚洲视频网站在线观看| 亚洲欧洲三级| 久久精品免费看| 亚洲欧美日韩在线观看a三区| 欧美成人网在线| 蜜臀99久久精品久久久久久软件| 国产精品国产精品国产专区不蜜| 亚洲第一页在线| 黑人一区二区| 欧美一区二区| 午夜在线电影亚洲一区| 欧美日韩一区二区视频在线 | 久久久久久一区二区| 欧美日韩在线播| 亚洲免费黄色| 9久草视频在线视频精品| 欧美 日韩 国产精品免费观看| 久久久久久亚洲精品不卡4k岛国| 国产精品毛片| 亚洲图片欧洲图片日韩av| 在线综合视频| 欧美日韩一区二区三区在线视频| 亚洲欧洲中文日韩久久av乱码| 亚洲大胆女人| 欧美69wwwcom| 亚洲国产老妈| 亚洲蜜桃精久久久久久久| 欧美高清视频一区| 亚洲国产精品久久久久婷婷老年| 亚洲高清不卡| 欧美成人在线免费视频| 亚洲国产欧美日韩另类综合| 99国产精品一区| 欧美日韩久久不卡| 一区二区三区欧美成人| 亚洲欧美中日韩| 国产亚洲高清视频| 久久免费高清| 亚洲第一综合天堂另类专| 亚洲精品男同| 欧美午夜电影一区| 午夜日韩激情| 欧美激情欧美激情在线五月| 日韩一二三区视频| 欧美午夜欧美| 久久精品国产免费看久久精品| 女人香蕉久久**毛片精品| 日韩午夜在线| 国产精品天天摸av网| 久久久噜久噜久久综合| 亚洲激情av在线| 午夜视频在线观看一区二区三区| 国产一区二区三区高清| 美女主播视频一区| 亚洲视频在线观看三级| 久久综合久色欧美综合狠狠| 亚洲激情小视频| 国产精品sm| 久久久亚洲人| 亚洲一区免费网站| 欧美国产视频在线| 午夜精品视频在线观看一区二区| 黑丝一区二区三区| 欧美日韩在线观看一区二区三区| 午夜一级在线看亚洲| 亚洲国产精品ⅴa在线观看| 香蕉久久精品日日躁夜夜躁| 亚洲第一页中文字幕| 国产精品久久久久77777| 久久夜色精品一区| 亚洲伊人观看| 亚洲精品视频在线看| 久久这里有精品视频| 一本高清dvd不卡在线观看| 狠狠干综合网| 国产精品极品美女粉嫩高清在线| 久久一二三四| 欧美在线看片a免费观看| 夜夜爽夜夜爽精品视频| 亚洲电影免费观看高清完整版在线 | 国产精品手机视频| 欧美国产亚洲另类动漫| 久久精品视频免费播放| 亚洲综合清纯丝袜自拍| av成人免费| 亚洲日本成人在线观看| 欧美激情久久久| 蜜桃av一区二区三区| 久久久久国产一区二区三区| 亚洲欧美春色| 亚洲综合好骚| 亚洲午夜精品在线| 一区二区三区鲁丝不卡| 亚洲人成网站在线播| 伊人夜夜躁av伊人久久| 国内成人在线| 激情综合激情| 激情成人亚洲| 在线电影国产精品| 又紧又大又爽精品一区二区| 国语自产偷拍精品视频偷| 国产精品日韩精品| 国产欧美精品一区二区三区介绍| 国产精品美女一区二区在线观看 | 老鸭窝毛片一区二区三区| 欧美一区2区三区4区公司二百| 亚洲视频一区二区在线观看| 99视频一区二区| 亚洲午夜在线视频| 午夜精品久久久久久99热| 亚洲一区欧美激情| 西瓜成人精品人成网站| 欧美在线视屏| 老司机免费视频久久| 欧美大胆人体视频| 欧美日韩国产首页在线观看| 欧美日韩国产精品专区| 国产精品女主播在线观看| 国产婷婷色一区二区三区在线 | 在线日韩日本国产亚洲| 亚洲国内自拍| 一区二区三欧美| 午夜视频久久久| 老牛嫩草一区二区三区日本| 欧美jizz19性欧美| 亚洲精品乱码久久久久久按摩观| 日韩视频在线免费观看| 亚洲欧美精品伊人久久| 久久免费偷拍视频| 欧美日韩不卡在线| 国产私拍一区| 亚洲欧洲美洲综合色网| 亚洲欧美不卡| 久久综合色综合88| 99re8这里有精品热视频免费 | 欧美成年人网| 国产精品美女久久久久久免费 | 欧美日韩精品综合| 国产午夜精品理论片a级大结局 | 欧美私人啪啪vps| 国产日韩欧美精品| 亚洲欧洲三级电影| 久久丁香综合五月国产三级网站| 牛夜精品久久久久久久99黑人 | 久久嫩草精品久久久精品| 亚洲高清视频的网址| 亚洲欧美国产77777| 欧美14一18处毛片| 国产日韩欧美精品一区| 一区二区电影免费观看| 久久亚洲精品网站| 一区二区三区欧美日韩| 美女精品在线观看| 国精产品99永久一区一区| 日韩网站在线| 欧美大尺度在线| 欧美一区二区三区的| 欧美日韩一区成人| 亚洲精品欧美极品| 美女黄色成人网|