我阅读了Android,并尝试在互联网上搜索声明自定义audioSessionId,然后使用该audioSessionId初始化AudioFx类,并为audioSessionId或AudioTrack分配硬编码audioSessionId。
这个方法允许我首先创建一个AudioFx,然后将一个新的MediaPlayer或AudioTrack附加到这个audioSessionId。
目前,我可以在Android2.3.6上使用这个方法,但是在Android4.x上,我遇到了初始化失败的错误,或者在其他ICS/JellyBean设备上,这个错误是无声的,但是调用函数会导致异常。
三星Galaxy安卓4.0.3问题不再发生在Android4.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 Android4.2.1
使用audioSessionId=0,一切工作正常,但使用任何其他数字,设备将报告以下无声错误,每次我试图改变预置,乐队水平,低音升压为ON或虚拟器为ON。根据我试图修改的FX,报告的效果ID是不同的。
W/AudioPolicyManagerBase(165): unregisterEffect() unknown effect ID 1381更新08/11/12:
我可以使用audioSessionId作为0。我知道这是不可取的,但它使用的是许可。<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />我应该使用音频会话id 0的AudioFx吗?
发布于 2012-08-18 13:08:05
你应该看看:这
显然,这是一个尚未解决的问题出现在ICS中,而且可能也没有在JB中解决。
发布于 2013-01-21 18:07:46
我应该使用带有音频会话id 0的AudioFx吗?
在某些情况下,它可能会起作用,但不要指望它在未来的Android版本上继续这样做。在Jellybean上,应用程序和其他应用程序之间的互操作性已经受到影响。看一看当启用效果时,AudioFlinger会这样做。
// 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);
}发布于 2013-01-26 10:13:40
如果有人想尝试的话,我知道这个问题
执行此操作
Equalizer eq=null;
.
.
.
.
.
//in any function before initialization do this
if(eq!=null)
eq.release();
eq=new Equalizer(0, audiosessionid);试一次
https://stackoverflow.com/questions/11193239
复制相似问题