如果我想将 WAV 文件的幅度降低 25%,我会这样写:
for (int i = 0; i < data.Length; i++)
{
data[i] *= 0.75;
}
然而,我阅读的很多关于音频技术的文章都以分贝为单位讨论幅度。我原则上理解分贝单位的对数性质,但在实际代码方面并不了解。
我的问题是:如果我想将 WAV 文件的音量衰减 20 分贝,我将如何在上面示例的代码中执行此操作?
更新:公式(基于 Nils Pipenbrinck 的回答)用于衰减给定数量的分贝(输入为正数,例如 10、20 等):
public void AttenuateAudio(float[] data, int decibels)
{
float gain = (float)Math.Pow(10, (double)-decibels / 20.0);
for (int i = 0; i < data.Length; i++)
{
data[i] *= gain;
}
}
所以,如果我想衰减20分贝,增益因子是.1。