如何延迟for循环直到声音在Swift中完成播放

时间:2016-02-07 03:15:49

标签: swift for-loop audio

所以,我有一个for循环,它将数组中的值运行到if语句中。 if语句根据数组中的值播放声音。

但是,现在,所有值都在同时运行,所以声音都在同一时间播放。这是我的代码现在的样子:

// sortedKeys is an array made from the keys in the newData dictionary.
let sortedKeys = Array(newData.keys).sort(<)

// newData is the dictionary of type [float:float] being used to get the values that are then being run through the if statement.
    for (value) in sortedKeys {
        let data = newData[value]
        if data <= Float(1) {
            self.audioPlayer1.play()
        } else if data <= Float(2) && data > Float(1) {
            self.audioPlayer2.play()
        } else if data <= Float(3) && data > Float(2) {
            self.audioPlayer3.play()
        } else if data <= Float(4) && data > Float(3) {
            self.audioPlayer4.play()
        } else if data <= Float(5) && data > Float(4) {
            self.audioPlayer5.play()
        } else if data <= Float(6) && data > Float(5) {
            self.audioPlayer6.play()
        } else if data <= Float(7) && data > Float(6) {
            self.audioPlayer7.play()
        } else if data <= Float(8) && data > Float(7) {
            self.audioPlayer8.play()
        } else if data <= Float(9) && data > Float(8) {
            self.audioPlayer9.play()
        } else {
            self.audioPlayer10.play()
        }
    }

我怎样才能让AVAudioPlayer完成播放后继续for循环以获得下一个声音?我认为它与AVPlayerItemDidPlayToEndTimeNotification有关,但我不知道如何使用它来延迟for循环。

谢谢!

2 个答案:

答案 0 :(得分:2)

  

我怎样才能让AVAudioPlayer完成播放后再继续for循环以获得下一个声音。

让音频播放器的委托实施-audioPlayerDidFinishPlaying:successfully:,以便它选择下一个声音并播放它。

音频以异步方式播放,因此您无法在声音播放时让代码暂停一段时间,然后继续播放。你需要设计你的代码,以便它发出声音,然后当音频播放器说它已经完成时,下一个声音就开始了。

答案 1 :(得分:0)

我有一个类似的问题,并使用了睡眠(插入要暂停的秒数),例如在self.audioPlayer.play()函数之后的sleep(3)函数,以便给播放功能播放时间。但这并不理想,因为它会阻塞主线程。