首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >音频工具箱回放只扮演部分输出缓冲区

音频工具箱回放只扮演部分输出缓冲区
EN

Stack Overflow用户
提问于 2010-02-04 18:30:55
回答 1查看 703关注 0票数 3

我正在做一个使用音频工具箱来记录和回放PCM数据的项目,我在回放方面遇到了困难。在模拟器中,我可以很好地记录和播放音频,使用自定义类来处理存储和为录制和回放缓冲区提供PCM字节的需要。在设备(iPhone (3.0.1)和iPod 2G (3.1.2))上,产生的音频文件是正确的,但是应用程序中的回放口吃,就像它只播放每个回放缓冲区的一部分一样。我的缓冲区有1秒长,我有3个缓冲区,在播放开始之前就预先加载;口吃也会在最初的3秒内发生,我认为这排除了延迟问题。

在此之前,我已经编写了音频工具箱代码,这里我没有做任何奇怪的事情,只是使用自己的类来来源PCM数据,而不是使用AudioFileReadBytes()

我知道从我的源中得到的数据是好的,因为它在sim中正确地播放,并且它作为一个正确的音频文件写入磁盘。

我玩过一些采样率;我通常使用11025Hz采样来减少文件大小(这都是声音,所以听起来很好)。在44100赫兹,但同样大小的缓冲区,我有同样的口吃问题,但音频段来得更快,大约4倍的速度。这就是为什么我认为它只是每个缓冲区的一部分。

我认为它只能在每个缓冲区中扮演一部分的唯一原因是延迟问题.就像音频工具箱一样,当我还在填充一个空的缓冲器时,它的全部缓冲区都用完了。但是这会导致它正确地播放预加载的缓冲区,然后开始口吃,而这种情况不会发生,它会在整个过程中结巴

我尝试过巨大的缓冲区,比如10 at的缓冲区,在回放结束时,我只得到了沉默和一个口吃的声音。我也尝试过比正常情况下预加载更多的缓冲区,比如10秒的音频,而且它的性能也是一样的。音频会话是用AVAudioSession设置的,而不是音频工具箱调用,它被设置为播放类别

我不知道如何尝试和攻击这个问题,对我来说,它在模拟器上工作得很好,但在设备上却没有任何意义。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-10 16:37:27

事实证明,NSData的GetBytes:length:的使用导致了这个问题。用那种方法填充的缓冲区打得不正确。但是,从该缓冲区到另一个缓冲区执行memcpy将防止问题的发生。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2202165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档