# Package javax.sound.midi

package javax.sound.midi
Provides interfaces and classes for I/O, sequencing, and synthesis of MIDI (Musical Instrument Digital Interface) data.

## Related Documentation

For more information on using Java Sound see:

- The Java Sound Tutorial

Please note: In the `javax.sound.midi` APIs, a `null` reference parameter to methods is incorrect unless explicitly documented on the method as having a meaningful interpretation. Usage to the contrary is incorrect coding and may result in a run time exception either immediately or at some later time. `NullPointerException` is an example of typical and acceptable run time exception for such cases.

Since:
  1.3

- Related Packages
  Package
  Description
  javax.sound
  Provides interfaces and classes for the Java Sound API.
  javax.sound.midi.spi
  Supplies interfaces for service providers to implement when offering new MIDI devices, MIDI file readers and writers, or sound bank readers.
  javax.sound.sampled
  Provides interfaces and classes for capture, processing, and playback of sampled audio data.
- Class
  Description
  ControllerEventListener
  The `ControllerEventListener` interface should be implemented by classes whose instances need to be notified when a `Sequencer` has processed a requested type of MIDI control-change event.
  Instrument
  An instrument is a sound-synthesis algorithm with certain parameter settings, usually designed to emulate a specific real-world musical instrument or to achieve a specific sort of sound effect.
  InvalidMidiDataException
  An `InvalidMidiDataException` indicates that inappropriate MIDI data was encountered.
  MetaEventListener
  The `MetaEventListener` interface should be implemented by classes whose instances need to be notified when a `Sequencer` has processed a `MetaMessage`.
  MetaMessage
  A `MetaMessage` is a `MidiMessage` that is not meaningful to synthesizers, but that can be stored in a MIDI file and interpreted by a sequencer program.
  MidiChannel
  A `MidiChannel` object represents a single MIDI channel.
  MidiDevice
  `MidiDevice` is the base interface for all MIDI devices.
  MidiDevice.Info
  A `MidiDevice.Info` object contains assorted data about a `MidiDevice`, including its name, the company who created it, and descriptive text.
  MidiDeviceReceiver
  `MidiDeviceReceiver` is a `Receiver` which represents a MIDI input connector of a `MidiDevice` (see `MidiDevice.getReceiver()`).
  MidiDeviceTransmitter
  `MidiDeviceTransmitter` is a `Transmitter` which represents a MIDI input connector of a `MidiDevice` (see `MidiDevice.getTransmitter()`).
  MidiEvent
  MIDI events contain a MIDI message and a corresponding time-stamp expressed in ticks, and can represent the MIDI event information stored in a MIDI file or a `Sequence` object.
  MidiFileFormat
  A `MidiFileFormat` object encapsulates a MIDI file's type, as well as its length and timing information.
  MidiMessage
  `MidiMessage` is the base class for MIDI messages.
  MidiSystem
  The `MidiSystem` class provides access to the installed MIDI system resources, including devices such as synthesizers, sequencers, and MIDI input and output ports.
  MidiUnavailableException
  A `MidiUnavailableException` is thrown when a requested MIDI component cannot be opened or created because it is unavailable.
  Patch
  A `Patch` object represents a location, on a MIDI synthesizer, into which a single instrument is stored (loaded).
  Receiver
  A `Receiver` receives `MidiEvent` objects and typically does something useful in response, such as interpreting them to generate sound or raw MIDI output.
  Sequence
  A `Sequence` is a data structure containing musical information (often an entire song or composition) that can be played back by a `Sequencer` object.
  Sequencer
  A hardware or software device that plays back a MIDI `sequence` is known as a sequencer.
  Sequencer.SyncMode
  A `SyncMode` object represents one of the ways in which a MIDI sequencer's notion of time can be synchronized with a master or slave device.
  ShortMessage
  A `ShortMessage` contains a MIDI message that has at most two data bytes following its status byte.
  Soundbank
  A `Soundbank` contains a set of `Instruments` that can be loaded into a `Synthesizer`.
  SoundbankResource
  A `SoundbankResource` represents any audio resource stored in a `Soundbank`.
  Synthesizer
  A `Synthesizer` generates sound.
  SysexMessage
  A `SysexMessage` object represents a MIDI system exclusive message.
  Track
  A MIDI track is an independent stream of MIDI events (time-stamped MIDI data) that can be stored along with other tracks in a standard MIDI file.
  Transmitter
  A `Transmitter` sends `MidiEvent` objects to one or more `Receivers`.
  VoiceStatus
  A `VoiceStatus` object contains information about the current status of one of the voices produced by a `Synthesizer`.