Speexmanul手册中文版Word下载.docx
- 文档编号:16058905
- 上传时间:2022-11-18
- 格式:DOCX
- 页数:10
- 大小:22.43KB
Speexmanul手册中文版Word下载.docx
《Speexmanul手册中文版Word下载.docx》由会员分享,可在线阅读,更多相关《Speexmanul手册中文版Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
2.处理延迟,封装时延,缓冲时延等
3.在IP网络中数据的传输过程也会照成延时.这由当前的网络状况决定.
回声消除的模型:
a)建立远端声音模型,进行回声估计,从采集的值中减去估计值
b)声学模型
Speex是一套专门用于压缩声音的库,由于其专门针对声音,所以压缩声音的性能非常高.Speex由于其压缩性能,及0.80版后的跨平台的性能,所以在网络声音的传输中有很大的价值.但是需要注意的是speex只能对声音进行压缩,不支持音乐的压缩,如果你需要音乐的压缩你或许需要用vorbis库.
但是的speex资料像其它大都数专用库一样,并没有大多的中文资料.所以在这里我决定将里面最核心的编程技术翻译出来.一来是练习练习自己翻译资料的能力,二来是方便一些英语水平较差的朋友.由于本人能力有限,有些感觉有出入或难理解的地方可以去speex的官方.speex.org找到英文原版的说明.
1,speex的介绍(略)
2特征描述
这个章节展示了speex的主要特征,以衣一些关于对话(speech)编码的一个概念,以便帮助我们更好的了解下一章节.
取样率(Samplingrate)
Speex主要是设计了三种不同的取样率:
8kHz,16kHz,32kHz.这些分别代表了窄宽(narrowband),多频率,超声.
质量
Speex编码大都数时间是被一个围为0到10的质量参数来控制
的.在一个比特率为常量(CBR)的操作中,质量参数是一个整数,而对于变动的比特率(VBR)参数是一个float;
复杂性(变量)
用speex,你可以将编码设置成允许的复杂度.这由一个围为1到10的整数来控制完成,就像你用选项-1到-9来控制gzip和bzip2的压缩质量.在通常的运用中,噪声级别的复杂度1是在1到2dB之间,比复杂度10要高,但是CPU需要复杂度10大概5倍高行复杂度1.在实践中,最好的是设置在2到4之间,尽管更高的设定通常有用,当编码一个非对话声音(non-speechsounds)像DTMF语调(tones).
变波特率(VBR
Variablebit-rate(VBR)allowsacodectochangeitsbit-ratedynamicallytoadaptto
变波特率(VBR)允许编码动态地改变它的波特率以适应声音编码的”难度”.在speex举例来说,
像元音(vowel)和瞬间高音(high-enenrgtransients)需要个高的比特率来取得一个不错的质量,而摩擦音(fricative)可以被充分地用相对较少的字节来进行编码.由于上面这个原因,VBR可以调节到一个低的比特率却达到一个同样的质量,或者用某个比特率达到更好的质量.尽管有上面这些优点,但是VBR也有两个主要的缺点.首先,仅仅靠指定质量值,这里没有一个关于最后平均比特率的保证.(译者注:
作者大概是想说没有什么明确的方法知道质量值)此外,对一些即时通信,像IP(VoIP)这种包含着最大的比特率的,必须把比特率设为足够低以适应传输通道.
平均比特率(ABR)
平均比特率通过动态地调节VBR质量去得到一个确定的目标的比特率,从而解决了VBR中的一个问题..因为质量/比特率被即时的调整了,整体质量将会稍稍低于由VBR对一个
设置得和目标平均比特率非常接近的质量数编码得到的结果.
声音生动性检测(VAD)
声音生动性检测将会发觉音频正在被编码成对话,静音,或背景噪音.VAD总在用VBR进行编码时暗中起作用,因此选项仅仅对一个不是VBR的操作起作用.对于不是VBR的操作来说,speex察觉出一个不属于对话的周期,然后对它用足够的字节重新生成为背景噪音.不这叫做舒适的噪音生成(CNG).
不连续传输(DTX)
不连续传输是VAD/VBR操作的一个额外选项,当背景噪音一定时,它可以完整地传输.因为在基于文件的操作中,我们不能停止对文件进行写入,所以只有5字节被这种帧所运用.(给250bps通信)
Algorithmicdelay
迟时算法
每一个声音编码导致了在传输上的延时.对于speex,这种延时等于frame的大小加上一些数量的需要对每一帧进行的前瞻(”look-adhead”).在窄宽操作中(8kHz),迟时是30ms,而对于多频率(2-44Hz),迟时是34ms.这些值不包括CPU编码,解码帧的时间.
4.1Encoding
4.1压缩
为了用Speex压缩对话,你首先需要引用头文件:
#include<
speex.h>
然后你需要定义一个Speex的位采集(bit-packing)结构
SpeexBitsbits;
andaSpeexencoderstate
以及定义一个speex编码器状态量
void*enc_state;
上面定义的这样被初始化:
Thetwoareinitializedby:
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(&
speex_encode(enc_state,input_frame,&
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(&
speex_encoder_destroy(enc_state);
That’saboutitfortheencoder.
这就是关于编码的方面.
Speexmanul中文版三
附源代码的翻译:
BSamplecode
B
例程源代码
这个章节演示了一段用speex编码,解码对话(speech)的源代码.
可以如下用api命令来编码并解码一个文件:
译者注:
这里说的api命令是指unix的用”|”进行管道写入读出.在windows下这样并不能实现.
%sampleencin_file.sw|sampledecout_file.sw
这里这两段代码都没有引用其它的头文件,并以16
比特率(bits)进行编码
naturalendianness).
B.1sampleenc.c
Sameleenc
用一个未加工的16比特率(bits)文章,给它编码并产生一个speex
流(steam)给标准输出.注意已压缩的和speexenc/speexdec不和谐!
stdio.h>
#defineFRAME_SIZE160
intmain(intargc,char**argv)
{
char*inFile;
FILE*fin;
shortin[FRAME_SIZE];
floatinput[FRAME_SIZE];
charcbits[200];
intnbBytes;
void*state;
inti,tmp;
//新建一个新的编码状态在窄宽(narrowband)模式下
state=speex_encoder_init(&
//设置质量为8(15kbps)
tmp=8;
speex_encoder_ctl(state,SPEEX_SET_QUALITY,&
tmp);
inFile=argv[1];
fin=fopen(inFile,"
r"
);
//初始化结构使他们保存数据
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_encode(state,input,&
//把bits拷贝到一个利用写出的char型数组
bits,cbits,200);
//首先写出帧的大小,这是sampledec文件需要的一个值,但是你的应用程序中可能不一样
fwrite(&
nbBytes,sizeof(int),1,stdout);
//写出压缩后的数组
fwrite(cbits,1,nbBytes,stdout);
}
//释放编码器状态量
speex_encoder_destroy(state);
//释放bit_packing结构
fclose(fin);
return0;
如何使用Speex中的AEC模块,提高声音质量?
在Speex(.speex.org)的最新版本中,开始集成了回音消除的模块,而回音消除一直是Voip之中亟待解决的主要问题。
很多朋友和我说speex的aec模块的效能并不好,我们先来看一下speex的aec的api调用方式。
SpeexEchoState*echo_state=speex_echo_stat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Speexmanul 手册 中文版