Если бы я хотел уменьшить амплитуду WAV-файла на 25%, я написал бы что-то вроде этого:
for (int i = 0; i < data.Length; i++)
{
data[i] *= 0.75;
}
Однако во многих статьях, посвященных аудиотехнике, которые я читаю, обсуждается амплитуда в децибелах. Я понимаю логарифмическую природу децибел в единицах в принципе, но не столько с точки зрения реального кода.
У меня такой вопрос: если бы я хотел уменьшить громкость файла WAV, скажем, на 20 децибел, как бы я сделал это в коде, подобном приведенному выше примеру?
Обновление : формула (основанная на ответе Нильса Пипенбринка) для ослабления на указанное число децибел (введено как положительное число, например, 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 .