1

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

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

setStereoVolume()可以改变音量。我可以在不动态使用 FFT 的情况下从原始 PCM 值和 inc/dec 音频音量中检查最大幅度。这是正确的方法吗?为了避免使用滞后,setStreoVolume()当声音太大并且当它太安静时将它们乘以 2?

4

1 回答 1

2

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

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

于 2012-12-13T18:42:53.670 回答