检测原始pcm数据中的声级

时间:2013-02-21 12:50:01

标签: c++ audio pcm audio-processing

我正在编写需要检测声级的小程序,如果级别高于设置中的设置则写入它,我通过portaudio进行声音捕获,通过libvorbis进行压缩,但程序的一部分未完成,我坚持使用它,我需要为了检测原始pcm数据的声级,我对什么是pcm数据有什么不了解,不知道任何音频分析/处理算法,我们现有的c / c ++库可以做到吗?或者是一些简单的算法可以用c / c ++实现吗?

2 个答案:

答案 0 :(得分:3)

这取决于您如何定义“声级”,这可以像检测峰值一样简单,并且根据行业标准/建议获得响度级别更复杂。

PCM数据通常是有符号值的流:在8位PCM的情况下为0x00..0xFF,对于16位PCM为-0x8000 .. + 0x7FFF,在浮点值的情况下为-1.0 .. + 1.0。

最简单的方法是通过查找给定时间范围的最大绝对值来检测简单峰值。您可以在之后应用log10转换为分贝。

答案 1 :(得分:1)

查看Speex和WebRTC库......他们都有语音活动检测器。如果您正在寻找声级的测量,您需要决定线性或对数水平指示器。 PCM的常见格式是-32768到32767范围(16位短)...你可以做的一件简单的事情就是简单地总结一段时间内样本的绝对值并除以样本数来得到平均值期间的水平。