【问题标题】:automatic volume control for loud sounds played自动音量控制播放响亮的声音
【发布时间】:2012-12-01 17:03:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: java android audio javasound


    【解决方案1】:

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

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

    【讨论】:

    • 哇,感谢您向我展示了正确的路径。您知道任何可以执行 DRC 的 java/android DSP 库吗?我找不到任何。
    • 我从未使用过任何免费的实现,即使是我们从平台供应商那里获得的实现,我也没有真正参与实际调整它们。谷歌搜索dynamic range compression java 在第一个搜索结果中给出了一些 java 代码 - 我不知道该代码是否有用并且是否具有许可许可证。
    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多