使用 AudioKit 从 MIDI 文件中读取音符
Posted
技术标签:
【中文标题】使用 AudioKit 从 MIDI 文件中读取音符【英文标题】:Read note from MIDI file using AudioKit 【发布时间】:2017-12-27 07:41:33 【问题描述】:我正在尝试构建一个从 midi 文件呈现音符的音序器。
目前我正在使用 AudioKit 进行音乐数据处理。想知道如何使用 AudioKit 从 MIDI 文件中获取音符数据/事件。
我尝试使用 AKSequencer 并输出到 AKMIDINode 来监听 MIDI 事件,但似乎无法从中得到任何东西。
class CustomMIDINode: AKMIDINode
override init(node: AKPolyphonicNode)
print("Node create") // OK
super.init(node: node)
func receivedMIDINoteOff(noteNumber: MIDINoteNumber, velocity: MIDIVelocity, channel: MIDIChannel)
print("midi note off") // Not printed
func receivedMIDISetupChange()
print("midi setup changed") // Not printed
override func receivedMIDINoteOn(_ noteNumber: MIDINoteNumber, velocity: MIDIVelocity, channel: MIDIChannel)
print("receivedMIDINoteOn") // Not printed
func setupSynth()
oscBank.attackDuration = 0.05
oscBank.decayDuration = 0.1
oscBank.sustainLevel = 0.1
oscBank.releaseDuration = 0.1
let seq = AKSequencer(filename: "music")
let oscBank = AKOscillatorBank()
var midi = AKMIDI()
let midiNode = CustomMIDINode(node: oscBank)
setupSynth()
midi.openInput()
midi.addListener(midiNode)
seq.tracks.forEach (track) in
track.setMIDIOutput(midiNode.midiIn)
AudioKit.output = midiNode
AudioKit.start()
seq.play()
【问题讨论】:
【参考方案1】:您是否查看过任何可供下载的示例音频工具包项目?它们对于 AK 故障排除非常有用。实际上,我发现示例比文档更好(因为没有很好地解释实现)。
至于您的问题,您可以在事件中添加一个 midi 侦听器,Analog Synth X 项目available here 中有此代码的示例。
let midi = AKMIDI()
midi.createVirtualPorts()
midi.openInput("Session 1")
midi.addListener(self)
要获得更有效的代码,您可以refer to this,尽管部分代码可能已过时。
【讨论】:
【参考方案2】:Tony,您是没有收到任何 MIDI 事件,还是只收到了打印语句?
我同意 Axemasta 关于将 AKMidiListener
添加到课程中的回应,以及查看 AudioKit 附带的 MIDI 代码示例。这个 ROM Player 示例展示了如何使用 AKMidiSsmpler
节点播放外部 MIDI 文件:
https://github.com/AudioKit/ROMPlayer
为了显示打印,请尝试将其包装在 DispatchQueue.main.async
中,以便它位于主线程上。这是我在此处发布的带有代码示例的 AudioKit MIDI 实现问题:
AudioKit ios - receivedMIDINoteOn function
我希望这会有所帮助。
【讨论】:
以上是关于使用 AudioKit 从 MIDI 文件中读取音符的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AudioKit 的新 AKSequencer 播放 MIDI
Audiokit 似乎只接收前三个 sysex MIDI 消息
使用 audiokit 在 AKsequencer 中创建额外 MIDI 轨道的问题