使用audioSessionId值来实例化AudioFx类?

Jon*_*ona 17 audio android

我已经阅读了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
Run Code Online (Sandbox Code Playgroud)

摩托罗拉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)
Run Code Online (Sandbox Code Playgroud)

Nexus 4 [Android 4.2.1]
使用audioSessionId = 0一切正常但是使用任何其他数字时,每当我尝试将预设,波段电平,低音增强设置为ON或Virtualizer更改为ON时,设备将报告以下静音错误.报告的效果ID因我尝试修改的FX而异.

W/AudioPolicyManagerBase(165): unregisterEffect() unknown effect ID 1381
Run Code Online (Sandbox Code Playgroud)

更新08/11/12:
我可以使用audioSessionId0.我知道它已被弃用但它使用权限工作.<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />我应该使用音频会话ID为0的AudioFx吗?

And*_*ker 5

你应该看看:这个

显然,它是ICS中出现的一个未解决的问题,可能在JB中也没有解决.