我正在使用 OpenSL ES,我的 Android 应用程序需要多个 channel ,因此我创建了多个播放器对象(加上我需要播放的每个 mp3 文件的一个播放器对象)。这对于一个应用程序来说效果很好,但是当我运行我创建的另一个应用程序时,它将无法播放任何声音和日志文件,如
E/AudioFlinger( 119): no more track names available
E/AudioTrack( 6884): AudioFlinger could not create track, status: -12
E/libOpenSLES( 6884): AudioTrack::initCheck status 4294967284
W/libOpenSLES( 6884): Leaving Object::Realize (SL_RESULT_CONTENT_UNSUPPORTED)
好吧,我已经了解到这意味着我没有可用对象,我应该释放一些对象。
但是,根据http://mobilepearls.com/labs/native-android-api/opensles/
OpenSL ES for Android supports a single engine per application, and up to 32 objects
那么是每个应用程序 32 个对象,还是全局 32 个对象?如果是这样,每次我的应用程序变得不活动(onPause/onStop)时,我都被迫 Destroy() (并重新创建)Player-objects?
最佳答案
每个设备似乎有 32 个对象。因此,最好在不需要时销毁
它们(onStop
、onDestroy
)
关于android - 使用 OpenSL ES 时为 "No more track names available",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9720516/