我已阅读Android API并尝试在互联网上搜索声明自定义audioSessionId
,然后使用audioSessionId
初始化AudioFx类并为我的MediaPlayer或AudioTrack分配硬编码{{1} }。
此方法允许我先创建一个AudioFx,然后将新的MediaPlayer或AudioTrack附加到此audioSessionId
。
我目前能够在Android 2.3.6上使用此方法,但在Android 4.x上我遇到了初始化失败的错误或其他ICS / JellyBean设备的问题,这个错误是沉默的,但调用函数引导例外。
三星Galaxy S II [Android 4.0.3]: [Android 4.0.4不再发生问题]
audioSessionId
摩托罗拉Xoom [Android 4.1.2]
在构造函数之后静默似乎失败了。然后调用getProperties()它崩溃了。
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
Nexus 4 [Android 4.2.1]
使用audioSessionId = 0一切正常但是使用任何其他数字时,每当我尝试将预设,波段电平,低音增强设置为ON或Virtualizer更改为ON时,设备将报告以下静音错误。报告的效果ID因我尝试修改的FX而异。
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)
更新08/11/12:
我可以使用W/AudioPolicyManagerBase(165): unregisterEffect() unknown effect ID 1381
作为0.我知道它已被弃用,但它可以使用权限。 audioSessionId
我应该使用AudioFx和音频会话ID 0吗?
答案 0 :(得分:5)
你应该看看:this
显然,这是ICS中出现的一个未解决的问题,可能在JB中也没有解决。
答案 1 :(得分:3)
我是否应该将AudioFx与音频会话ID 0一起使用?
它可能在某些情况下有效,但不要指望它继续在未来的Android版本上这样做。您已经在利用Jellybean上的应用程序和其他应用程序之间的互操作性。只需看看AudioFlinger does when an effect is enabled:
的内容// suspend all effects in AUDIO_SESSION_OUTPUT_MIX when enabling any effect on
// another session. This gives the priority to well behaved effect control panels
// and applications not using global effects.
// Enabling post processing in AUDIO_SESSION_OUTPUT_STAGE session does not affect
// global effects
if ((sessionId != AUDIO_SESSION_OUTPUT_MIX) && (sessionId != AUDIO_SESSION_OUTPUT_STAGE)) {
setEffectSuspended_l(NULL, enabled, AUDIO_SESSION_OUTPUT_MIX);
}
答案 2 :(得分:0)
我知道这个问题 如果有人想尝试
这样做
Equalizer eq=null;
.
.
.
.
.
//in any function before initialization do this
if(eq!=null)
eq.release();
eq=new Equalizer(0, audiosessionid);
尝试一次
答案 3 :(得分:0)
除了会话0,这是"已弃用的全局会话",我对AudioFlinger代码的理解表明,会话仅为实际执行音频IO的类创建,即AudioRecord,AudioTrack,MediaPlayer等你应该创建这些类,然后获取它们的会话ID,然后附加效果。
您为会话ID提供的任何其他值都将对应于不存在的音频会话,因此将失败。