WAVファイルの振幅を25%減らしたい場合は、次のように記述します。
for (int i = 0; i < data.Length; i++)
{
data[i] *= 0.75;
}
ただし、オーディオテクニックについて読んだ記事の多くは、振幅をデシベルで説明しています。私は原則としてデシベル単位の対数的性質を理解していますが、実際のコードに関してはそれほど理解していません。
私の質問は、WAVファイルのボリュームをたとえば20デシベルだけ減衰させたい場合、上記の例のようなコードでこれをどのように行うのでしょうか。
更新:指定されたデシベル数(10、20などの正の数として入力)で減衰するための式(Nils Pipenbrinckの回答に基づく):
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です。