android - 使用 OpenSL ES 时为 "No more track names available"

标签 android audio opensl

我正在使用 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 个对象。因此,最好在不需要时销毁它们(onStoponDestroy)

关于android - 使用 OpenSL ES 时为 "No more track names available",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9720516/

相关文章:

html - 移动浏览器无法为 <audio> 标签加载 base64 数据 uri

android - 使用 Superpowered 在 Android 中进行音高转换/时间拉伸(stretch)

Android 谷歌地图 v2 标记 z 顺序/z 索引

java - Error :(124, 62)错误:不兼容的类型:无法将类转换为上下文

android - DialogFragment 方向更改与 getActivity() 崩溃

java - BufferedInputStream.read(byte[]) 导致问题。以前有人遇到过这个问题吗?

android - PlayMarket 和 App Store 会记住应用程序购买吗?

android - 使用 NDK 精确的 POSIX 线程计时

android - OpenSL 多轨

android - 控制强制扬声器音频的音量