工作中需要使用到OPUS压缩音频,OPUS是一个开源音频编码方案,多种芯片支持OPUS编码,WINDOWS10上也自动支持,这是他的一些特性

比特率从 6 kb/s 到 510 kb/s‎
‎采样率从 8 kHz(窄带)到 48 kHz(全频)‎
‎音频每帧时长从 2.5 ms 到 60 ms‎
‎同时支持恒定比特率 (CBR) 和可变比特率 (VBR)‎
‎从窄带到全频段的音频带宽‎
‎支持语音和音乐‎
‎支持单声道和立体声‎
‎支持多达 255 个通道(多流帧)‎
‎动态可调比特率、音频带宽和帧大小‎
‎良好的损耗鲁棒性和丢包隐藏性 (PLC)‎
‎浮点和定点实现‎

测试时要将其运行到STM32平台上,先在官网(点击我)下载下来源代码包,导入到自己的工程中,源码适配于不同的平台,所以需要将不需要的文件删除掉,具体可以查看我的工程,头文件引用如下:

1.png

最简单的使用只用4个API,即,创建编码器、编码声音、创建解码器、解码声音。

我们在实际使用式,需要根据自己的需求设定编码器参数,我总结了每个参数的作用:

新建编码器:
音频采样率:原始样本的采样率
通道数:原始样本的音频通道数,通常为1,谁会用单片机做双声道呢?
应用场景:应用场景可以选择高质量、正常、或者是低延时

其他配置:
比特率:设定音频最大的比特率,影响音质的重要参数
带宽:需要的音频主要位于哪个频率带宽
可变比特率:OPUS可以根据实际音频复杂度输出,每个包的大小不同,编码时间也比较短,默认设置
不可变比特率:OPUS根据比特率输出音频,每个输出包的大小相同,编码时间会延长,不推荐设置
设定信号类型:声音类型是音乐还是人声
复杂度:更高的复杂度拥有更好的音频质量,同时耗时会更长,实际上在PC上测试,输出音频并没有什么不同
前向纠错:用于增强数据可靠性的数字信号处理技术,默认打开
强制通道:强制将输出转换为单通道还是双通道,推荐单通道
不连续传输:仅应用于LPC层,默认关闭
预期丢包百分比:配置编码器的预期丢包百分比。 在没有数据包丢失的情况下,较高的值会逐渐触发编码器中更抗丢失的行为,但以牺牲给定比特率的质量为代价,但在丢失时会触发更高的质量。
设定每包周期:设定每个数据包的实际时间长度,推荐使用20ms
设置音频深度:设定传入的音频数据深度,通常为8、16、24,通常PCM数据长度为16

当然,OPUS也提供了可以在WINDOWS上运行的exe文件,官网可以下载,可以自己尝试设定不同的参数来听一听不同的参数对最终声音结果的影响,也可以在官网下载

实际上在STM32平台测试时,我的参数为采样率8K,比特率6K,采样时长20MS,复杂度0,压缩时长消耗14ms左右(开启优化-Of,不开优化相当慢),大概可以将160个数据压缩到15个数据,另外创建编码器解码器都会申请动态内存,总共大概55K,FLASH占用也不少,小容量单片机肯定无法使用。我的测试结果在这里。

我移植完成的工程文件点击这里跳转