2012-10-15 72 views
0

嗨我有一些AVAudioPlayers,我同步開始與PlayAtTime函數同時開始播放。我的代碼自4以來一直適用於每個iOS,但現在它在iOS 6中不起作用。是否有其他人遇到過這個問題?iPhone/iOS:AVAudioPlayer PlayAtTime:在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

您的未來時間必須大於deviceCurrentTime才能使用-playAtTime:。因此,文件說:https://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html

您需要設置shortStartDelay到的東西比0

編輯更大:

或者,您可能需要調用prepareToPlay第一。

+0

否。引用的內容是:「您提供給time參數的值必須大於或等於音頻播放器的deviceCurrentTime屬性的值。我試着直接輸入大於deviceCurrentTime的時間,當第一次運行時它是0。 – Zigglzworth

+0

確實,但在Apple提供的示例中,它們使用0.01的非零值。 Didja爲你的'shortStartDelay'嘗試這個嗎? –

+0

是的,我試過了。沒有運氣 – Zigglzworth

1

不知道你是否已經解決了這個問題。

我面臨同樣的問題,但更簡單,因爲我只有一個AVAudioPlayer實例。當我的應用程序進入後臺時,它會暫停播放聲音並變爲活動狀態,它應該從頭開始播放聲音。

我所做的就是設置currentTime的屬性並調用發揮

- (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]; 
    } 
} 
1

我用這一個,因爲原來的AVAudioPlayer的playAtTime不只是值偏置時要開始玩。

//自定義功能

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

該流程爲我運作良好。

相關問題