gpt4 book ai didi

ios - 如何在不使用 AudioUnit 回调的情况下播放音频

转载 作者:行者123 更新时间:2023-11-28 23:58:36 25 4
gpt4 key购买 nike

我使用 AudioUnit 以 8 KHz 采样率和 8 位音频样本录制和播放音频。我使用以下来源的示例:https://github.com/fuxx/MicInput

播放部分基于回调模式。使用这种方法,我无法控制何时播放音频,Core Audio 在需要播放更多音频数据时会调用回调。

问题是,我从网络获取音频数据,因此不能保证为下一次回调准备好音频数据。有时,回调会错过来自网络的音频数据,因此会出现大约 20 毫秒的间隙,听起来像是咔哒声。

是否可以立即渲染音频而无需等待回调?使用 AudioQueue 可以通过调用 AudioQueueEnqueueBuffer() 来实现,我不知道如何使用 AudioUnit 来实现。我希望你能帮助我。

最佳答案

没有办法在不等待回调(可能被 API 隐藏)的情况下“立即”播放音频,甚至忽略硬件 DMA 中断时序、数据缓冲和 DAC 延迟等问题。

DAC(数模转换器)以固定采样率输出音频样本。要么在需要通过 DAC 发送音频样本时准备好数据,要么将一些垃圾(咔嗒声、间隙等)转换为模拟音频。

音频单元基于拉模型(可能是由于底层硬件 DMA 系统和操作系统设备驱动程序的需要)。音频队列(以及其他 API,例如 AVAudioPlayer)构建在音频单元之上。因此,当您将缓冲区放入音频队列时,它并不会立即播放。相反,该队列缓冲区仍然“在幕后”等待音频单元回调。

关于ios - 如何在不使用 AudioUnit 回调的情况下播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50354285/

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