АудиоКит воспроизводит заметки на внешней MIDI-клавиатуре

#swift #swiftui #midi #audiokit

Вопрос:

Я использую AudioKit для воспроизведения нот с помощью микшера() и секвенсора(). Я хотел бы изменить выходной узел на внешнее MIDI-устройство (например, пианино), но не могу понять, как правильно настроить выходной узел. Для иллюстрации, следующий код воспроизводит некоторые заметки на самом устройстве (iOS). Мы будем очень признательны за любую помощь.

 import AudioKit
import AudioKitEX

struct SongInfoView: View {
  let engine = AudioEngine()
  let sampler = MIDISampler(name: "MIDISampler")
  var mixer = Mixer()
  var sequencer = Sequencer()

  func playMIDI() {
    do {
        try sampler.loadSoundFont("Grand Piano", preset: 0, bank: 0)
           print("Soundfont Grand Piano loaded")
    } catch {
        print("Error loading Grand Piano soundfont")
    }
    
    mixer.addInput(sampler)
    
    let track = sequencer.addTrack(for: sampler)
    track.targetNode = sampler
    track.loopEnabled = false
            
    track.sequence.add(noteNumber: 80, velocity: 100, position: 0, duration: 1)
    track.sequence.add(noteNumber: 81, velocity: 100, position: 1, duration: 1)
    track.sequence.add(noteNumber: 82, velocity: 100, position: 2, duration: 1)
                
    track.tempo = 60
            
    for track in sequencer.tracks {
        track.targetNode = mixer
    }
            
    try? engine.stop()
    engine.output = mixer
            
    do {
        try engine.start()
        print("AudioKit engine started")
    } catch {
        Log("AudioKit did not start! (error)")
    }
    print(engine.connectionTreeDescription)

    sequencer.playFromStart()
  }
...
}
 

Я предполагаю, что решение развивается вокруг:

 midi = MIDI()
midi.createVirtualPorts()
midi.createVirtualOutputPorts()
midi.openInput()
midi.openOutput()