我正在尝试构建一个应用程序,该应用程序使用数字滤波器来处理从其他应用程序(库存音乐播放器和 Spotify 等)播放的音频。
到目前为止,我已经能够在 OpenSL ES 中为来自麦克风的音频输入创建过滤器。然后将过滤后的音频发送到硬件输出。该应用程序基于此教程 http://audioprograming.wordpress.com/2012/03/03/android-audio-streaming-with-opensl-es-and-the-ndk/
如何从其他应用程序获取类似的输入缓冲区,以便在将其发送到硬件输出之前对其进行处理?
不需要使用 OpenSL ES 或其他 native 代码。澄清;该应用程序应以与 android.media.audiofx.AudioEffect 类似的方式应用自定义滤镜效果在它被弃用之前可以附加到全局音频输出混合( Audio Session 0)。
最佳答案
应用无法修改(甚至读取,如果您不考虑 Visualizer API)其他应用的音频输出。
关于 Audio Session 0 的注意事项:仍然可以使用它(从 JB/JB MR1 开始),但这种可能性可能会在未来的 Android 版本中消失。不过,有一个重要的细节需要牢记,即如果应用在 0 以外的 session 中添加效果,则在 session 0 中添加的效果将被暂停。
音频 HAL 会跟踪所有已启用音频效果的(估计)CPU 使用率,如果这样做会导致超出 CPU 周期预算,则会拒绝启用新效果。这意味着如果应用程序被允许在 session 0 上自由叠加效果而不被暂停,它们可能会因为 CPU 周期预算已超出而无法选择在自己的 Audio Session 上启用哪些效果,从而使 Spotify 等应用程序变得困惑.
关于android - 将简单的音频过滤器挂接到android下播放的音乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15385797/