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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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>
            亚洲欧美一区二区视频| 久久久久久久久久久一区 | 欧美高潮视频| 久久精品水蜜桃av综合天堂| 欧美日韩你懂的| 亚洲激情视频在线观看| 韩日视频一区| 欧美一级视频| 久久精品在线| 国产视频久久久久久久| 亚洲午夜久久久久久尤物 | 亚洲国产一区二区三区在线播| 欧美一区2区三区4区公司二百| 午夜精品福利在线| 国产精品成人在线| 亚洲婷婷在线| 欧美诱惑福利视频| 国产一区二区日韩精品| 日韩图片一区| 91久久久在线| 欧美大片免费| 日韩午夜精品| 亚洲一区图片| 国产欧美日韩专区发布| 午夜精品久久| 久久这里只有精品视频首页| 精品电影一区| 免费永久网站黄欧美| 亚洲电影在线免费观看| 亚洲美女视频在线观看| 欧美日韩国产页| 亚洲视频在线二区| 久久激情网站| 在线精品国产欧美| 欧美激情国产日韩| 夜夜精品视频一区二区| 欧美一区成人| 亚洲淫性视频| 久久久久国产精品午夜一区| 又紧又大又爽精品一区二区| 免费久久99精品国产自| 亚洲精品视频在线播放| 亚洲欧美一区二区三区久久| 国产主播精品| 欧美激情一区二区三区在线视频观看 | 欧美性一二三区| 亚洲欧美国产毛片在线| 久久全国免费视频| 日韩视频一区二区三区在线播放| 欧美日韩亚洲系列| 亚洲欧美日韩专区| 欧美高清视频一区二区| 国产精品99久久久久久久久久久久| 国产精品免费一区豆花| 久久久久国产精品人| 亚洲精品一品区二品区三品区| 欧美一区二区久久久| 91久久综合| 国产乱码精品| 欧美国产精品日韩| 午夜精品一区二区在线观看| 欧美激情视频一区二区三区不卡| 亚洲综合色婷婷| 亚洲国产mv| 国产精品日韩| 欧美激情网友自拍| 欧美一区二区三区在| 亚洲日韩视频| 美女精品在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 狠狠色狠狠色综合日日小说| 欧美性大战久久久久久久蜜臀| 久久久久在线| 香蕉精品999视频一区二区| 亚洲区国产区| 欧美成人综合一区| 久久精品久久99精品久久| 一区二区日韩| 香蕉成人久久| 亚洲精品一区二区三区樱花| 欧美bbbxxxxx| 久久久成人网| 欧美在线视频导航| 亚洲一区亚洲| 在线亚洲伦理| 日韩午夜三级在线| 亚洲国产高清aⅴ视频| 国产一区二区三区在线观看免费| 欧美视频一区在线观看| 欧美日本亚洲| 欧美高清不卡| 欧美国产日韩在线| 美女诱惑一区| 麻豆九一精品爱看视频在线观看免费| 新67194成人永久网站| 亚洲一区二区在线免费观看视频 | 欧美一区二区三区在线| 亚洲视频在线观看免费| 久久青草久久| 亚洲国产欧美另类丝袜| 精品成人一区二区| 美女视频黄a大片欧美| 亚洲欧美日韩国产一区| 99re热这里只有精品免费视频| 欧美成人在线免费观看| 欧美va亚洲va香蕉在线| 蜜桃av一区二区| 久久亚洲综合网| 快射av在线播放一区| 老妇喷水一区二区三区| 久久国内精品视频| 久久久青草婷婷精品综合日韩| 欧美伊人久久| 久久综合色播五月| 欧美好吊妞视频| 亚洲国产精品久久人人爱蜜臀| 免费久久99精品国产自| 久久看片网站| 美日韩精品免费| 亚洲人在线视频| 一区二区三区www| 亚洲综合第一页| 亚洲美女啪啪| 亚洲天堂成人在线视频| 小处雏高清一区二区三区| 久久久久国产精品一区二区| 你懂的一区二区| 亚洲卡通欧美制服中文| 亚洲一区二区视频在线| 欧美在线观看你懂的| 久久久之久亚州精品露出| 欧美极品一区二区三区| 国产精品稀缺呦系列在线| 尤物在线观看一区| 99在线热播精品免费99热| 午夜精品一区二区三区电影天堂 | 国产日韩欧美黄色| 国外精品视频| 亚洲最新视频在线| 欧美中文字幕不卡| 亚洲国产导航| 亚洲欧美中文字幕| 欧美激情视频免费观看| 国产情侣一区| 日韩网站在线| 久久久亚洲精品一区二区三区| 亚洲精品美女在线观看| 欧美专区日韩专区| 欧美日本不卡视频| 韩国一区二区在线观看| 一区二区三区**美女毛片| 久久一区免费| 亚洲色图制服丝袜| 久热re这里精品视频在线6| 国产精品欧美风情| 亚洲免费播放| 麻豆精品国产91久久久久久| 一区二区三区免费在线观看| 免费观看国产成人| 国产亚洲精品自拍| 亚洲一区日本| 亚洲精品日韩综合观看成人91 | 亚洲一区在线免费| 欧美精品久久天天躁| 黄色影院成人| 欧美中文字幕久久| 亚洲国产欧美一区二区三区同亚洲 | 99精品久久久| 免费看的黄色欧美网站| 午夜精品免费| 欧美系列电影免费观看| 亚洲精品激情| 亚洲大胆在线| 久久一二三国产| 今天的高清视频免费播放成人 | 亚洲欧美www| 一区二区三区毛片| 欧美日韩亚洲三区| 一本色道久久综合亚洲精品婷婷 | 欧美激情欧美激情在线五月| 在线日韩av永久免费观看| 久久精品最新地址| 亚洲一区二区三区中文字幕在线| 欧美日韩在线观看一区二区| 99在线热播精品免费99热| 亚洲国内高清视频| 欧美凹凸一区二区三区视频| 亚洲国产精品成人一区二区| 欧美xx视频| 欧美岛国在线观看| 日韩一区二区免费看| 亚洲狼人精品一区二区三区| 欧美日韩国语| 亚洲欧美综合一区| 亚洲综合欧美日韩| 国产亚洲精品7777| 欧美xx视频| 欧美日韩高清一区| 亚洲欧美日韩精品一区二区 | 欧美激情按摩在线|