![](/img/trans.png)
[英]How to change frequency of AKMorphingOscillatorBank countinuously in Audiokit?
[英]AudioKit: How to change tempo on the fly?
我是 AudioKit 和編程音樂應用程序的新手。 我正在構建一個節拍器應用程序並使用 AudioKit 的 AKMetronome。 我想要一個功能,用戶可以指定一系列不同節奏的節拍模式。 但是我發現使用蘋果的 DispatchQueue 是不准確的。
我正在考慮使用 AKSequencer 重寫節拍器。 有沒有辦法使用 AudioKit 的音序器即時更改速度或生成具有多個不同速度的序列? (音序器示例: https://github.com/AudioKit/Cookbook/blob/main/Cookbook/Cookbook/Recipes/Shaker.swift )
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
})
更新:
我發現您可以使用 AKMetronome.callback 將回調 function 分配給 AKMetronome。 ( https://audiokit.io/docs/Classes/AKMetronome.html#/s:8AudioKit11AKMetronomeC8callbackyycvp )然后您可以在新序列開始時更新速度。
一個可能的解決方案是創建一個速度軌道,其中將包含速度事件,當處理這些事件時會改變音序器的速度。
這是應該做什么的大綱:
在 MIDI 事件中表示速度值有點困難,因為通常 MIDI 參數 go 從 0 到 127。我要做的是使用Note On
事件,在音符的音高中我將存儲tempo div 128
和音符的速度, tempo % 128
.
這就是您的回調 function 的樣子:
func tempoCallback(status:UInt8, note:MIDINoteNumber, vel:MIDIVelocity) -> () {
guard let status = AKMIDIStatus(byte: status),
let type = status.type,
type == .noteOn else { return }
let tempo: Int = note * 128 + vel
sequencer.tempo = Double(tempo)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.