我的C++应用程序中有几段PCM音频(G.711)。我想要可视化这些块中不同的音量。
我的第一个尝试是计算每个块的样本值的平均值,并将其用作音量指标,但这种方法效果不佳。对于静音的块,我得到的值是0,对于有音频的块,我得到的值是不同的,但这些值只是稍微有些不同,看起来并不像实际的音量。
计算体积的更好的算法是什么?
我听说G.711音频是对数PCM。我该如何考虑这一点呢?
发布于 2010-03-27 06:59:53
请注意,我自己没有使用过G.711 PCM音频,但我假设您在处理这些值之前,正在执行从编码振幅到实际振幅的正确转换。
你会期望大多数样本的平均值大约为零,因为声音波形在零的两边振荡。
粗略的体积计算将是rms (均方根),即取样本的平方的滚动平均值,并取该平均值的平方根。当有一些声音时,这将给出一个正量;这个量与波形中表示的功率有关。
为了更好地了解人类对体积的感知,您可能需要研究一下Replay Gain中使用的技术。
发布于 2010-03-27 07:01:43
如果你觉得有雄心壮志,你可以从国际电信联盟网站download G.711,并在接下来的几周(或更长时间)实施它。
如果你比这更懒惰(或者更明智),你可以使用download G.191 --它包含了压缩和解压G.711编码数据的源代码。
一旦你解码了它,可视化音量应该会容易得多。
https://stackoverflow.com/questions/2527290
复制相似问题