0

我正在我的应用程序中开发节拍器,我想实现一个功能,节拍器可以在特定时间改变它的速度。例如,以速度 = 120 bpm 播放 4 个小节,然后以速度 = 200 bpm 播放 8 个小节,然后回到 120 bpm。

我尝试使用AudioKit中的 AKMetronome 并使用DispatchQueue.main.asyncAfter更新速度。然而,节奏有点偏离并且有明显的滞后。计算错误还是我遗漏了什么?

    metronome.tempo = 120
    let first_interval = 60.0 / 120.0
    let switchTime1 = DispatchTime.now() + (first_interval * 4.0)
    metronome.play()
    
    DispatchQueue.main.asyncAfter(deadline: switchTime1, execute: {
        self.metronome.tempo = 200
    })
    
    let second_inter = 60.0 / 200.0
    let switchTime2 = switchTime1 + (second_inter * 8.0)
    
    DispatchQueue.main.asyncAfter(deadline: switchTime2, execute: {
        self.metronome.tempo = 120
    })
4

0 回答 0