目前我正在使用AKKeyboardView
基本连接到AKRhodesPiano
对象,我想知道是否有一种简单的方法可以从中生成MIDI文件?
我看到AKKeyboardView
有noteOn
和noteOff
个函数,这些函数确实产生MIDINoteNumber
,但我无法找到AudioKit库中的任何其他位置真的拿这个输入并生成一个MIDI文件,即使只是一个简单的文件。
答案 0 :(得分:6)
您需要在后台运行AKSequencer(可能带有节拍器轨道)。制作您要录制的附加曲目。同时将长度设置为录制所需的长度。
当您从键盘上收到noteOn消息时,您可以检查音序器的currentPosition
并将其记录到字典中。当您收到匹配音高的noteOff消息时,请再次检查currentPosition
。使用这两次之间的差异来获得持续时间并在音序器上为记录轨道添加注释:
myRecordingTrack.add(noteNumber: noteNumber,
velocity: 127,
position: timeAtNoteOn,
duration: timeAtNoteOff - timeAtNoteOn,
channel: 0)
然后您可以轻松使用AKSequencer
' genData()
来创建MIDI文件(可能删除节拍器轨道,或将录制的轨道复制到新的AKSequencer
实例)。
有关将AKSequencer
写入MIDI文件的示例,请查看SequencerDemo以设置AKSequencer
和构建序列以及MIDIFileEditAndSync(均位于AudioKit仓库中的iOS示例文件夹中)。