- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
音频编解码
HYPERLINK /myitm/archive/2011/07/21/2112468.html 音频编解码-speex库的使用方法
Speex是近年来开发出的一套功能强大的语音引擎,能够实现高质量和低比特率的编码。它不仅提供了基于码激励线性预测(CELP)算法的编/解码模块,而且在其必威体育精装版发布的版本中还提供了声音预处理和声学回声消除模块,为保障IP网络中的语音通信质量提供了技术手段。此外,Speex还具有压缩后的比特率低(2~44 kbps)的特点,并支持多种比特率。这些特点使得Speex特别适合VoIP的系统。
虽然是开源的,但是使用的人还不是很多,网上的资料也很少,下面简单给大家介绍一下如何使用speex的API。
一:编码流程
???使用Speex的API函数对音频数据进行压缩编码要经过如下步骤:
1、??????定义一个SpeexBits类型变量bits和一个Speex编码器状态变量enc_state。
2、?????调用speex_bits_init(bits)初始化bits。
3、????调用speex_encoder_init(speex_nb_mode)来初始化enc_state。其中speex_nb_mode是SpeexMode类型的变量,表示的是窄带模式。还有speex_wb_mode表示宽带模式、speex_uwb_mode表示超宽带模式。
4、????调用函数int speex_encoder_ ctl(void *state, int request, void *ptr)来设定编码器的参数,其中参数state表示编码器的状态;参数request表示要定义的参数类型,如SPEEX_ GET_ FRAME_SIZE表示设置帧大小,SPEEX_ SET_QUALITY表示量化大小,这决定了编码的质量;参数ptr表示要设定的值。
?? 可通过speex_encoder_ctl(enc_state, SPEEX_GET_FRAME_SIZE, frame_size)?和speex_encoder_ctl(enc_state, SPEEX_SET_QUALITY, quality)来设定编码器的参数。
5、???初始化完毕后,对每一帧声音作如下处理:调用函数speex_bits_reset(bits)再次设定SpeexBits,然后调用函数speex_encode(enc_state, input_frame, bits),参数bits中保存编码后的数据流。
6、??????编码结束后,调用函数speex_bits_destroy (bits),????speex_encoder_destroy (enc_state)来
二:解码流程
同样,对已经编码过的音频数据进行解码要经过以下步骤:
1、??????定义一个SpeexBits类型变量bits和一个Speex编码状态变量enc_state。
2、????调用speex_bits_init(bits)初始化bits。
3、????调用speex_decoder_init (speex_nb_mode)来初始化enc_state。
4、??????调用函数speex_decoder_ctl (void *state, int request, void *ptr)来设定编码器的参数。
5、????调用函数?speex_decode(void *state, SpeexBits *bits, float *out)对参数bits中的音频数据进行解编码,参数out中保存解码后的数据流。
6、????调用函数speex_bits_destroy(bits), speex_ decoder_ destroy (void *state)来关闭和销毁SpeexBits和解码器。
下面是一段实例代码:
转载请注明: HYPERLINK /a%CC%C7%B3%B4%C0%F5%D7%D3a/ /a%CC%C7%B3%B4%C0%F5%D7%D3a/
#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;
//新建一个新的
文档评论(0)