MIDI has three different use cases: MIDI file playback, interactive MIDI playing, and a mix of these: MIDI file playback with interaction.
Playback for a MIDI file works exactly in the same way as for other audio content types.
A player is created with the locator device://midi
for pure interactive MIDI. Interactive playing
is possible by using MIDIControl. MIDIControl
can be used for various tasks, for example change MIDI channel volumes,
change instrument assignments to channels, play notes, and so forth.
When the player is created this way, default instruments are
assigned to channels as follows: Drum set on channel 9, piano on all
the others. Processing of MIDI events is started when a player is
prefetched, meaning that MIDI commands sent with MIDIControl.shortMidiEvent
and MIDIControl.longMidiEvent
will take effect
right away. Starting the player explicitly is not needed.
In this case a player is
created as for plain MIDI file playback, but MIDIControl
is obtained and used to control playback and to play along interactively. MIDIControl
can be used in the same way as for pure interactive
MIDI playing, with a few exceptions:
Default instruments
are not assigned to any channels. Only instruments used by the MIDI
file are assigned to their corresponding channels. The rest are left
unassigned, but can be assigned with MIDIControl.setProgram
as suitable.
Processing of MIDI events is started when the
player is started, in contrary to the purely interactive case. MIDI
events can be sent with MIDIControl.shortMidiEvent
and MIDIControl.longMidiEvent
when the player
is prefetched, but they are queued until the player is started.