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