我想知道最好的方法是让 AKSequencer(实际上是 AKMusicTrack)将它的 MIDI 输出到外部设备。
我已经让它工作了,但我觉得可能有一种更有效的方法。
我这样做的方式:
我已经创建了 AKPolyphonicNode 的子类(“MyPolyphonicNode”)
我用它来初始化 AKMIDINode 的子类(“MyMIDINode”),
class MyMIDINode:AKMIDINODE {
init(...) {
...
let myPolyphonicNode = MyPolyphonicNode()
super.init(node: myPolyphonicNode, midiOutputName: "myMIDIOutput")
...
}
//etc
}
并将 AKMusicTrack 的输出设置 MIDIoutput 到 AKMIDINode 子类的 midiIn:
track.setMIDIOutput(myMIDINode.midiIn)
然后在 MyPolyphonicNode 子类中,我重写了:
override func play(noteNumber: MIDINoteNumber, velocity: MIDIVelocity, frequency: Double) {
myDelegate.myDelegateFunction(noteNumber:MIDINoteNumber, velocity:MIDIVelocity, channel:myChannel)
}
在其代表中:
let midi:AKMIDI //set in the init
enableMIDI(midi.client, name: "midiClient") //also in the init
func myDelegateFunction(noteNumber:MIDINoteNumber, velocity:MIDIVelocity, channel:MIDIChannelNumber) {
midi.sendEvent(AKMIDIEvent(noteOn: noteNumber, velocity: velocity, channel: channel))
}
这行得通,但我认为可能有一种方法可以直接告诉 AKMusicTracks 直接从外部输出而不做所有这些?