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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Speex manul中文版

轉載自:http://www.cnblogs.com/rosesmall/archive/2012/04/18/2455395.html

在VOIP的音頻算法中,回音處理已經成為一個關系通話質量的主要問題。

回聲的產生在IP網絡主要有兩種:
1.聲學回聲
2.電路回聲

聲學回聲主要又分成以下幾種:
a ) 直接回聲:由揚聲器產生的聲音未經任何反射直接進入麥克風
b ) 間接回聲: 由揚聲器發出的聲音經過多次反射后,再進入Mic
對于第二種回聲,擁有多路徑,時變性的特點.是比較難處理的.

由于IP網絡下的傳輸的延遲較大,而一般情況下,對于人耳,如果聲音延遲達到了10ms以上的話,那么回聲就會越來越明顯.
一般來講,VOIP中的聲音延遲主要來自于幾個方面:
1. 編碼延遲: 一般情況下編碼算法在聲音壓縮時都會產生延遲,就我們采用的Speex來講,延遲大概在20ms左右
2. 處理延遲, 封裝時延, 緩沖時延等
3. 在IP網絡中數據的傳輸過程也會照成延時.這由當前的網絡狀況決定.

回聲消除的模型:
a) 建立遠端聲音模型,進行回聲估計, 從采集的值中減去估計值
b) 聲學模型

Speex manul(手冊)中文版

Speex是一套專門用于壓縮聲音的庫,由于其專門針對聲音,所以壓縮聲音的性能非常高.Speex由于其壓縮性能,0.80版后的跨平臺的性能,所以在網絡聲音的傳輸中有很大的價值.但是需要注意的是speex只能對聲音進行壓縮,不支持音樂的壓縮,如果你需要音樂的壓縮你或許需要用vorbis.

       但是的speex資料像其它大都數專用庫一樣,并沒有大多的中文資料.所以在這里我決定將里面最核心的編程技術翻譯出來.一來是練習練習自己翻譯資料的能力,二來是方便一些英語水平較差的朋友.由于本人能力有限,有些感覺有出入或難理解的地方可以去speex的官方網站www.speex.org找到英文原版的說明.

翻譯的一些說明:

1,對于一些專有名詞如speex,api不過行翻譯

2,對于一些新概念翻譯,以及其它的翻譯過來也許會產生歧義的文字,用中/英兩種方式標出:

       :對話(speech),位采集(bit_packing)

3,基本做到和英文原行對譯.及英文原文一行,中文翻譯過來也是一行,使翻譯后的文章和原文基本行行對照.

4,源代碼不翻譯,SpeexBits bits;

5,語言中的關健字不譯,float

6,一此不是關健字但英文通常出現的詞第一次以中/英文格式給出,之后按具體情況給出英文或中文,:frame(),

7,對一些有自己翻譯起來感覺有歧義的地方,加斜線作標記 

1,speex的介紹(略)

2特征描述

這個章節展示了speex的主要特征,以衣一些關于對話(speech)編碼的一個概念,以便

幫助我們更好的了解下一章節.

取樣率(Sampling rate)

Speex主要是設計了三種不同的取樣率:8kHz,16kHz,32kHz.這些分別代表了窄寬(narrowband),

多頻率,超聲.

質量

Speex編碼大都數時間是被一個范圍為010的質量參數來控制  .在一個比特率為常量(CBR)的操作中,質量參數是一個整數,而對于變動的比特率(VBR)參數是一個float;

復雜性(變量)

speex,你可以將編碼設置成允許的復雜度.這由一個范圍為110的整數來控制完成,就像你用選項-1-9來控制gzipbzip2的壓縮質量.在通常的運用中,噪聲級別的復雜度1是在12dB之間,比復雜度10要高,但是CPU需要復雜度10大概5倍高行復雜度1.在實踐中,最好的是設置在24之間,盡管更高的設定通常有用,當編碼一個非對話聲音(non-speech sounds)DTMF語調(tones).

變波特率(VBR

Variable bit-rate (VBR) allows a codec to change its bit-rate dynamically to adapt to

變波特率(VBR)允許編碼動態地改變它的波特率以適應聲音編碼的難度”.speex舉例來說,

像元音(vowel)和瞬間高音(high-enenrg transients)需要個高的比特率來

取得一個不錯的質量,

而摩擦音(fricative)可以被充分地用相對較少的字節來進行編碼.

由于上面這個原因,VBR可以調節到一個低的比特率卻達到一個同樣的質量,或者用

某個比特率達到更好的質量.盡管有上面這些優點,但是VBR也有兩個主要的缺點.

首先,僅僅靠指定質量值,這里沒有一個關于最后平均比特率的保證.(譯者注:作者大概是想說沒有什么明確的方法知道質量值)此外,對一些即時

通信,IP電話(VoIP)這種包含著最大的比特率的,必須把比特率設為足夠低以適應

傳輸通道.

r

平均比特率(ABR)

平均比特率通過動態地調節VBR質量去得到一個確定的目標的比特率,從而解決了VBR中的一個問題..因為質量/比特率被即時的調整了,整體質量將會稍稍低于由VBR對一個

設置得和目標平均比特率非常接近的質量數編碼得到的結果.

 

聲音生動性檢測(VAD)

聲音生動性檢測將會發覺音頻正在被編碼成對話,靜音,或背景噪音.VAD總在用VBR進行編碼時暗中起作用,因此選項僅僅對一個不是VBR的操作起作用.對于不是VBR的操作來說,speex察覺出一個不屬于對話的周期,然后對它用足夠的字節重新生成為背景噪音.不這叫做舒適的噪音生成(CNG).

不連續傳輸(DTX)

不連續傳輸是VAD/VBR操作的一個額外選項,當背景噪音一定時,它可以完整地傳輸.因為在基于文件的操作中,我們不能停止對文件進行寫入,所以只有5字節被這種幀所運用.(250bps通信)

Perceptual enhancement

知覺增強

知覺增加是解碼的一部分,它在打開的時候用來減少由編碼解碼所產生的噪音.在大都數

情況下,知覺增強在客觀上使聲音離原始值更遠(如果用SNR),但是在最后它仍然聽起來更好(主觀上的改進)

Algorithmic delay

遲時算法

每一個聲音編碼導致了在傳輸上的延時.對于speex,這種延時等于frame的大小加上一些

數量的需要對每一幀進行的前瞻(”look-adhead”).

在窄寬操作中(8kHz),遲時是30ms,而對于多頻率(2-44Hz),遲時是34ms.這些值

不包括CPU編碼,解碼幀的時間. 

speex編程(the libspeex api)

這個章節出要講述了如何用speex api進行編程.例子的源代友你也可以在附錄B中找到

4.1 Encoding

4.1壓縮

為了用Speex壓縮對話,你首先需要引用頭文件:

#include <speex.h>

然后你需要定義一個Speex的位采集(bit-packing)結構

SpeexBits bits;

and a Speex encoder state

以及定義一個speex編碼器狀態量

void *enc_state;

上面定義的這樣被初始化:

The two are initialized by:

speex_bits_init(&bits);

enc_state = speex_encoder_init(&speex_nb_mode);

為了支持多頻率的壓縮,speex_nb_mode將被sppex_wb_mode取代.在大都數

情況下,你需要知道你用的模式(mode)的幀(frame)的大小,你可以得到在frame_size變量里得到這值:

speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);

一但初始化完畢,對于每一個輸入幀:

speex_bits_reset(&bits);

speex_encode(enc_state, input_frame, &bits);

nbBytes = speex_bits_write(&bits, byte_ptr, MAX_NB_BYTES);

上面input_frame是一個指向對話(speech)(frame)float指針(pointing);byte_ptr

是指向編碼幀開始寫的地方的char指針,MAX_NB_BYTES是能

寫進byte_ptr而不會造成溢出的最大數.nbBytes是一個實際寫入btye_ptr的數,即編碼的實際大小

在調用speex_bits_write,可能你需要調用speex_bits_nbytes(&bits)得到需要寫入(write)的字節大小.

在你已經編碼后,釋放所有的資源.

speex_bits_destroy(&bits);

speex_encoder_destroy(enc_state);

That’s about it for the encoder.

 

這就是關于編碼的方面.

 

Speex manul中文版三

附源代碼的翻譯:

B Sample code

例程源代碼

這個章節演示了一段用speex編碼,解碼對話(speech)的源代碼.

可以如下用api命令來編碼并解碼一個文件:

譯者注:這里說的api命令是指unix的用”|”進行管道寫入讀出.windows下這樣并不能實現.

% sampleenc in_file.sw | sampledec out_file.sw

這里這兩段代碼都沒有引用其它的頭文件,并以16 比特率(bits)進行編碼

natural endianness).

B.1 sampleenc.c

Sameleenc 用一個未加工的16比特率(bits)文章,給它編碼并產生一個speex (steam)給標準輸出.注意已壓縮的和speexenc/speexdec不和諧!

#include <speex.h>

#include <stdio.h>

/*幀的大小在這個例程中是一個固定的值,但它并不是必須這樣*/

 

#define FRAME_SIZE 160

int main(int argc, char **argv)

{

char *inFile;

FILE *fin;

short in[FRAME_SIZE];

float input[FRAME_SIZE];

char cbits[200];

int nbBytes;

/*保存編碼的狀態*/

void *state;

/*保存字節因此他們可以被speex常規讀寫*/

 

SpeexBits bits;

int i, tmp;

//新建一個新的編碼狀態在窄寬(narrowband)模式下

state = speex_encoder_init(&speex_nb_mode);

//設置質量為8(15kbps)

tmp=8;

speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp);

inFile = argv[1];

fin = fopen(inFile, "r");

//初始化結構使他們保存數據

speex_bits_init(&bits);

while (1)

{

//讀入一幀16bits的聲音

fread(in, sizeof(short), FRAME_SIZE, fin);

if (feof(fin))

break;

//16bits的值轉化為float,以便speex庫可以在上面工作

for (i=0;i<FRAME_SIZE;i++)

input[i]=in[i];

//清空這個結構體里所有的字節,以便我們可以編碼一個新的幀

speex_bits_reset(&bits);

//對幀進行編碼

speex_encode(state, input, &bits);

//bits拷貝到一個利用寫出的char型數組

nbBytes = speex_bits_write(&bits, cbits, 200);

//首先寫出幀的大小,這是sampledec文件需要的一個值,但是你的應用程序中可能不一樣

fwrite(&nbBytes, sizeof(int), 1, stdout);

//寫出壓縮后的數組

fwrite(cbits, 1, nbBytes, stdout);

}

//釋放編碼器狀態量

speex_encoder_destroy(state);

//釋放bit_packing結構

speex_bits_destroy(&bits);

fclose(fin);

return 0;

}

 

 

在Speex(www.speex.org)的最新版本中,開始集成了回音消除的模塊,而回音消除一直是Voip之中亟待解決的主要問題。
很多朋友和我說speex的aec模塊的效能并不好,我們先來看一下speex的aec的api調用方式。

/*
*創建AEC對象
*/
SpeexEchoState *echo_state = speex_echo_state_init(frame_size, filter_length);

frame_size 的取值最好是一個編碼的frame大小, 在低帶寬條件下,一般延遲20ms,而大小為160
filter_length,最好是房間內反射時間的1/3
如: 一個房間的反射時延為300ms
    那么這個filter_length就最好是100ms(這個長度又被稱為tail length).

而其中filter_length的設定是一個關鍵。

/*
*執行AEC
*/
speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue);

其中:
input_frame: 就是被聲卡捕捉到的聲音
echo_frame: 是由揚聲器播放出的聲音,這個聲音是需要從 input_frame中抵消的聲音.

output_frame 是處理完以后輸出的聲音

residue是一個可選參數,如果不使用可以將之設置為NULL, 也可以通過preprocessor 來控制

問題的關鍵是 處理input和echo 之間的關系,
也就是說在捕捉到的信號和播放的信號之間的延遲必須足夠的小,才可以提高效率.

writetosndcard(echo_frame, frame_size)
readfromsndcard(input_frame, frame_size)
speex_echo_cancel(echo_state, input_frame, echo_frame, output_frame, residue)
如果你想要盡可能的減小信號中的回音,那么可以將residue這個參數設置為噪音參數.

我相信在大多數情況下,都是因為聲音捕捉和聲音播放之間的同步問題沒有處理好,導致的音頻質量下降。

/*
*銷毀和復位
*/
speex_echo_state_destroy(echo_state);

speex_echo_state_reset(echo_state);
不再復述了!

說明:
據說在Speex的最新的1.2beta版本上,Speex提供了可選擇的,簡化的API,來提高echo執行過程中的同步問題。

posted on 2012-11-21 23:56 楊粼波 閱讀(3941) 評論(1)  編輯 收藏 引用 所屬分類: 文章收藏C++ 、Windows

評論

# re: Speex manul中文版 2015-05-15 19:12 王小亮

恩。學習了。謝謝;。  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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国产精品日本| 久久亚洲国产精品一区二区 | 亚洲欧美中文日韩v在线观看| 午夜精品福利一区二区蜜股av| 久久国产视频网站| 欧美国产精品人人做人人爱| 日韩亚洲欧美中文三级| 亚洲欧美电影院| 欧美3dxxxxhd| 国产欧美三级| av成人免费在线观看| 久久精品国产精品亚洲| 亚洲国产老妈| 亚洲一区成人| 免费久久精品视频| 国产精品日韩在线播放| 亚洲黄一区二区| 午夜性色一区二区三区免费视频| 免费在线观看精品| 亚洲一区二区日本| 美女网站久久| 国产欧美日韩另类视频免费观看| 亚洲精品在线二区| 久久尤物视频| 亚洲女人av| 欧美日本不卡高清| 在线观看欧美日本| 久久成人18免费观看| 亚洲精品少妇30p| 另类综合日韩欧美亚洲| 国产欧美日韩三区| 亚洲视频自拍偷拍| 最新精品在线| 你懂的一区二区| 国内精品久久久久影院色| 亚洲男人的天堂在线观看| 亚洲毛片av| 欧美激情按摩在线| 亚洲精品欧洲精品| 亚洲成色777777女色窝| 欧美视频在线一区| 亚洲国产综合在线| 久久全球大尺度高清视频| 午夜精品av| 一本色道久久| 欧美日在线观看| 99精品黄色片免费大全| 欧美电影在线播放| 另类酷文…触手系列精品集v1小说| 国模大胆一区二区三区| 久久精品中文字幕一区| 欧美日韩综合一区| 国产尤物精品| 久久久久久久精| 欧美一区在线看| 国产一区二区丝袜高跟鞋图片| 亚洲欧美福利一区二区| 亚洲一区黄色| 国产亚洲欧美激情| 久久视频这里只有精品| 久久久午夜精品| 亚洲激情影视| 日韩一级网站| 国产欧美日韩精品一区| 久久综合国产精品| 欧美激情a∨在线视频播放| 亚洲深夜福利网站| 午夜视频在线观看一区二区| 国内久久婷婷综合| 亚洲高清av在线| 欧美日韩国产精品成人| 篠田优中文在线播放第一区| 久久黄色影院| 一本久久青青| 香蕉成人伊视频在线观看| 狠狠久久亚洲欧美专区| 亚洲国产经典视频| 国产精品久久久久毛片大屁完整版 | 亚洲小说欧美另类社区| 国产乱码精品| 久久人人97超碰人人澡爱香蕉| 久久综合狠狠综合久久综合88| 亚洲最新合集| 久久国产一区二区| 夜夜精品视频一区二区| 欧美一级一区| 9久草视频在线视频精品| 午夜精品在线| 亚洲日本电影在线| 欧美一区2区三区4区公司二百| 亚洲激情六月丁香| 亚洲欧美日韩一区二区三区在线观看| 久久久噜噜噜| 在线亚洲国产精品网站| 久久久久国产精品一区三寸| 中文一区字幕| 久久婷婷蜜乳一本欲蜜臀| 亚洲网站啪啪| 美玉足脚交一区二区三区图片| 亚洲欧美一区二区三区极速播放 | 亚洲精品一区二区三区四区高清| 亚洲在线观看视频网站| 蜜臀av国产精品久久久久| 亚洲一级二级| 欧美成人免费一级人片100| 欧美一区二区性| 欧美日韩免费网站| 亚洲国产精品久久精品怡红院| 国产视频丨精品|在线观看| 亚洲精品乱码久久久久久日本蜜臀| 国产一区二区三区久久| 亚洲性感美女99在线| 99在线精品观看| 欧美sm重口味系列视频在线观看| 久久精品国产99国产精品澳门| 国产精品成人一区二区三区夜夜夜| 亚洲高清二区| 91久久久在线| 欧美成人午夜激情视频| 亚洲成色www8888| 亚洲福利在线视频| 久久久亚洲国产美女国产盗摄| 欧美一区国产二区| 国产精品视频久久一区| 妖精视频成人观看www| 日韩一级二级三级| 欧美精品一级| 日韩一级大片| 亚洲男人的天堂在线| 国产精品入口夜色视频大尺度| 一本一本久久a久久精品牛牛影视| 亚洲视频免费看| 欧美午夜一区二区福利视频| 一区二区三区黄色| 亚洲欧美日韩国产中文| 国产精品午夜春色av| 亚洲欧美日韩精品久久亚洲区| 午夜精品亚洲一区二区三区嫩草| 欧美色欧美亚洲另类七区| 一区二区三区不卡视频在线观看| 亚洲一区制服诱惑| 国产精品久线观看视频| 午夜亚洲福利在线老司机| 久久蜜桃香蕉精品一区二区三区| 很黄很黄激情成人| 欧美不卡一卡二卡免费版| 亚洲精品视频啊美女在线直播| 这里只有精品视频| 国产日韩精品视频一区| 卡通动漫国产精品| 日韩网站在线看片你懂的| 欧美在线网址| 亚洲狠狠婷婷| 国产精品久久久久久av下载红粉 | 亚洲精品国产精品国产自| 亚洲在线播放电影| 好看的av在线不卡观看| 欧美福利视频网站| 亚洲综合色噜噜狠狠| 奶水喷射视频一区| 中文一区在线| 精品成人一区| 欧美视频久久| 久久午夜国产精品| 亚洲午夜国产成人av电影男同| 久热成人在线视频| 在线综合+亚洲+欧美中文字幕| 国产一区二区三区精品久久久| 欧美大片91| 久久国产色av| 一本色道久久88亚洲综合88| 亚洲国内高清视频| 国产精品视频一| 欧美激情亚洲自拍| 久久精品亚洲乱码伦伦中文| 一区二区三区精品视频| 欧美v国产在线一区二区三区| 亚洲天堂久久| 亚洲人成啪啪网站| 黑人中文字幕一区二区三区| 欧美小视频在线观看| 免费亚洲网站| 欧美一区二区在线免费播放| 99视频一区二区三区| 欧美国产一区视频在线观看| 久久国产福利国产秒拍| 亚洲无亚洲人成网站77777| 亚洲激情综合| 亚洲国产精品va在线看黑人动漫| 国产精品一二三视频| 欧美日韩精品一区二区| 欧美国产先锋| 欧美大成色www永久网站婷|