我想为 Android 开发一个应用程序,允许您在播放流媒体音乐时应用 3D 音效。
我想要达到的效果是当用户用耳机听音乐时,可以改变扬声器在 3D 空间中的虚拟位置,即能够在三个维度上定位声音:在范围内(距离),在上下方向(仰角)、前后方向以及两侧(方位角)。
我正在使用MediaPlayer
和AudioFx
用于基本的音频效果,例如:Equalizer
、PresetReverb
、BassBoost
、Virtualizer
。AudioFx 提供的任何效果都不允许您应用 3D 效果。
简而言之,我希望 Andorid 具有与AVAudioEnvironmentNode
IOS 可用的功能等效的功能。
官方文档说Virtualizer
:
Virtualizer 实现公开的方法、参数类型和单元直接映射 OpenSL ES 1.0.1 规范 ( http://www.khronos.org/opensles/ ) 为
SLVirtualizerItf
接口定义的那些。有关详细信息,请参阅本规范。
因此,AudioFx 效果使用在OpenSL
. OpenSL ES 规范 1.1通过界面演示了 3D 音频的实现,SL3DLocationItf
看起来正是我正在寻找的。
如果没有允许应用 3D 音频效果的函数/库,那么SL3DLocationItf
结合我当前的 MediaPlayer 和 Audiofx 实现使用 OpenSL 接口最不痛苦的方法是什么?
扩展 AudioFx 库以仅添加 3D 效果将是完美的,从而避免在实践中必须使用NDK
和JNI
重新实现新的媒体播放器来添加音频效果(过多的开销)。
任何帮助和建议将不胜感激。