Мне удалось подключить AKSequencer к AKMIDICallbackInstrument (мне это нужно, потому что мне нужно подключить его к монофоническим c узлам позже), но я слышу много неточностей при воспроизведении тех же 16 нот в oop , Я создал новый тест-проект только с одним AKOscillator и AKAmplitudeEnvelope. до этого я пробовал использовать более разные генераторы звука (fmOs c и Wavetable), filters et c, и не каждая нота была проиграна. функция обратного вызова вызывается все время, но иногда нет звука (каждые 10 секунд c или около того) ... мне нужно настроить некоторые значения в AKSettings? или что еще я могу сделать?
вот мой код:
import UIKit
import AudioKit
import AudioKitUI
class ViewController: UIViewController {
var adsr = AKAmplitudeEnvelope()
var sequencer = AKSequencer()
var midi = AKMIDI()
var sequenceLength = AKDuration(beats: 16.0)
override func viewDidLoad() {
var myCallBack = AKMIDICallbackInstrument { status, note, velocity in
print(status)
if(status == 144)
{
self.start()
}
if(status == 128)
{
self.stop()
}
}
_ = sequencer.newTrack()
sequencer.setLength(sequenceLength)
generateSequence()
sequencer.setGlobalMIDIOutput(myCallBack.midiIn)
var osc = AKOscillator()
osc.frequency = Double(500)
adsr = AKAmplitudeEnvelope(osc)
adsr.attackDuration = 0.1
adsr.decayDuration = 0.3
adsr.sustainLevel = 0.5
adsr.releaseDuration = 0.7
AudioKit.output = adsr
try! AudioKit.start()
osc.start()
sequencer.setTempo(90.0)
sequencer.enableLooping()
sequencer.play()
}
func start()
{
adsr.start()
}
func stop()
{
adsr.stop()
}
func generateSequence()
{
sequencer.tracks[0].clear()
let numberOfSteps = Int(Float(sequenceLength.beats))
for i in 0 ..< numberOfSteps
{
sequencer.tracks[0].add(noteNumber: 57, velocity: 127, position: AKDuration(beats: Double(i)), duration: AKDuration(beats: 0.1))
}
}
}