0

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

4

3 回答 3

4

你未来的时间必须大于deviceCurrentTime工作时间-playAtTime:。文档如是说:https ://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html

您需要设置shortStartDelay为大于 0 的值。

编辑:

或者,您可能需要先打电话prepareToPlay

于 2012-10-15T18:39:04.067 回答
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];
    }
}
于 2012-11-22T10:18:25.603 回答
1

我正在使用这个,因为原始 AVAudioPlayer 的 playAtTime 不能仅使用您想要开始播放的值偏移量。

// 自定义函数

func playAtTime(time: NSTimeInterval) {
    mediaPlayer.pause()
    mediaPlayer.currentTime = time
    mediaPlayer.play()
}

这个流程对我来说效果很好。

于 2016-05-23T13:25:06.213 回答