首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用audioSessionId值实例化AudioFx类?

使用audioSessionId值实例化AudioFx类?
EN

Stack Overflow用户
提问于 2012-06-25 16:24:34
回答 4查看 4.3K关注 0票数 17

我阅读了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

代码语言:javascript
复制
 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(),它会崩溃。

代码语言:javascript
复制
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是不同的。

代码语言:javascript
复制
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吗?

EN

回答 4

Stack Overflow用户

发布于 2012-08-18 13:08:05

你应该看看:

显然,这是一个尚未解决的问题出现在ICS中,而且可能也没有在JB中解决。

票数 5
EN

Stack Overflow用户

发布于 2013-01-21 18:07:46

我应该使用带有音频会话id 0的AudioFx吗?

在某些情况下,它可能会起作用,但不要指望它在未来的Android版本上继续这样做。在Jellybean上,应用程序和其他应用程序之间的互操作性已经受到影响。看一看当启用效果时,AudioFlinger会这样做。

代码语言:javascript
复制
// 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);
}
票数 3
EN

Stack Overflow用户

发布于 2013-01-26 10:13:40

如果有人想尝试的话,我知道这个问题

执行此操作

代码语言:javascript
复制
 Equalizer eq=null;
 .
 .
 .
 .
 .
 //in any function before initialization do this
 if(eq!=null)
      eq.release();
 eq=new Equalizer(0, audiosessionid);

试一次

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11193239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档