我正在嘗試制作可以重復播放聲音(BPM)和有/沒有每個大頭釘音量的節拍器應用程式。我試圖通過以下方式實作這一Timer目標GCD Timer:
let interval = TimeInterval(Double(60) / Double(bpm))
timer = Timer.scheduledTimer(timeInterval: interval,
target: self,
selector: #selector(playTackt),
userInfo: nil,
repeats: true
@objc func playTackt(){
if shouldPlaySoundTackts{
audioPlayer.volume = 1
playedSoundTackts = 1
if playedSoundTackts == soundTackts{
shouldPlaySoundTackts = false
playedSoundTackts = 0
}
}else{
audioPlayer.volume = 0
playedMuteTackts = 1
if playedMuteTackts == muteTackts{
shouldPlaySoundTackts = true
playedMuteTackts = 0
}
}
audioPlayer.play()
}
但問題是 Timer 有一些以毫秒為單位的滯后。然后我嘗試用audioPlayerDidFinishPlaying方法重播聲音,但它會在聲音完成播放后約 0.5 秒后呼叫。那么是否有另一種方法可以使用 bpm 和有/沒有每個大頭釘音量來生成或重復聲音?
uj5u.com熱心網友回復:
您可以嘗試使用 Sequencer 或 AppleSequencer 并將音符分配為 Midi。AppleSampler 的一個已知缺點是播放第一個音符時會有延遲。您可以在 MusicToy 中看到 AppleSequencer 的示例,在 Github 上的 AudioKit/Cookbook 的 Shaker 示例中看到 Sequencer。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/415458.html
標籤:
