如果我想将WAV文件的幅度降低25%,我会写这样的东西:
for (int i = 0; i < data.Length; i++)
{
data[i] *= 0.75;
}
Run Code Online (Sandbox Code Playgroud)
然而,我读到的很多关于音频技术的文章都以分贝的形式讨论了振幅.我原则上理解分贝单元的对数性质,但在实际代码方面却没有那么多.
我的问题是:如果我想减少一个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;
}
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我想衰减20分贝,增益因子是.1.
Nil*_*nck 12
我想你想从分贝转换为增益.
音频方程是:
分贝获得:
gain = 10 ^ (attenuation in db / 20)
Run Code Online (Sandbox Code Playgroud)
或在C:
gain = powf(10, attenuation / 20.0f);
Run Code Online (Sandbox Code Playgroud)
从增益转换为db的公式为:
attenuation_in_db = 20 * log10 (gain)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6245 次 |
| 最近记录: |