2016-02-08 50 views
0

我試圖播放兩個audioPlayers,一個接一個完成播放。我使用的夫特函數playAtTime()來創建用於所述第二延遲,如下所示:Swift函數playAtTime()不會添加延遲

var audioPlayer1 = AVAudioPlayer() 
var audioPlayer2 = AVAudioPlayer() 

let soundPathA = NSBundle.mainBundle().pathForResource("A", ofType: "m4a") 
let soundURLA = NSURL.fileURLWithPath(soundPathA!) 

let soundPathB = NSBundle.mainBundle().pathForResource("B", ofType: "m4a") 
let soundURLB = NSURL.fileURLWithPath(soundPathB!) 

var noteA = Sound() 
noteA.URL = soundURLA 

var noteB = Sound() 
noteB.URL = soundURLB 

self.audioPlayer1 = try!AVAudioPlayer(contentsOfURL: soundURLA) 
self.audioPlayer2 = try!AVAudioPlayer(contentsOfURL: soundURLB) 

let duration : NSTimeInterval = audioPlayer1.duration 
self.audioPlayer1.play() 
self.audioPlayer2.playAtTime(duration) 

但是,沒有發生延遲。我的問題在這裏?

+0

什麼是從'duration'返回的值? –

+0

0.648707482993197 – Sunay

+0

這隻會延遲約0.6秒,是你想要的延遲量? – MikeG

回答

3

playAtTime函數不會在給定時間開始播放。相反,它會立即播放,從播放聲音的特定時間開始播放。所以如果你給它0.6,它會馬上開始播放,但聲音從0.6秒開始。請參閱文檔here

如果你想打之前要等待,您可以使用dispatch_after

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.6 * Double(NSEC_PER_SEC))) 
dispatch_after(delayTime, dispatch_get_main_queue()) { 
    self.audioPlayer2.play() 
} 
+0

謝謝!完美工作! – Sunay

-1

我還沒有嘗試過邁克爾的答案,但對於那些你想知道如何與playAtTime做到這一點,看看這個: http://sandmemory.blogspot.com/2014/12/how-would-you-add-reverbecho-to-audio.html並看看playEcho功能。

的代碼,對我來說是這樣的:

var playTime1 : NSTimeInterval = audioPlayer2.deviceCurrentTime + (duration1*Double(value)) 
self.audioPlayer1.stop() 
self.audioPlayer1.currentTime = 0 
self.audioPlayer1.play()