自动音量控制播放响亮的声音



正在处理的应用程序,将设备麦克风的声音输出实时播放到设备耳机。应用程序需要在声音太大时自动降低声级,并在声音过低时放大声级。

    AudioTrack track = null;
    track.setStereoVolume(2.0f, 2.0f);

setStereoVolume()可以更改音量级别。我可以从原始 PCM 值和 inc/dec 音频音量检查最大振幅,而无需动态使用 FFT。这是正确的方法吗?为了避免使用setStreoVolume()的滞后,我是否可以在声音太大时将缓冲区值分成两半,在声音太安静时将它们乘以 2?

在某些点将样本减半/加倍可能会导致输出信号出现非常明显的下降/尖峰。

你想要的是一个动态范围压缩器。这款手机很可能已经有一个在平台上运行的手机。但是,如果您对它的性能不满意,可以添加自己的软件DRC。基本思想是,当信号达到某个阈值时,您会逐渐衰减信号。由于这会降低最大信号电平(衰减响亮的部分),因此您可以添加所谓的补偿增益,这将增加整体信号电平(从而使安静的部分更响亮)。

最新更新