所以,我有一个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循环。
谢谢!
答案 0 :(得分:2)
我怎样才能让AVAudioPlayer完成播放后再继续for循环以获得下一个声音。
让音频播放器的委托实施-audioPlayerDidFinishPlaying:successfully:
,以便它选择下一个声音并播放它。
音频以异步方式播放,因此您无法在声音播放时让代码暂停一段时间,然后继续播放。你需要设计你的代码,以便它发出声音,然后当音频播放器说它已经完成时,下一个声音就开始了。
答案 1 :(得分:0)
我有一个类似的问题,并使用了睡眠(插入要暂停的秒数),例如在self.audioPlayer.play()函数之后的sleep(3)函数,以便给播放功能播放时间。但这并不理想,因为它会阻塞主线程。