Speex手册(五)——Speex编解码器API 2 和语音处理API 1

本文介绍了Speex的模式查询、封包和带内信号处理,详细讲解了 Speex 语音处理API中的预处理器,包括预处理器的状态初始化、参数调整以及功能选项。此外,还阐述了回声消除算法的使用,包括回声消除器的创建、处理音频的方法以及回声消除可能遇到的问题和解决策略。
摘要由CSDN通过智能技术生成
               

5.4  模式查询

        Speex模式查询类似于speex_encoder_ctl和speex_decoder_ctl函数调用。因为模式是只读的,所以仅能获取一个特别模式的信息。函数调用如下:

                void speex_mode_query(Speexmode *mode, int request, void *ptr);

        其中request可允许的值有(除非特别声明,这些值通过指针ptr返回):

                SPEEX_MODE_FRAME_SIZE  获取模式的帧大小(样本数)

                SPEEX_SUBMODE_BITRATE  通过ptr获取子模式比特率(整数,单位bps)

5.5  封包和带内信号

        有时期望每个数据包(或其他基本存储单元)不止包含一帧,此时可在调用speex_bits_write写数据流之前调用speex_encode N次来实现。若每个包的帧数不是由带外机制决定,则可以包含一个终止码。终止码用5位对代码15(十进制)编码,如表9.2所示。注意对于1.0.2版本,调用speex_bits_write自动插入终止码来填充最后一字节,这样没有任何其他费用并保证包里没有更多帧时Speex能准确检测到。

        可以发送带内信息到另一端。这些信息之前加入一个包含4位信息类型代码的模式14的“伪帧”。表5.1列出了可能的代码,包含他们的意义和信息大小。大多数信息是要发送到另一端编码器或解码器的请求,可以自由接受或无视这些请求。默认的,无视所有带内信息。

                

                                                         表1   带内信号代码

        最后,应用可以用代码13定义常用带内信息,信息字节大小用5位编码,解码器若不知如何解码则可以跳过它。

6  语音处理API(libspeexdsp)

        对于1.2beta3版本,Speex中的非编解码部分单独分离成libspeexdsp库,包括预处理器,声学回声消除器,抖动缓冲器和重采样器。在UNIX环境下,可通过在编译器命令行中添加-lspeexdsp -lm链接到你的程序中。正如libspeex,libspeexdsp调用时可重入的,但不是线程安全的,这意味着可以在多线程中使用,但多线程中对同一状态的调用必须由互斥锁保护。

6.1 预处理器

        调用Speex预处理器之前,首先需要头文件

                #include <speex/speex_preprocess.h>

        然后,创建预处理器状态:

                SpeexPreprocessState *preprocess_state = spee

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值