【发布时间】:2018-12-07 08:58:49
【问题描述】:
我想知道最好的方法是让 AKSequencer(实际上是 AKMusicTrack)将它的 MIDI 输出到外部设备。
我已经让它工作了,但我觉得可能有更有效的方法。
我的做法:
我已经创建了 AKPolyphonicNode ("MyPolyphonicNode") 的子类
我用它来初始化 AKMIDINode ("MyMIDINode") 的子类,
class MyMIDINode:AKMIDINODE {
init(...) {
...
let myPolyphonicNode = MyPolyphonicNode()
super.init(node: myPolyphonicNode, midiOutputName: "myMIDIOutput")
...
}
//etc
}
并将 AKMusicTrack 的输出设置为 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 在外部输出而不执行所有这些操作?
【问题讨论】:
标签: swift audiokit aksequencer