audio - 什么是正确的音量 slider 公式?

标签 audio

我正在构建一个 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/

相关文章:

c++ - 如何在简单的录音机程序中使用audioDeviceIOCallback,audioDeviceAboutToStart和audioDeviceStopped

Android禁用菜单点击声音

c++ - 如何在 Linux 上使用 C++ 和 ffmpeg 从 USB 音频设备录制音频?

java - 播放 jar 文件中的音频

c# - Naudio - 将 32 位 wav 转换为 16 位 wav

ios - Aframe 视频仅在 ios 上静音播放

c# - 我可以使用哪种格式通过C#将声音存储在数据库中

c# - CoreAudio OnVolumeNotification 事件订阅导致 explorer.exe 中 CPU 使用率高

actionscript-3 - AS3 Air — 检查 Zip 以获取音频文件

c++ - 实时从数据创建 WAV 文件 - 需要帮助