10

我遇到了与此处描述的几乎相同的问题,这篇文章中的回答对我没有帮助,我在设置频段级别后立即释放均衡器。它在我的 4.0.4 设备上完美运行,在朋友的 2.3.5 设备上运行良好,它在一小部分设备上崩溃,并且在这些设备上运行的 android 版本无关紧要。

所以有错误

Equalizer mEqualizer = new Equalizer(0, mediaPlayer.getAudioSessionId());

java.lang.UnsupportedOperationException: Effect library not loaded
        at android.media.audiofx.AudioEffect.<init>(AudioEffect.java:355)
        at android.media.audiofx.Equalizer.<init>(Equalizer.java:149)

我不知道如何解决这个问题,有什么建议吗?

4

3 回答 3

4

确保在使用均衡器后重新启动设备并使用 release() 再次对其进行测试,在寻找线索 2 天后它对我有用。

于 2013-11-14T12:02:37.167 回答
1

从文档中,您必须在 Equalizer、MediaPlayer、Visualizer 等上调用 release() 才能正常退出,否则在重新启动应用程序时会看到此错误。唯一的补救措施是重新启动,如本线程前面所述。

这是 Android 应用程序生命周期使事情变得有点困难的地方,因为应用程序永远不应该退出(只是暂停和恢复),除非操作系统出于内存原因绝对需要,或者发生重新启动。在这两种情况下都会调用您的应用程序 onDestroy() 方法。

您可以将 release() 放在 onDestroy() 中,这将满足已部署应用程序的 Android 生命周期。您的用户不会看到此错误。

然而,在开发中存在一个问题:像 Eclipse 之类的 IDE(它实际上是一个用于构建 IDE 的框架,并不意味着它本身就是一个 IDE……)将终止应用程序进程,而不是向其发送销毁消息。这违反了生命周期并且 release() 没有被调用。

这也是你永远不应该调用 System.exit() 的原因。它违反了生命周期,冒着不正常退出的风险,就像这样。

所以你的进程不正常地退出了。只发生在开发中,而不是部署中。一种补救措施是不使用 eclipse 中的设备窗口来停止进程。这不是停止,而是杀戮。

当您在已经有一个实例运行的情况下运行应用程序项目时,Eclipse 也会不优雅地终止(违反生命周期)该进程。

正如医生所说,如果很疼,请不要这样做:而是使用将实际生命周期消息发送到应用程序的调试器。

于 2015-01-22T06:54:28.450 回答
0

这取决于设备上加载的 Android 版本。

此日志意味着没有库来实现 AudioEffect 功能。

恐怕没有解决方案,而是将一些第三方音频效果库导入您的项目

于 2013-07-11T12:45:31.060 回答