我已经阅读了 Android API 并尝试在互联网上搜索有关声明自定义的信息audioSessionId
,然后使用它audioSessionId
来初始化 AudioFx 类并为我的 MediaPlayer 或 AudioTrack 分配硬编码的audioSessionId
.
这种方法将允许我先创建一个 AudioFx,然后将一个新的 MediaPlayer 或 AudioTrack 附加到这个audioSessionId
.
我目前能够在 Android 2.3.6 上使用此方法,但在 Android 4.x 上,我遇到了初始化失败的错误问题,或者在其他 ICS/JellyBean 设备上,此错误是无声的,但调用函数会导致异常。
三星 Galaxy S II [Android 4.0.3]: [Android 4.0.4 不再出现问题]
E/AudioEffect(13250): set(): AudioFlinger could not create effect, status: -38
E/AudioEffects-JNI(13250): AudioEffect initCheck failed -5
E/AudioEffect-JAVA(13250): Error code -5 when initializing AudioEffect.
W/WrapEqualizer(13250): createEqualizer() -> Effect library not loaded
摩托罗拉 Xoom [Android 4.1.2]
在构造函数之后似乎无声无息地失败了。然后调用 getProperties() 它崩溃。
java.lang.RuntimeException: AudioEffect: set/get parameter error
at android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1247)
at android.media.audiofx.Equalizer.getProperties(Equalizer.java:532)
Nexus 4 [Android 4.2.1]
使用 audioSessionId=0 一切正常,但使用任何其他数字时,每次我尝试将预设、频段级别、低音增强更改为 ON 或 Virtualizer 更改为 ON 时,设备都会报告以下静音错误。报告的效果 ID 因我尝试修改的 FX 而异。
W/AudioPolicyManagerBase(165): unregisterEffect() unknown effect ID 1381
2012 年8 月 11 日更新:
我可以audioSessionId
用作 0。我知道它已被弃用,但它可以使用权限。<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
我应该使用音频会话 id 为 0 的 AudioFx 吗?