可视化PCM样本的体积

时间:2010-03-26 22:52:08

标签: c++ algorithm audio volume pcm

我的C ++应用程序中有几个PCM音频块(G.711)。我想在每个块中可视化不同的音量。

我的第一次尝试是计算每个块的样本值的平均值,并将其用作卷指示器,但这不能很好地工作。对于具有静音的块和具有音频的块的不同值,我得到0,但是这些值只是略微不同而且看起来与实际音量不相似。

什么是更好的算法计算音量?

我听说G.711音频是对数PCM。我该如何考虑这一点?

2 个答案:

答案 0 :(得分:3)

注意,我自己没有使用G.711 PCM音频,但我认为在处理数值之前,您正在执行从编码幅度到实际幅度的正确转换。

您可能希望大多数样本的平均值近似为零,因为声音波形在零的任一侧振荡。

原油体积计算将是均方根(均方根),即取样品平方的滚动平均值并取该平均值的平方根。当有声音时,这会给你一个积极的数量;数量与波形中表示的功率有关。

对于与人类对音量感知有关的更好的内容,您可能需要调查Replay Gain中使用的那种技术。

答案 1 :(得分:2)

如果您有野心,可以从国际电联网站download G.711获取,并在接下来的几周(或更长时间)内实施。

如果你比那更懒(或更敏感),你可以改为download G.191 - 它包括压缩和解压缩G.711编码数据的源代码。

解码后,可视化音量应该更容易整个