我openSL
在其中一个Android apps
. 当应用程序在前台时,回调非常有规律。麦克风回调大约每 10 毫秒调用一次,扬声器回调也是如此。但是,如果我将我的应用程序放在后台并打开浏览器(或其他应用程序),我会看到在打开浏览器(或浏览)时触发了“风暴”的回调。有没有办法解决这个问题?为什么会这样?openSL 是否会补偿无法执行回调的一段时间?(就像它试图赶上一样)。
我的源代码在C
,我在Jelly Bean 4.3.
我试图增加AudioTrack
and的线程优先级AudioRecorder
,它似乎确实有帮助,但我不确定这是要走的路。
其他问题
所以你是说,即使增加线程优先级,你也可能会收到大量回调,你应该丢弃那些?
这是一个好的解决方案吗?您将丢弃麦克风数据包(或耗尽扬声器数据包的来源),对吗?如果你不丢弃麦克风数据包,麦克风数据包的接收者会将麦克风数据包的突发解释为过度抖动,对吗?
更重要的是:我手动增加了 AudioTrack 和 AudioRecorder 的线程优先级,并将 sched 策略更改为轮询。它需要 root 访问权限和安装 BusyBox(带有用于更改线程优先级/调度策略的命令行工具)。这是如何从 C 以编程方式完成的?我想确保增加的是单个线程优先级,而不仅仅是我的应用程序(进程)的优先级。