JavaTM 2
Platform
Std. Ed. v1.4.0

javax.sound.midi
インタフェース Synthesizer

すべてのスーパーインタフェース:
MidiDevice

public interface Synthesizer
extends MidiDevice

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

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

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

関連項目:
MidiSystem.getSynthesizer(), Soundbank, Instrument, MidiChannel.programChange(int, int), Receiver, Transmitter, MidiDevice

入れ子クラスの概要
 
クラス javax.sound.midi.MidiDevice から継承した入れ子クラス
MidiDevice.Info
 
メソッドの概要
 Instrument[] getAvailableInstruments()
          シンセサイザに付属するインストゥルメントのリストを取得します。
 MidiChannel[] getChannels()
          このシンセサイザで制御される MIDI チャネルのセットを取得します。
 Soundbank getDefaultSoundbank()
          シンセサイザにデフォルトのサウンドバンクがある場合は、そのサウンドバンクを取得します (一部のシンセサイザにはデフォルトまたは組み込みのサウンドバンクがある)。
 long getLatency()
          このシンセサイザでの処理応答時間をマイクロ秒単位で取得します。
 Instrument[] getLoadedInstruments()
          この Synthesizer に現在ロードされているインストゥルメントのリストを取得します。
 int getMaxPolyphony()
          このシンセサイザが同時に出力できるノートの最大数を取得します。
 VoiceStatus[] getVoiceStatus()
          このシンセサイザによって生成されるボイスの現在の状態を取得します。
 boolean isSoundbankSupported(Soundbank soundbank)
          指定したサウンドバンクのインストゥルメントをこのシンセサイザにロードできるかどうかを呼び出し側に通知します。
 boolean loadAllInstruments(Soundbank soundbank)
          指定した Soundbank に含まれているすべてのインストゥルメントを Synthesizer にロードします。
 boolean loadInstrument(Instrument instrument)
          特定のインストゥルメントを合成に使用できるようにします。
 boolean loadInstruments(Soundbank soundbank, Patch[] patchList)
          指定したパッチによって参照されるインストゥルメントを、指定した Soundbank からロードします。
 boolean remapInstrument(Instrument from, Instrument to)
          インストゥルメントを再マッピングします。
 void unloadAllInstruments(Soundbank soundbank)
          指定した Soundbank に含まれるすべてのインストゥルメントをアンロードします。
 void unloadInstrument(Instrument instrument)
          特定のインストゥルメントをアンロードします。
 void unloadInstruments(Soundbank soundbank, Patch[] patchList)
          指定したパッチによって参照されるインストゥルメントを、指定した MIDI サウンドバンクからアンロードします。
 
インタフェース javax.sound.midi.MidiDevice から継承したメソッド
close, getDeviceInfo, getMaxReceivers, getMaxTransmitters, getMicrosecondPosition, getReceiver, getTransmitter, isOpen, open
 

メソッドの詳細

getMaxPolyphony

public int getMaxPolyphony()
このシンセサイザが同時に出力できるノートの最大数を取得します。

戻り値:
同時に出力できるノートの最大数
関連項目:
getVoiceStatus()

getLatency

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

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

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

getChannels

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

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

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

getVoiceStatus

public VoiceStatus[] getVoiceStatus()
このシンセサイザによって生成されるボイスの現在の状態を取得します。Synthesizer のこのクラスからボイス情報を取得できない場合、返される配列の長さはいつでも 0 になります。取得できた場合には、返される配列の長さは getMaxPolyphony() が返すボイスの合計数といつでも等しくなります (シンセサイザボイスの説明は、VoiceStatus クラスの記述を参照)。

戻り値:
対応するシンセサイザボイスに関する情報を提供する VoiceStatus オブジェクトの配列
関連項目:
getMaxPolyphony(), VoiceStatus

isSoundbankSupported

public boolean isSoundbankSupported(Soundbank soundbank)
指定したサウンドバンクのインストゥルメントをこのシンセサイザにロードできるかどうかを呼び出し側に通知します。サウンドバンクがサポートされていない場合、そのサウンドバンクからインストゥルメントをロードしようとすると、IllegalArgumentException が発生します。

パラメータ:
soundbank - サポートの有無について照会するサウンドバンク
戻り値:
サポートされている場合は true、そうでない場合は false
関連項目:
loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[]), loadAllInstruments(javax.sound.midi.Soundbank), unloadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[]), unloadAllInstruments(javax.sound.midi.Soundbank), getDefaultSoundbank()

loadInstrument

public 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)

unloadInstrument

public void unloadInstrument(Instrument instrument)
特定のインストゥルメントをアンロードします。

パラメータ:
instrument - アンロードするインストゥルメント
例外:
IllegalArgumentException - 指定したインストゥルメントのサウンドバンクがこの Synthesizer でサポートされない場合
関連項目:
loadInstrument(javax.sound.midi.Instrument), unloadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[]), unloadAllInstruments(javax.sound.midi.Soundbank), getLoadedInstruments(), remapInstrument(javax.sound.midi.Instrument, javax.sound.midi.Instrument)

remapInstrument

public boolean remapInstrument(Instrument from,
                               Instrument to)
インストゥルメントを再マッピングします。インストゥルメント from がインストゥルメント to で置換されます。たとえば、from がバンク番号 2、プログラム番号 11 にある場合、再マッピングによってインストゥルメント from はアンロードされ、そのバンク番号およびプログラム番号にはかわりに to が割り当てられます。

パラメータ:
from - 置換されるインストゥルメント
to - 元のインストゥルメントのかわりに使用する新しいインストゥルメント
戻り値:
インストゥルメントを再マッピングできた場合は true、そうでない場合は false
例外:
IllegalArgumentException - そのサウンドバンクがサポートされていない場合

getDefaultSoundbank

public Soundbank getDefaultSoundbank()
シンセサイザにデフォルトのサウンドバンクがある場合は、そのサウンドバンクを取得します (一部のシンセサイザにはデフォルトまたは組み込みのサウンドバンクがある)。シンセサイザにデフォルトのサウンドバンクがない場合には、インストゥルメントを外部のサウンドバンクから明示的にロードする必要があります。

戻り値:
デフォルトのサウンドバンク。デフォルトのサウンドバンクがない場合は null
関連項目:
isSoundbankSupported(javax.sound.midi.Soundbank)

getAvailableInstruments

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

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

戻り値:
使用できるインストゥルメントのリスト
関連項目:
getLoadedInstruments(), isSoundbankSupported(Soundbank), loadInstrument(javax.sound.midi.Instrument)

getLoadedInstruments

public Instrument[] getLoadedInstruments()
この Synthesizer に現在ロードされているインストゥルメントのリストを取得します。

戻り値:
現在ロードされているインストゥルメントのリスト
関連項目:
loadInstrument(javax.sound.midi.Instrument), getAvailableInstruments(), Soundbank.getInstruments()

loadAllInstruments

public boolean loadAllInstruments(Soundbank soundbank)
指定した Soundbank に含まれているすべてのインストゥルメントを Synthesizer にロードします。

パラメータ:
soundbank - ロードするインストゥルメントを含んでいる Soundbank
戻り値:
すべてのインストゥルメントが正常にロードされた (またはすでにロードされている) 場合は true、ロードされなかったインストゥルメントがある場合 (たとえば Synthesizer のメモリが不足していたとき) は false
例外:
IllegalArgumentException - 要求したサウンドバンクがこのシンセサイザと互換でない場合
関連項目:
isSoundbankSupported(javax.sound.midi.Soundbank), loadInstrument(javax.sound.midi.Instrument), loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])

unloadAllInstruments

public void unloadAllInstruments(Soundbank soundbank)
指定した Soundbank に含まれるすべてのインストゥルメントをアンロードします。

パラメータ:
soundbank - アンロードするインストゥルメントを含んでいるサウンドバンク
例外:
IllegalArgumentException - そのサウンドバンクがサポートされていない場合にスローされる
関連項目:
isSoundbankSupported(javax.sound.midi.Soundbank), unloadInstrument(javax.sound.midi.Instrument), unloadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])

loadInstruments

public 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()

unloadInstruments

public void unloadInstruments(Soundbank soundbank,
                              Patch[] patchList)
指定したパッチによって参照されるインストゥルメントを、指定した MIDI サウンドバンクからアンロードします。

パラメータ:
soundbank - アンロードするインストゥルメントを含んでいるサウンドバンク
patchList - それに対応するインストゥルメントがアンロードされるパッチのリスト
例外:
IllegalArgumentException - そのサウンドバンクがサポートされていない場合にスローされる
関連項目:
unloadInstrument(javax.sound.midi.Instrument), unloadAllInstruments(javax.sound.midi.Soundbank), isSoundbankSupported(javax.sound.midi.Soundbank), Instrument.getPatch(), loadInstruments(javax.sound.midi.Soundbank, javax.sound.midi.Patch[])

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.