我的 C++ 应用程序中有几块 PCM 音频 (G.711)。我想可视化每个块中的不同音量。
我的第一次尝试是计算每个块的样本值的平均值并将其用作音量指标,但这并不适用。对于具有静音的块,我确实得到 0,而对于具有音频的块,我得到了不同的值,但这些值只是略有不同,而且似乎与实际音量不一样。
计算体积的更好算法是什么?
我听说 G.711 音频是对数 PCM。我应该如何考虑到这一点?
请注意,我自己没有使用 G.711 PCM 音频,但我假设您在处理值之前执行了从编码幅度到实际幅度的正确转换。
您会期望大多数样本的平均值大约为零,因为声音波形在零的任一侧振荡。
粗略的体积计算将是 rms(均方根),即取样本平方的滚动平均值并取该平均值的平方根。当有声音时,这会给你一个正数;该量与波形中表示的功率有关。
为了更好地与人类对音量的感知相关,您可能需要研究Replay Gain中使用的那种技术。