问题
Currently I am using an AKKeyboardView
to connect essentially to the AKRhodesPiano
object, and I was wondering if there was an easy way to generate a MIDI file from this?
I see the AKKeyboardView
has the noteOn
and noteOff
functions, which does produce the MIDINoteNumber
but I can't find anywhere else in the AudioKit library to really take this input and generate a MIDI file, even if only just a simple one.
回答1:
You would need to run an AKSequencer in the background (maybe with a metronome track). Make an additional track that you will record onto. Also set the length to be as long as you will need for the recording.
When you get a noteOn message from the keyboard, you can check the sequencer's currentPosition
and record this into a dictionary. When you get the matching pitch's noteOff message, again check the currentPosition
. Use the difference between these two times to get the duration and add a note to your recording track on the sequencer:
myRecordingTrack.add(noteNumber: noteNumber,
velocity: 127,
position: timeAtNoteOn,
duration: timeAtNoteOff - timeAtNoteOn,
channel: 0)
Then you could easily use AKSequencer
's genData()
to create a MIDI file (possibly either deleting the metronome track, or copying the recorded track to a new AKSequencer
instance).
Check out the SequencerDemo for setting up AKSequencer
and building sequences and MIDIFileEditAndSync (both in the iOS Example folder in the AudioKit repo) for an example of writing AKSequencer
to a MIDI file.
来源:https://stackoverflow.com/questions/50070105/creating-a-midi-file-from-an-akkeyboardview