MidiDevicepublic interface MidiDevice MidiDevice is the base interface for all MIDI devices.
Common devices include synthesizers, sequencers, MIDI input ports, and MIDI
output ports.
A MidiDevice can be a transmitter or a receiver of
MIDI events, or both. Therefore, it can provide {@link Transmitter}
or {@link Receiver} instances (or both). Typically, MIDI IN ports
provide transmitters, MIDI OUT ports and synthesizers provide
receivers. A Sequencer typically provides transmitters for playback
and receivers for recording.
A MidiDevice can be opened and closed explicitly as
well as implicitly. Explicit opening is accomplished by calling
{@link #open}, explicit closing is done by calling {@link
#close} on the MidiDevice instance.
If an application opens a MidiDevice
explicitly, it has to close it explicitly to free system resources
and enable the application to exit cleanly. Implicit opening is
done by calling {@link javax.sound.midi.MidiSystem#getReceiver
MidiSystem.getReceiver} and {@link
javax.sound.midi.MidiSystem#getTransmitter
MidiSystem.getTransmitter}. The MidiDevice used by
MidiSystem.getReceiver and
MidiSystem.getTransmitter is implementation-dependant
unless the properties javax.sound.midi.Receiver
and javax.sound.midi.Transmitter are used (see the
description of properties to select default providers in
{@link javax.sound.midi.MidiSystem}). A MidiDevice
that was opened implicitly, is closed implicitly by closing the
Receiver or Transmitter that resulted in
opening it. If more than one implicitly opening
Receiver or Transmitter were obtained by
the application, the decive is closed after the last
Receiver or Transmitter has been
closed. On the other hand, calling getReceiver or
getTransmitter on the device instance directly does
not open the device implicitly. Closing these
Transmitter s and Receiver s does not close
the device implicitly. To use a device with Receiver s
or Transmitter s obtained this way, the device has to
be opened and closed explicitly.
If implicit and explicit opening and closing are mixed on the
same MidiDevice instance, the following rules apply:
- After an explicit open (either before or after implicit
opens), the device will not be closed by implicit closing. The only
way to close an explicitly opened device is an explicit close.
- An explicit close always closes the device, even if it also has
been opened implicitly. A subsequent implicit close has no further
effect.
To detect if a MidiDevice represents a hardware MIDI port, the
following programming technique can be used:
MidiDevice device = ...;
if ( ! (device instanceof Sequencer) && ! (device instanceof Synthesizer)) {
// we're now sure that device represents a MIDI port
// ...
}
A MidiDevice includes a {@link MidiDevice.Info} object
to provide manufacturer information and so on. |
Methods Summary |
---|
public void | close()Closes the device, indicating that the device should now release
any system resources it is using.
All Receiver and Transmitter instances
open from this device are closed. This includes instances retrieved
via MidiSystem .
| public javax.sound.midi.MidiDevice$Info | getDeviceInfo()Obtains information about the device, including its Java class and
Strings containing its name, vendor, and description.
| public int | getMaxReceivers()Obtains the maximum number of MIDI IN connections available on this
MIDI device for receiving MIDI data.
| public int | getMaxTransmitters()Obtains the maximum number of MIDI OUT connections available on this
MIDI device for transmitting MIDI data.
| public long | getMicrosecondPosition()Obtains the current time-stamp of the device, in microseconds.
If a device supports time-stamps, it should start counting at
0 when the device is opened and continue incrementing its
time-stamp in microseconds until the device is closed.
If it does not support time-stamps, it should always return
-1.
| public javax.sound.midi.Receiver | getReceiver()Obtains a MIDI IN receiver through which the MIDI device may receive
MIDI data. The returned receiver must be closed when the application
has finished using it.
Obtaining a Receiver with this method does not
open the device. To be able to use the device, it has to be
opened explicitly by calling {@link #open}. Also, closing the
Receiver does not close the device. It has to be
closed explicitly by calling {@link #close}.
| public java.util.List | getReceivers()Returns all currently active, non-closed receivers
connected with this MidiDevice.
A receiver can be removed
from the device by closing it.
| public javax.sound.midi.Transmitter | getTransmitter()Obtains a MIDI OUT connection from which the MIDI device will transmit
MIDI data The returned transmitter must be closed when the application
has finished using it.
Obtaining a Transmitter with this method does not
open the device. To be able to use the device, it has to be
opened explicitly by calling {@link #open}. Also, closing the
Transmitter does not close the device. It has to be
closed explicitly by calling {@link #close}.
| public java.util.List | getTransmitters()Returns all currently active, non-closed transmitters
connected with this MidiDevice.
A transmitter can be removed
from the device by closing it.
| public boolean | isOpen()Reports whether the device is open.
| public void | open()Opens the device, indicating that it should now acquire any
system resources it requires and become operational.
An application opening a device explicitly with this call
has to close the device by calling {@link #close}. This is
necessary to release system resources and allow applications to
exit cleanly.
Note that some devices, once closed, cannot be reopened. Attempts
to reopen such a device will always result in a MidiUnavailableException.
|
|