Instrument (Java SE 26 & JDK 26)
Description: declaration: module: java.desktop, package: javax.sound.midi, class: Instrument
Keywords: javax.sound.midi.Instrument class

# Class Instrument

java.lang.Object
javax.sound.midi.SoundbankResource
javax.sound.midi.Instrument

public abstract class Instrument extends SoundbankResource
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. Instruments are typically stored in collections called soundbanks. Before the instrument can be used to play notes, it must first be loaded onto a synthesizer, and then it must be selected for use on one or more channels, via a program-change command. MIDI notes that are subsequently received on those channels will be played using the sound of the selected instrument.

See Also:
  - `Soundbank`
  - `Soundbank.getInstruments()`
  - `Patch`
  - `Synthesizer.loadInstrument(Instrument)`
  - `MidiChannel.programChange(int, int)`

- ## Constructor Summary

  Constructors
  Modifier
  Constructor
  Description
  `protected`
  `Instrument(Soundbank soundbank, Patch patch, String name, Class<?> dataClass)`
  Constructs a new MIDI instrument from the specified `Patch`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Patch`
  `getPatch()`
  Obtains the `Patch` object that indicates the bank and program numbers where this instrument is to be stored in the synthesizer.

  ### Methods declared in class SoundbankResource

  `getData, getDataClass, getName, getSoundbank`
  Modifier and Type
  Method
  Description
  `abstract Object`
  `getData()`
  Obtains the sampled audio that is stored in this `SoundbankResource`.
  `Class<?>`
  `getDataClass()`
  Obtains the class used by this sample to represent its data.
  `String`
  `getName()`
  Obtains the name of the resource.
  `Soundbank`
  `getSoundbank()`
  Obtains the sound bank that contains this `SoundbankResource`.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Constructor Details

  - ### Instrument

    protected Instrument(Soundbank soundbank, Patch patch, String name, Class<?> dataClass)
    Constructs a new MIDI instrument from the specified `Patch`. When a subsequent request is made to load the instrument, the sound bank will search its contents for this instrument's `Patch`, and the instrument will be loaded into the synthesizer at the bank and program location indicated by the `Patch` object.
    Parameters:
      `soundbank` - sound bank containing the instrument
      `patch` - the patch of this instrument
      `name` - the name of this instrument
      `dataClass` - the class used to represent the sample's data
    See Also:
      - `Synthesizer.loadInstrument(Instrument)`

- ## Method Details

  - ### getPatch

    public Patch getPatch()
    Obtains the `Patch` object that indicates the bank and program numbers where this instrument is to be stored in the synthesizer.
    Returns:
      this instrument's patch