什么是正确的音量滑块公式?

时间:2018-02-27 17:19:15

标签: audio

我正在构建一个VoIP应用程序。如果我取滑块值并将音频样本乘以它,我会得到不正确的非线性声音结果。获得平稳结果的正确公式是什么?

1 个答案:

答案 0 :(得分:0)

Prms 解决了正确的公式the decibel formula。这是C中的示例代码:

// level is 0 to 1, silence is dBFS at level 0
void AdjustVolume(int16_t* buffer, size_t length, float level, float silence = -96)
{
    float factor = pow(10.0f, (1 - level) * silence / 20.0f);
    for (size_t i = 0; i < length; i++)
        buffer[i] = static_cast<int16_t>(buffer[i] * factor);
}

有一个可调整的:沉默。这是没有声音时的噪音量。或者:由于背景噪音,您无法听到声音的响度级别。 16位音频样本的理论最大静音为-96 dB(32767中整数值为1的样本)。然而,在现实世界中,音频设备和聆听者的周围环境会产生背景噪音,因此您可能需要选择更嘈杂的静音级别,如-30 dB或其他。选择正确的静音值将最大化音量滑块的有用表面积,或最小化滑块区域的数量,此时音量不会发生明显变化。