AVAudioPlayer 消除声音文件之间的一秒停顿
Posted
技术标签:
【中文标题】AVAudioPlayer 消除声音文件之间的一秒停顿【英文标题】:AVAudioPlayer eliminating one second pause between sound files 【发布时间】:2012-06-25 19:52:17 【问题描述】:我正在使用AVAudioPlayer
的多个实例连续播放多个声音文件。
我注意到在播放两个不同的声音文件时会有大约一秒钟的停顿。有没有可能消除这一秒的停顿?我已经提前为每个玩家拨打了[myPlayer prepareToPlay]
。
【问题讨论】:
在使用模拟器与设备时,您是否会遇到同样的暂停? 到目前为止我只在模拟器上测试过,还没有尝试过设备。这是已知的模拟器问题吗? 不,这是一个远射。我有一个 android 应用程序有类似的问题,但由于额外的处理能力(意味着延迟或暂停是由资源(或线程优先级)引起的)在模拟器上没有这样做,但显然不是:( 我明白了,在这种情况下,在我的情况下,实际设备上的延迟可能会更糟。我想知道是否有办法暂停整个文件序列,直到它们都“加载”可以这么说。我在想prepareToPlay
会这样做,但我猜不是。不能说太多关于 Android 的事情,因为我以前从未拥有过(或开发过)。
【参考方案1】:
根据AVAudioPlayer
documentation,您可以使用playAtTime:
进行同步播放。
修改后的示例如下所示:
- (void) startSynchronizedPlayback
NSTimeInterval shortStartDelay = 0.01; // seconds
NSTimeInterval now = player.deviceCurrentTime;
[player playAtTime: now + shortStartDelay];
[secondPlayer playAtTime: now + shortStartDelay + player.duration];
我没有对此进行测试,但猜想它应该可以工作。你当然应该根据你的名字重命名player
和secondPlayer
。
【讨论】:
感谢您的回答,但我在尝试此操作时没有听到 secondPlayer 音频。完成后的委托方法(secondPlayer)被调用,这很奇怪。 我让它工作,使用CACurrentMediaTime()
而不是deviceCurrentTime
,这有所作为。不知道为什么。
抱歉,回复晚了,但我看到你得到了它的工作:) 根据文档时间必须“大于或等于音频播放器的 deviceCurrentTime 属性的值” - 这可能是问题所在是。
没有问题,但现在动画和声音同步出现了一个单独的问题(这就是我尝试使用 CACurrentMediaTime() 开始的原因,如果你有时间可以在这里查看问题: ) ***.com/questions/11198893/…
哎呀,我明白了问题所在。对我来说有点晚了(工作超过 20 小时后),但我将你的问题标记为明天 - 如果你直到今天还没有得到好的答案。以上是关于AVAudioPlayer 消除声音文件之间的一秒停顿的主要内容,如果未能解决你的问题,请参考以下文章