gpt4 book ai didi

iphone - Audio Toolbox 播放仅播放部分输出缓冲区

转载 作者:行者123 更新时间:2023-12-03 20:17:04 26 4
gpt4 key购买 nike

我正在开发一个使用 Audio Toolbox 来录制和播放 PCM 数据的项目,但在播放时遇到问题。在模拟器中,我可以很好地录制和播放音频,根据需要使用自定义类来处理录制和播放缓冲区的存储和来源 PCM 字节。在设备(iPhone (3.0.1) 和 iPod 2G (3.1.2))上,录音工作正常,生成的音频文件正确,但应用程序内播放时断时续,就像只播放每个播放缓冲区的一部分一样。我的缓冲区长一秒,有 3 个缓冲区,在播放开始之前预加载;前 3 秒也会出现卡顿现象,我认为这排除了延迟问题。

在此之前我已经编写了 Audio Toolbox 代码,除了我使用自己的类而不是 AudioFileReadBytes() 来获取 PCM 数据之外,我在这里并没有做任何奇怪的事情

我知道来 self 的源的数据很好,因为它可以在 sim 中正确播放,并且作为正确的音频文件写入磁盘

我对采样率进行了一些尝试;我通常使用 11025Hz 采样来减少文件大小(都是语音,所以听起来不错)。在 44100Hz 下,但在缓冲区大小相同的情况下,我遇到了相同的卡顿问题,但音频片段的速度要快得多,大约快 4 倍。这就是为什么我认为它只播放每个缓冲区的一部分。

我能想到它只会播放每个缓冲区的一部分的唯一原因是延迟问题......就像音频工具箱代码用完了完整的缓冲区,而我仍在填充一个空缓冲区。但这会导致它正确播放预加载的缓冲区,然后然后开始卡顿,但这种情况并没有发生,它全程卡顿

我尝试过巨大的缓冲区,例如 10MB 缓冲区,但在播放结束时我只是听到静音和一声断断续续的音频。我还尝试过预加载比正常情况更多的缓冲区,例如 10 秒的音频,其行为是相同的。 Audio Session 是使用 AVAudioSession 设置的,而不是音频工具箱调用,并且它被设置为播放类别以进行播放

我不知道如何尝试解决这个问题,它在模拟器上运行良好但在设备上运行不佳对我来说毫无意义。

播放回调和音频队列服务设置的代码:http://pastebin.com/mfaa546c

最佳答案

事实证明,使用 NSData 的 GetBytes:length: 导致了问题。用该方法填充的缓冲区播放不正确。但是,从该缓冲区执行 memcpy 到另一个缓冲区可以防止该问题。

关于iphone - Audio Toolbox 播放仅播放部分输出缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2202165/

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