The
MidiSystem
class provides access to the installed MIDI
system resources, including devices such as synthesizers, sequencers, and
MIDI input and output ports. A typical simple MIDI application might
begin by invoking one or more
MidiSystem
methods to learn
what devices are installed and to obtain the ones needed in that
application.
The class also has methods for reading files, streams, and URLs that
contain standard MIDI file data or soundbanks. You can query the
MidiSystem
for the format of a specified MIDI file.
You cannot instantiate a MidiSystem
; all the methods are
static.
Properties can be used to specify default MIDI devices.
Both system properties and a properties file are considered.
The properties file is "lib/sound.properties" in the JRE
directory. If a property exists both as a system property and in the
properties file, the system property takes precedence. If none is
specified, a suitable default is chosen among the available devices.
The syntax of the properties file is specified in
Properties.load
. The
following table lists the available property keys and which methods
consider them:
The property value consists of the provider class name
and the device name, separated by the hash mark ("#").
The provider class name is the fully-qualified
name of a concrete
MIDI device provider
class. The device name is matched against
the
String
returned by the
getName
method of
MidiDevice.Info
.
Either the class name, or the device name may be omitted.
If only the class name is specified, the trailing hash mark
is optional.
If the provider class is specified, and it can be
successully retrieved from the installed providers,
the list of
MidiDevice.Info
objects is retrieved
from the provider. Otherwise, or when these devices
do not provide a subsequent match, the list is retrieved
from MidiSystem.getMidiDeviceInfo()
to contain
all available MidiDevice.Info
objects.
If a device name is specified, the resulting list of
MidiDevice.Info
objects is searched:
the first one with a matching name, and whose
MidiDevice
implements the
respective interface, will be returned.
If no matching MidiDevice.Info
object
is found, or the device name is not specified,
the first suitable device from the resulting
list will be returned. For Sequencer and Synthesizer,
a device is suitable if it implements the respective
interface; whereas for Receiver and Transmitter, a device is
suitable if it
implements neither Sequencer nor Synthesizer and provides
at least one Receiver or Transmitter, respectively.
For example, the property javax.sound.midi.Receiver
with a value
"com.sun.media.sound.MidiProvider#SunMIDI1"
will have the following consequences when
getReceiver
is called:
if the class com.sun.media.sound.MidiProvider
exists
in the list of installed MIDI device providers,
the first Receiver
device with name
"SunMIDI1"
will be returned. If it cannot
be found, the first Receiver
from that provider
will be returned, regardless of name.
If there is none, the first Receiver
with name
"SunMIDI1"
in the list of all devices
(as returned by getMidiDeviceInfo
) will be returned,
or, if not found, the first Receiver
that can
be found in the list of all devices is returned.
If that fails, too, a MidiUnavailableException
is thrown.