我正在构建一个 VoIP 应用程序。如果我采用 slider 值并将音频样本乘以它,我会得到不正确的非线性声音结果。获得平滑结果的正确公式是什么?
最佳答案
正确的公式是the decibel formula解决了 Prms。这是 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 或其他值。选择正确的静音值将最大化音量 slider 的有用表面积,或最小化音量没有明显变化的 slider 区域。
关于audio - 什么是正确的音量 slider 公式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49014440/