モジュール java.desktop
パッケージ javax.sound.midi

インタフェースSynthesizer

  • すべてのスーパー・インタフェース:
    AutoCloseable, MidiDevice


    public interface Synthesizer
    extends MidiDevice
    Synthesizerはサウンドを生成します。 これは通常、SynthesizerMidiChannelオブジェクトの1つが直接、またはSynthesizerオブジェクトを介してnoteOnメッセージを受け取った場合に発生します。 多くのSynthesizerでは、MIDIイベントをSynthesizerに配信することのできるReceiversをサポートしています。 このような場合、Synthesizerは通常、対応するメッセージを適切なMidiChannelに送るか、イベントがMIDIチャネル・メッセージでない場合にはそのイベント自身を処理します。

    Synthesizerインタフェースには、インストゥルメントをサウンド・バンクにロードおよびロード解除するためのメソッドが含まれています。 インストゥルメントは、従来の音源をエミュレートしたサウンドや、なんらかのサウンド・エフェクトあるいはその他の想像上のサウンドなど、ある種のサウンドを合成するための仕様です。 サウンド・バンクはインストゥルメントのコレクションで、そのインストゥルメントのPatchオブジェクトによってバンクおよびプログラム番号に基づいて編成されています。 実装されているサウンド合成技術はSynthesizerクラスによって異なる可能性があります。そのため、一部のインストゥルメントのみが特定のシンセサイザとの互換性を持つ場合があります。 また、シンセサイザがインストゥルメントに割り当てるメモリー・サイズには制限がある場合があるため、合成技術が互換のシンセサイザでも、サウンド・バンクやインストゥルメントによっては使用できない可能性があります。 特定のサウンド・バンクに含まれているインストゥルメントが特定のシンセサイザで再生できるかどうかを確認するには、SynthesizerisSoundbankSupportedメソッドを呼び出してください。

    インストゥルメントを「ロードする」とは、ノートを合成するためにそのインストゥルメントを使用可能にすることです。 インストゥルメントは、そのPatchオブジェクトで指定されたバンクおよびプログラムの位置にロードされます。 インストゥルメントをロードしても、次に演奏するノートにそのインストゥルメントのサウンドがただちに反映されるわけではありません。 ノートを演奏するインストゥルメントのバンク番号およびプログラム番号を選択するプログラム・チェンジ・メッセージを、シンセサイザのMidiChannelオブジェクトの1つが受け取る(またはすでに受け取っている)必要があります。

    関連項目:
    MidiSystem.getSynthesizer()SoundbankInstrumentMidiChannel.programChange(int, int)ReceiverTransmitterMidiDevice
    • メソッドの詳細

      • getMaxPolyphony

        int getMaxPolyphony​()
        このシンセサイザが同時に出力できるノートの最大数を取得します。
        戻り値:
        同時に出力できるノートの最大数
        関連項目:
        getVoiceStatus()
      • getLatency

        long getLatency​()
        このシンセサイザでの処理応答時間をマイクロ秒単位で取得します。 この応答時間は、MIDIメッセージがシンセサイザに配信されてから、対応する結果がそのシンセサイザで実際に生成されるまでの、最大遅延時間を測定したものです。

        この応答時間はマイクロ秒単位で表されますが、シンセサイザの遅延時間の実測値は、この判定が示す範囲よりも大幅にばらつく場合があります。 たとえば、シンセサイザによっては最大遅延時間が数ミリ秒を超えることもあります。

        戻り値:
        マイクロ秒単位での最大遅延時間
      • getChannels

        MidiChannel[] getChannels​()
        このシンセサイザで制御されるMIDIチャネルのセットを取得します。 返された配列のnullでない各要素は、そのチャネル番号に送られたMIDIメッセージを受け取るMidiChannelです。

        MIDI 1.0仕様では16のチャネルが規定されているため、このメソッドは少なくとも16の要素を持つ配列を返します。 ただし、このシンセサイザで16チャネルのうちのいくつかが使用されていない場合は、配列の要素の一部がnullとなることがあります。そのため、シンセサイザを使用する前には各要素を確認してください。

        戻り値:
        このSynthesizerで管理されるMidiChannelオブジェクトの配列。 配列要素にはnullが含まれる可能性がある。
      • getVoiceStatus

        VoiceStatus[] getVoiceStatus​()
        このシンセサイザによって生成されるボイスの現在の状態を取得します。 Synthesizerのこのクラスがボイス情報を提供しない場合、返される配列の長さは必ず0になります。 それ以外の場合、その長さは必ず、getMaxPolyphony()から返されるボイスの合計数に等しくなります。 (シンセサイザ・ボイスの説明については、VoiceStatusクラスの説明を参照。)
        戻り値:
        対応するシンセサイザ・ボイスに関する情報を提供するVoiceStatusオブジェクトの配列
        関連項目:
        getMaxPolyphony()VoiceStatus
      • loadInstrument

        boolean loadInstrument​(Instrument instrument)
        特定のインストゥルメントを合成に使用できるようにします。 このインストゥルメントはそのPatchオブジェクトで指定されたパッチ位置にロードされるため、プログラム・チェンジ・メッセージが受け取られる(またはすでに受け取られている)と、そのパッチが選択され、それ以後のノートはinstrumentのサウンドで演奏されます。 指定したインストゥルメントがすでにロードされている場合には、このメソッドは何も実行しないでtrueを返します。

        インストゥルメントは、このSynthesizerでサポートされるサウンド・バンクに含まれていなければいけません。 (確認するには、InstrumentgetSoundbankメソッドとSynthesizerisSoundbankSupportedメソッドを使用)。

        パラメータ:
        instrument - ロードするインストゥルメント
        戻り値:
        インストゥルメントが正常にロードされた(またはすでにロードされている)場合はtrue、インストゥルメントがロードできなかった場合(たとえばシンセサイザのメモリー不足でロードできなかった場合)はfalse
        例外:
        IllegalArgumentException - 指定したインストゥルメントのサウンド・バンクがこのSynthesizerでサポートされない場合
        関連項目:
        unloadInstrument(javax.sound.midi.Instrument), loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[]), loadAllInstruments(javax.sound.midi.Soundbank), remapInstrument(javax.sound.midi.Instrument, javax.sound.midi.Instrument), SoundbankResource.getSoundbank(), MidiChannel.programChange(int, int)
      • getDefaultSoundbank

        Soundbank getDefaultSoundbank​()
        シンセサイザにデフォルトのサウンド・バンクがある場合は、そのサウンド・バンクを取得します。 (一部のシンセサイザにはデフォルトまたは組込みのサウンド・バンクがある)。 シンセサイザにデフォルトのサウンド・バンクがない場合には、インストゥルメントを外部のサウンド・バンクから明示的にロードする必要があります。
        戻り値:
        デフォルトのサウンド・バンク。デフォルトのサウンド・バンクがない場合はnull
        関連項目:
        isSoundbankSupported(javax.sound.midi.Soundbank)
      • getAvailableInstruments

        Instrument[] getAvailableInstruments​()
        シンセサイザに付属するインストゥルメントのリストを取得します。 このようなインストゥルメントは、シンセサイザに組み込まれていたり、シンセサイザに付属のデフォルトのサウンド・バンクに含まれていたりする場合があります。

        このメソッドは、シンセサイザに現在ロードされているインストゥルメントを検索するためには使用できないことに注意してください。そのような目的には、getLoadedInstruments()を使用します。 またこのメソッドでは、シンセサイザにロードできるすべてのインストゥルメントを示すこともできません。このメソッドで示されるのは、シンセサイザに付属するインストゥルメントのサブセットのみです。 他のインストゥルメントをロードできるかどうかを調べるにはisSoundbankSupported()を呼び出します。そのインストゥルメントのSoundbankがサポートされていれば、そのインストゥルメントをロードしてみることができます。

        戻り値:
        使用できるインストゥルメントのリスト。 シンセサイザにインストゥルメントが付属していない場合、長さ0の配列が返されます。
        関連項目:
        getLoadedInstruments(), isSoundbankSupported(Soundbank), loadInstrument(javax.sound.midi.Instrument)
      • loadInstruments

        boolean loadInstruments​(Soundbank soundbank,
                                Patch[] patchList)
        指定したパッチによって参照されるインストゥルメントを、指定したSoundbankからロードします。 それぞれのPatchオブジェクトは、バンクおよびプログラム番号を示します。一致するPatchを持つInstrumentが、そのバンクおよびプログラムの位置にロードされます。
        パラメータ:
        soundbank - ロードするインストゥルメントを含んでいるSoundbank
        patchList - それに対応するインストゥルメントがロードされるパッチのリスト
        戻り値:
        すべてのインストゥルメントが正常にロードされた(またはすでにロードされている)場合はtrue、ロードされなかったインストゥルメントがある場合(たとえばSynthesizerのメモリーが不足していたとき)はfalse
        例外:
        IllegalArgumentException - そのサウンド・バンクがサポートされていない場合にスローされる
        関連項目:
        isSoundbankSupported(javax.sound.midi.Soundbank), Instrument.getPatch(), loadAllInstruments(javax.sound.midi.Soundbank), loadInstrument(javax.sound.midi.Instrument), Soundbank.getInstrument(Patch), Sequence.getPatchList()