use*_*837 38 android soundpool
我正在为Android 2.2编程,我正在尝试使用 SoundPool类同时播放几个声音,但是在随机时间感觉声音将不再从扬声器中传出.
对于本来会播放的每个声音,这将打印在logcat中:
AudioFlinger could not create track. status: -12
Error creating AudioTrack
Audio track delete
Run Code Online (Sandbox Code Playgroud)
抛出没有异常,程序继续执行,除了缺少卷之外没有任何更改.我很难跟踪导致错误的条件或在错误发生后重新创建错误.我无法在任何地方找到文档中的错误,而且几乎不知所措.
任何帮助将不胜感激!
编辑:我忘了提到我正在加载mp3文件,而不是ogg.
joh*_*doe 22
我几乎有同样的问题,我最近试图加载和播放一些声音.
我甚至将其分解为加载导致此错误的单个mp3.
有一件事我注意到:当我加载一个-1的循环时,它会因"状态12"错误而失败,但是当我加载它循环0次时,它会成功.甚至试图加载1次失败.
最后的解决方案是在音频编辑器中打开mp3并以稍微低一点的质量重新编辑它,这样文件现在变小了,并且似乎不占用系统中相当多的资源.
最后,有一个讨论鼓励对您正在使用的对象执行发布,因为确实存在可以使用的资源的硬限制,并且它是系统范围的,因此如果您使用多个资源,其他应用将无法使用它们.
https://groups.google.com/forum/#!topic/android-platform/tyITQ09vV3s/discussion%5B1-25%5D
对于音频,每个设备有32个活动AudioTrack对象的硬限制 (不是每个应用程序:你需要与系统的其余部分共享32个),AudioTrack在SoundPool,ToneGenerator,MediaPlayer下面内部使用,基于OpenSL ES的原生音频等等,但实际的AudioTrack限制是<32; 它更多地取决于内存,CPU负载等软因素.另请注意,Android音频混音器中的限制器目前没有动态范围压缩,因此如果您有大量活动声音,则可以剪辑它们一切都很响亮.
对于视频播放器,由于视频对设备的负载过大,因此限制要低得多.
我将此作为一个提醒媒体开发人员的机会:请记住在应用暂停时调用媒体对象的release().这释放了其他应用程序所需的底层资源.不要依赖垃圾收集器最终清理的媒体对象,因为它具有不可预测的时间.
| 归档时间: |
|
| 查看次数: |
17603 次 |
| 最近记录: |