iPhone / iOS:AVAudioPlayer PlayAtTime:无法在iOS 6中运行

时间:2012-10-15 18:34:41

标签: iphone ios6 avaudioplayer

嗨我有很多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无法播放文件。

3 个答案:

答案 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()
}

此流程对我来说效果很好。