AudioQueue 播放时出现间隙

发布于 2024-09-13 13:36:46 字数 555 浏览 1 评论 0原文

我正在努力使用我实现的 AudioQueue 音频播放器。我最初以为它截断了播放的音频的第 1/2 个部分,但在加载较大的文件时,我注意到每隔 1/2-1 秒就会出现间隙。我已在调试中运行它,并且已确认我正在使用音频正确加载队列。 (队列中没有加载大的零区域。)它在模拟器上播放没有问题(没有间隙),但在设备上我得到间隙,就好像它丢失了所有其他音频块一样。在我的应用程序中,我解压缩然后从内存 NSMutableData 对象中提取音频。我将这些数据输入音频队列。我在播放波形音频的同一应用程序中有相应的实现,并且此示例在长音频剪辑和短音频剪辑上都没有问题。我正在将波实现与另一个进行减压的实现进行比较。两者之间的唯一区别是我如何发现音频元数据以及在哪里获取用于排队的音频样本。在波形实现中,我使用 AudioFileGetProperty 和 AudioFileReadPackets 来获取此数据。在另一种情况下,我使用在解压缩器回调期间加载的缓存 ivars 预先导出数据。元数据与压缩和波形实现相匹配。我已经在 Instruments 中运行了代码,并且在播放期间我的音频数据包传输/排队逻辑中没有看到任何花费超过 1 毫秒的内容。我完全迷路了。如果您知道如何解决这种情况,请大声说出来。

I'm struggling with an AudioQueue audio player I implemented. I initially thought it was truncating the 1st 1/2 of audio that it played but upon loading larger files I notice gaps every other 1/2-1 second. I've run it in debug and I've confirmed that I'm loading the queue correctly with audio. (There are no big zero regions loaded in the queue.) It plays without issue (no gaps) on the simulator but on device I get gaps as if its missing every other chunk of audio. In my app I decompress then pull audio from a memory NSMutableData object. I feed this data into the audio queue. I have a corresponding implementation in the same app that plays wave audio and this example works without issue on long and short audio clips. I'm comparing the wave implementation to the other which does the decompression. the only difference between the two is how I discover the audio meta data and where I get the audio samples for enqueuing. In the wave implementation I use AudioFileGetProperty and AudioFileReadPackets to get this data. In the other case I derive the data before hand using cached ivars loaded during callbacks from my decompressor. The meta data matches for both compressed and wave implementations. I've run the code in instruments and I don't see anything taking more than 1ms in my audio packet delivery/enqueuing logic during playback. I'm completely lost. Please speak up if you have any idea how to solve the situation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

客…行舟 2024-09-20 13:36:46

我终于解决了这个问题。我发现如果我跳过音频的第一个 44 字节(波形头的确切大小),那么它可以在设备上正确播放。无论我是否跳过 44,它都能在 sim 上正确支付。奇怪,我不知道为什么,但这就是它的工作原理。

I finally resolved this issue. I found that if I skipped the 1st 44 bytes (the exact size of a wave header) of audio then it plays correctly on the device. It pays correctly on the sim regardless of wether I skip 44 or not. Strange and I'm not sure why but that's the way it works.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文