所需器材:PC,音频输出设备(耳机或者音响),含有 C 计权的分贝计
例如,需要产生 30dB ~ 80dB SPL 的 1kHz 正弦波
一、生成测试文件
先产生一个频率为 1kHz、最大幅值为 1 的正弦波 .wav 文件;
二、音量校准
播放该文件,然后增大或者减小系统音量,期间使用分贝计 C 计权不断测试,使当前音频输出设备实际产生的分贝值稳定在 80dB(所需最大音量);
三、标定验证
再产生幅值为频率为 1kHz、最大幅值为 0.1 的正弦波,实际分贝值为 60 dB,则验证通过;
四、生成任意分贝音频
此时产生的实际分贝数 n 和 .wav 文件中的最大幅值 a 的转换公式为:
a = 1 0 − ( 80 − n ) 20 a=10^{-\frac{(80 - n)}{20}} a=10−20(80−n)
福利:送上自己制作的正弦音测试音频,正弦频率为 1kHz,采样率为 44.1 kHz,时长为 1 分钟,带有不同程度衰减;其中 test_1kHz_0dB.wav 最大幅值为 1,用于音量校准,test_1kHz_-20dB.wav 最大幅值为 0.1,用于标定验证。
链接:https://pan.baidu.com/s/1I66rQWj_bm9AdcyFTKViJQ
提取码:2333
Q & A
(1)为什么要先产生幅值为 1 的正弦波进行标定?
数字幅值为 1 时为音频文件允许的最大电平,更大则 .wav 文件不予记录,因此这时应该让系统达到所需的最大音量。
(2)为什么幅值为 0.1 时实际音量恰好减小 20 dB?
想要输出音量降低 20 分贝,则输出能量需要降低 100 倍,对应 .wav 文件中的数字幅值就要降低 10 倍。
(3)为何使用分贝计 C 计权?
分贝计的 A 计权参考了人耳频响曲线进行不同频段声音加权,并不利于系统标定,C 计权则更加平滑。
https://www.quora.com/Why-is-the-summing-op-amp-called-a-weighted-summing-amplifier
(4)理论上存不存在直接推导 .wav 数字幅值到 dB 的转换公式?
没有,因为从 .wav 文件出发,声音经过了系统音量控制、数模转换、放大电路、换能器的一系列处理,之后还会在空气中传播衰减,这个过程无法通过经验公式计算实现。
(5)一个频率标定好后,能不能直接用于其他频率的声音?
只有监听耳机或者监听音响可以,因为无论是娱乐用的耳机或者音响,还是价格昂贵的HIFI耳机,都会考虑人的喜好进行调音,从而使其对不同频率的响应衰减程度变得不均一,也就是所谓的频率响应曲线并不平整,而监听耳机或监听音响则为了方便统一标定,尽可能做到了一定频率范围内的平直响应,譬如 YAMAHA 的 MSP 系列(下图左为 MSP7),或者 GENELIC 的 80 系列(下图右为 8050B),如果要求精度较高则仍需要再次标定。
(6)复杂的声音如何标定?
如果声音有多个频率成分,那么只需要在第一步产生文件时,让数字幅值的最大值和最小值分别对应 1 和 -1 即可,随后的校验和生成步骤都同样适配,这是因为 C 计权时所有频率成分等权重,所有频率成分单独衰减 a 则等效于时域信号衰减 a ,因此转换公式仍然成立。