0

如何增加或减少以浮点数 (float) 表示的音频信号的音量。

只是乘法吗?

float volume_control(float signal, float gain) {

    return signal*gain;

}

你怎么能通过让我们说分贝来控制这个功能:

volume_control(x, 28) //应该增加 28 DB。

4

3 回答 3

3

是的,只是相乘。如果您输出它,请确保根据您的约定将输出限制在 [0, 1] 或 [-1, 1] 中。

以分贝为单位,使用:

return signal * pow( 10.0f, db * 0.05f );

请参阅有关分贝的wiki 。

于 2012-11-09T12:50:37.980 回答
2

是的,增益只是乘以一个因子。增益 1.0 不会改变音量 (0 dB),0.5 会降低 2 倍 (-6 dB),2.0 会增加 2 倍 (+6 dB)。

要将 dB 增益转换为可应用于样本值的合适因子:

double gain_factor = pow(10.0, gain_dB / 20.0);
于 2012-11-09T12:49:21.760 回答
1

以浮点数 (float) 表示的音频信号的音量

您要做的第一件事是找出浮动的实际含义。它可以是一个以 db 为单位测量的音量控制,它可以是一个样本,它是在特定时间发送到扬声器的电量,它可能是一个样本,它是扬声器在特定时间点的位置。

如果是声波在特定时间点的“幅度”,那么上面的计算是准确的。但是声音被表达为浮动的事实并不能告诉您浮动的含义。

于 2012-11-09T13:38:15.237 回答