当前位置: 代码迷 >> 多媒体/流媒体开发 >> 怎么通过波形计算音量
  详细解决方案

怎么通过波形计算音量

热度:2818   发布时间:2013-02-26 00:00:00.0
如何通过波形计算音量?
将媒体中的声音部分可解码为PCM格式,对于一帧音频数据有多个采样点,每个采样点的值不同,如果是16位,可能还有正负区别,请问正负数代表什么?如何获得该帧的平均音量值?

------解决方案--------------------------------------------------------
音量值计算:db=20*lg(x/2^15),其中x表示样点幅度值,db表示分贝值。
对于16位,波形纵轴表示幅值,正负好像代表电压,表征音量大小。0表示无声。
求平均音量就应该计算所有采样点的平均值吧。
------解决方案--------------------------------------------------------
楼主可以先查一下PCM的采样原理。声音是一种波,PCM数据是波形的描述,音量值表示波的能量,和波的振幅相关,和各点的相对差值有关。16bits的采样值表示范围是-32768~32767。把每个点依次连接起来就是声音的波形了。求音量先将数据转换成-1~1之间(因为位率是是精度表示,要转换成相对最大值的比例),进行傅立叶变换,提高速度使用快速傅立叶变换(FFT),求出当时的频谱图,就是各个频率的音量大小。求平均就是总音量了。
------解决方案--------------------------------------------------------
FFT变换有实部数据和虚部数据,其能量值是(实部*实部+虚部*虚部)的开方,而声音的大小是分贝,20*lg(能量值),所以频谱图各音量是10*lg(实部*实部+虚部*虚部)
  相关解决方案