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

クラスVoiceStatus

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音量を示すフィールドが提供されます。 これらはすべて、ボイスの進行中に変化する可能性があります。 ボイスが非アクティブの間は、これらのフィールドの値は未指定です。そのため、アクティブなフィールドから先に確認する必要があります。

関連項目: