Как увеличить или уменьшить громкость аудиосигнала, который выражается числом с плавающей запятой (float).
Это просто умножение?
float volume_control(float signal, float gain) {
return signal*gain;
}
Как вы можете управлять этой функцией, скажем, в децибелах, как в:
volume_control (x, 28) // должен увеличиться на 28 дБ.
Да, просто умножьте. Если вы выводите его, не забудьте зафиксировать выход в [0, 1] или [-1, 1] в зависимости от ваших соглашений.
В децибелах используйте:
return signal * pow( 10.0f, db * 0.05f );
Увидеть вики на децибелах.
Да, выигрыш просто умножается на коэффициент. Коэффициент усиления 1,0 не изменяет громкость (0 дБ), 0,5 уменьшает его в 2 раза (-6 дБ), 2,0 увеличивает его в 2 раза (+6 дБ).
Чтобы преобразовать усиление в дБ в подходящий коэффициент, который можно применить к значениям выборки:
double gain_factor = pow(10.0, gain_dB / 20.0);
громкость аудиосигнала, выраженная числом с плавающей запятой (float)
Первое, что вам нужно сделать, это выяснить, что на самом деле означает этот поплавок. Это может быть регулятор громкости, измеряемый в дБ, это может быть выборка, представляющая собой количество электричества, которое посылается на динамик в определенное время, это может быть выборка, которая представляет собой положение динамика в конкретный момент времени.
Если это «амплитуда» звуковой волны в определенный момент времени, то приведенные выше расчеты являются точными. Но тот факт, что звук был выражен как поплавок, ничего не говорит вам о том, что означает поплавок.