2016-02-08 3 views
0

Я пытаюсь сыграть два аудиопланера, один за другим закончил играть. Я использую Swift функции playAtTime(), чтобы создать задержку для второго, следующим образом:Быстрая функция 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() 
Смежные вопросы