#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()