- java.lang.Object
-
- javax.sound.midi.VoiceStatus
-
public class VoiceStatus extends Object
VoiceStatus
オブジェクトには、Synthesizer
で生成されるボイスのうちの1つについて、現在の状態に関する情報が含まれます。一般にMIDIシンセサイザは、最大数までのノートを同時に再生できます。これらのノートはボイスとも呼ばれます。 ボイスは連続した単一ノートのストリームで、受信されるMIDIノートを特定のボイスにアサインする処理はボイス・アロケーションと呼ばれます。 ただし、ボイス・アロケーション・アルゴリズムや各ボイスの内容は、通常はMIDIシンセサイザ内部にあり、外から見ることはできません。 もちろん、シンセサイザが演奏しているノートをMIDIメッセージで調べ、ボイスとノートのアサインメントについて推測することもできます。 しかしMIDI自身には、シンセサイザによってどのノートがどのボイスにアサインされたか、およびシンセサイザで合成できるボイス数をレポートする手段はありません。
それに対してJava Soundの場合、
Synthesizer
クラスはそのgetVoiceStatus()
メソッドによってボイスの内容を明らかにできます。 この動作は推奨されていますが、必須ではないため、ボイス・アロケーションを公開しないシンセサイザは長さ0の配列だけを返します。 ボイスの状態をレポートするSynthesizer
では、そのボイスが現在出力されているかどうかに関係なく、常にすべてのボイスについてボイス・アロケーション情報を維持しています。 言い換えると、特定のタイプのSynthesizer
は必ず、同時に出力できるノートの最大数に等しい固定した数のボイスを備えています。音声が現在MIDIノートを処理していない場合は、非アクティブと見なされます。 ボイスは、ノートオン・コマンドを与えられていないか、あるいは受信したすべてのノートオン・コマンドがそれに対応するノート・オフ・コマンド(またはオール・ノート・オフメッセージ)によって終了された場合にアクティブでなくなります。 これはたとえば、16までのノートを同時に再生できるシンセサイザが4音からなる和音を再生するように指示された場合に起こります。つまり、この場合にアクティブなのは4つのボイスのみです(それより前のノートがまだ再生されていることはないと想定)。 通常、そのステータスがアクティブとレポートされたボイスは聞こえるサウンドを生成していますが、そうでない場合もあります。これはインストゥルメントの詳細(つまり合成アルゴリズム)と、そのノートの持続時間によって決まります。 たとえば、あるボイスが単一のハンド・クラップ・サウンドを合成しているとします。 このサウンドは非常に速く減衰するため、ノート・オフ・メッセージが受信される前に聞こえなくなってしまう可能性があります。 このような状況では、現在サウンドが生成されていない場合でも、このボイスはアクティブと見なされます。
VoiceStatus
クラスでは、アクティブまたは非アクティブ・ステータスの他に、そのボイスの現在のMIDIチャネル、バンクおよびプログラム番号、MIDIノート番号、およびMIDI音量を示すフィールドが提供されます。 これらはすべて、ボイスの進行中に変化する可能性があります。 ボイスが非アクティブの間は、これらのフィールドの値は未指定です。そのため、アクティブなフィールドから先に確認する必要があります。
-
-
フィールドの詳細
-
active
public boolean active
そのボイスが現在MIDIノートを処理しているかどうかを示します。 アクティブおよびアクティブでないボイスの説明を参照してください。
-
channel
public int channel
このボイスが演奏されているMIDIチャネルです。 この値は、そのボイスがアクティブな場合は0から始まるチャネル番号、アクティブでない場合は特定されません。- 関連項目:
MidiChannel
、active
-
bank
public int bank
このボイスが現在使用しているインストゥルメントのバンク番号です。 これはMIDIバンク選択メッセージによって指定された番号で、SoundBank
オブジェクトについては参照しません。 値の範囲は、このボイスがアクティブな場合は0から16383、ボイスがアクティブでない場合は特定されません。
-
program
public int program
このボイスが現在使用しているインストゥルメントのプログラム番号です。 値の範囲は、このボイスがアクティブな場合は0から127、ボイスがアクティブでない場合は特定されません。
-
note
public int note
このボイスが演奏しているMIDIノートです。 アクティブなボイスに対する値の範囲は、中央のC音を60として0から127です。 ボイスがアクティブでない場合、値は特定されません。
-
volume
public int volume
このボイスの現在のMIDIボリューム・レベルです。 値の範囲は、このボイスがアクティブな場合は0から127、ボイスがアクティブでない場合は特定されません。この値は、そのボイスが生成するサウンドの瞬間的なレベルを必ずしも反映しないことに注意してください。サウンドの瞬間的なレベルは、現在のインストゥルメントやそのインストゥルメントが生成する振幅の包絡線の形状を含めて、さまざまな要因によって決定されます。
- 関連項目:
active
-
-