尝试使用OpenSL ES录制音频时出错

时间:2011-05-23 14:48:40

标签: android android-ndk

运行使用OpenSL ES API for Android的应用程序时出错。当我运行该应用程序时,我收到以下错误:

05-23 16:18:19.355: ERROR/AudioHardwareALSA(84): ALSALib device/samsung/GT-I9000/alsa-lib/src/pcm/pcm.c:7244:(snd_pcm_recover) overrun occured.

但是,我找不到原因。也许这个调试消息与它有关?

05-23 16:18:19.339: DEBUG/dalvikvm(1409): JIT unchain all for threadid=11

我怀疑第一个是由第二个引起的。但是我怎么能阻止这个呢?我还在日志中看到了几条GC_EXPLICIT和GC_CONCURRENT调试消息。

无论如何,我使用OpenSL ES来录制和播放音频数据。通过Java层通过WiFi发送和/或接收数据。但为了顺利进行,我不希望GC干扰......是否有办法阻止VM限制GC的使用?


修改

我发现JIT unchain all for threadid=11不是问题所在。我已经在一个新的,干净的手机上运行该应用程序,并且该错误最初没有显示,但DEBUG消息仍然显示。它对性能没有影响。但是,几天之后,错误开始显现,我的音频数据收到了很少的声音。

我已经尝试增加分配给我的录音机的缓冲区数量,现在是4,但这也无济于事。我查看了pcm.c的源代码,但这对我的问题没有任何帮助。有人对这个问题有所了解吗?

1 个答案:

答案 0 :(得分:1)

似乎我有另一个问题正在运行导致了这个问题。由于错误的代码子句,我似乎有另一个Thread消耗了很多周期。这导致Thread跳过大部分代码并且实际上什么都不做。当线程忙于等待时,音频被抑制,我得到了上面提到的错误。