gpt4 book ai didi

android - 如何检测 Android 音频流下溢/溢出?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:33:51 24 4
gpt4 key购买 nike

我目前正在使用 AudioRecord java 对象从麦克风接收音频。有时我拉取数据的速度不够快(例如,发生应用程序切换时)。有什么方法可以让我知道音频流被音频缓冲区下溢中断了吗?

最佳答案

您可以尝试使用 MediaRecorder类而不是 AudioRecord,它提供了一些额外的方法,包括注册错误回调方法的能力。不过,我不确定是否所有版本的 Android 都会调用它以防出现欠载。如果您在此处获得回调,那可能是“更清洁”的解决方案。

另一种解决方案是,您可以测量轮询音频所用的时间,并确定是否发生了数据不足。基本上,您会在调用 read() 之前将时间存储在局部变量中,然后再调用:

long startTime = System.nanoTime();
int bytesRead = read(...);
long elapsedTime = System.nanoTime() - startTime;

您可能希望使用 System.nanoTime() 而不是 System.currentTimeMillis(),即使以纳秒为单位的时间不是很准确,比系统的毫秒精度更准确。然后,使用采样率和缓冲区大小,您可以计算此调用应该花费的预期毫秒数:

long maxMilliseconds = (bufferSize / getSampleRate()) * 1000;

如果耗时大于此值,则可能发生音频丢失,您可以触发错误处理程序。

另请注意,AudioRecord.read() 方法返回实际从设备读取的字节数。您应该将此值与您期望读取的字节数进行比较,因为这也是检测缓冲区不足的一种非常简单的方法。

关于android - 如何检测 Android 音频流下溢/溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8711766/

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