我的C ++应用程序中有几个PCM音频块(G.711)。我想在每个块中可视化不同的音量。
我的第一次尝试是计算每个块的样本值的平均值,并将其用作卷指示器,但这不能很好地工作。对于具有静音的块和具有音频的块的不同值,我得到0,但是这些值只是略微不同而且看起来与实际音量不相似。
什么是更好的算法计算音量?
我听说G.711音频是对数PCM。我该如何考虑这一点?
答案 0 :(得分:3)
注意,我自己没有使用G.711 PCM音频,但我认为在处理数值之前,您正在执行从编码幅度到实际幅度的正确转换。
您可能希望大多数样本的平均值近似为零,因为声音波形在零的任一侧振荡。
原油体积计算将是均方根(均方根),即取样品平方的滚动平均值并取该平均值的平方根。当有声音时,这会给你一个积极的数量;数量与波形中表示的功率有关。
对于与人类对音量感知有关的更好的内容,您可能需要调查Replay Gain中使用的那种技术。
答案 1 :(得分:2)
如果您有野心,可以从国际电联网站download G.711获取,并在接下来的几周(或更长时间)内实施。
如果你比那更懒(或更敏感),你可以改为download G.191 - 它包括压缩和解压缩G.711编码数据的源代码。
解码后,可视化音量应该更容易整个。