嗨我有很多AVAudioPlayers,我同步使用PlayAtTime功能同时开始播放。我的代码从4开始就适用于每个iOS,但现在它在iOS 6中不起作用。还有其他人遇到过这个问题吗?
代码:
//Mixers are AVAUdioPlayer instances loaded from before and are fine
NSTimeInterval shortStartDelay = 0.00; // seconds
NSTimeInterval now = player.deviceCurrentTime
[miXer.music playAtTime:now + shortStartDelay];
[miXer.music2 playAtTime:now + shortStartDelay];
[miXer.music3 playAtTime:now + shortStartDelay];
[miXer.music4 playAtTime:now + shortStartDelay];
[miXer.music5 playAtTime:now + shortStartDelay];
注意:如果我使用播放功能,一切正常(除了混音器当然不同步),但playAtTime无法播放文件。
答案 0 :(得分:4)
deviceCurrentTime
的未来时间必须大于-playAtTime:
才能正常工作。文档说:https://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html
您需要将shortStartDelay
设置为大于0的内容。
修改强>
或者,您可能需要先致电prepareToPlay
。
答案 1 :(得分:1)
不知道你是否已经解决了这个问题。
我遇到了同样的问题,但更简单,因为我只有一个AVAudioPlayer实例。当我的应用程序进入后台时,它会暂停播放声音并且在变为活动状态时它应该从头开始播放声音。
我所做的是设置 currentTime 属性并调用 play :
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationWillResignActiveNotification object:nil queue:nil usingBlock:^(NSNotification *arg1) {
[self pauseNarration];
}];
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:nil usingBlock:^(NSNotification *arg1) {
[self playNarration];
}];
}
- (void)playNarration {
if ([self isAudioPlayerSet]) {
[_audioPlayer setCurrentTime:0.0];
[_audioPlayer play];
}
}
- (void)pauseNarration {
if ([self isAudioPlayerSet]) {
[_audioPlayer pause];
}
}
答案 2 :(得分:1)
我使用这个,因为原来的AVAudioPlayer的playAtTime并不适合你想要开始播放的价值偏移。
//自定义功能
func playAtTime(time: NSTimeInterval) {
mediaPlayer.pause()
mediaPlayer.currentTime = time
mediaPlayer.play()
}
此流程对我来说效果很好。