gpt4 book ai didi

android - openSL ES Android : Irregular audio callback(s)

转载 作者:行者123 更新时间:2023-11-30 15:41:07 24 4
gpt4 key购买 nike

我在我的一个 Android 应用 中使用 openSL ES。当应用程序位于前台时,回调非常规律。麦克风回调大约每 10 毫秒调用一次,扬声器回调也是如此。但是,如果我将应用程序放在后台并打开浏览器(或与此相关的另一个应用程序),我会看到打开浏览器(或浏览)时会触发回调的“ Storm ”。有办法解决这个问题吗?为什么会发生这种情况? openSL 是否会补偿一段时间无法执行回调的情况? (就像它试图追赶)。

我的源代码采用 C 编写,使用 Jelly Bean 4.3。

我尝试增加 AudioTrackAudioRecorder 的线程优先级,它似乎确实有帮助,但我不确定这是否是正确的方法。

其他问题

所以您是说,即使线程优先级增加,您也可能会收到大量回调,并且您应该丢弃这些回调?

这是一个好的解决方案吗?您将丢弃麦克风数据包(或耗尽扬声器数据包的源),对吧?如果不丢弃麦克风数据包,麦克风数据包的接收器会将麦克风数据包的突发解释为过度抖动,对吧?

更重要的是:我手动提高了AudioTrack和AudioRecorder的线程优先级,并将调度策略更改为循环。它需要 root 访问权限并安装 BusyBox(它附带一个用于更改线程优先级/调度策略的命令行实用程序)。这是如何从 C 中以编程方式完成的?我想确保增加的是单个线程的优先级,而不仅仅是我的应用程序(进程)的优先级。

最佳答案

是的,这是设计使然。尝试提高线程优先级是合法的解决方法。确保使用 native 缓冲区大小和采样(请参阅 Low-latency audio playback on Android )以获得最佳结果。您仍然应该准备好丢弃回调突发,因为无法保证它们永远不会发生。您还应该尝试减少应用程序在后台时的整体 CPU 消耗和 RAM 占用。

关于android - openSL ES Android : Irregular audio callback(s),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20650913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com