我正在使用的应用程序,将设备Mic的声音输出实时播放到设备耳机。应用程序需要在声音太大时自动降低声级,并在声音太低时放大声级。
AudioTrack track = null;
track.setStereoVolume(2.0f, 2.0f);
setStereoVolume()
可以更改音量级别。我可以在不动态使用FFT的情况下检查原始PCM值和增/减音频音量的最大幅度。这是正确的方法吗?为了避免使用setStreoVolume()
的滞后,我不能将缓冲区值除以一半当声音过于安静时,声音太大并将它们乘以2?
答案 0 :(得分:2)
在某些点将样本减半/加倍可能会导致输出信号中出现非常明显的下降/尖峰。
你想要的是Dynamic Range Compressor。手机很可能已经有一个在平台上运行的手机。但如果您对其性能不满意,可以添加自己的软件DRC。基本思想是在信号达到某个阈值时逐渐衰减信号。由于这会降低最大信号电平(衰减大声部分),因此可以添加所谓的补偿增益,从而增加整体信号电平(从而使安静部分更响亮)。