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

関連項目:
Synthesizer.getMaxPolyphony(), Synthesizer.getVoiceStatus()
  • フィールドのサマリー

    フィールド
    修飾子と型 フィールド 説明
    boolean active
    そのボイスが現在MIDIノートを処理しているかどうかを示します。
    int bank
    このボイスが現在使用しているインストゥルメントのバンク番号です。
    int channel
    このボイスが演奏されているMIDIチャネルです。
    int note
    このボイスが演奏しているMIDIノートです。
    int program
    このボイスが現在使用しているインストゥルメントのプログラム番号です。
    int volume
    このボイスの現在のMIDIボリューム・レベルです。
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ 説明
    VoiceStatus()  
  • メソッドのサマリー

    クラス java.lang.Objectで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • フィールド詳細

    • active

      public boolean active
      そのボイスが現在MIDIノートを処理しているかどうかを示します。 アクティブおよびアクティブでないボイスの説明を参照してください。
    • channel

      public int channel
      このボイスが演奏されているMIDIチャネルです。 この値は、そのボイスがアクティブな場合は0から始まるチャネル番号、アクティブでない場合は特定されません。
      関連項目:
      MidiChannelactive
    • bank

      public int bank
      このボイスが現在使用しているインストゥルメントのバンク番号です。 これはMIDIバンク選択メッセージによって指定された番号で、SoundBankオブジェクトについては参照しません。 値の範囲は、このボイスがアクティブな場合は0から16383、ボイスがアクティブでない場合は特定されません。
      関連項目:
      PatchSoundbankactiveMidiChannel.programChange(int, int)
    • program

      public int program
      このボイスが現在使用しているインストゥルメントのプログラム番号です。 値の範囲は、このボイスがアクティブな場合は0から127、ボイスがアクティブでない場合は特定されません。
      関連項目:
      MidiChannel.getProgram()Patchactive
    • note

      public int note
      このボイスが演奏しているMIDIノートです。 アクティブなボイスに対する値の範囲は、中央のC音を60として0から127です。 ボイスがアクティブでない場合、値は特定されません。
      関連項目:
      MidiChannel.noteOn(int, int), active
    • volume

      public int volume
      このボイスの現在のMIDIボリューム・レベルです。 値の範囲は、このボイスがアクティブな場合は0から127、ボイスがアクティブでない場合は特定されません。

      この値は、そのボイスが生成するサウンドの瞬間的なレベルを必ずしも反映しないことに注意してください。サウンドの瞬間的なレベルは、現在のインストゥルメントやそのインストゥルメントが生成する振幅の包絡線の形状を含めて、さまざまな要因によって決定されます。

      関連項目:
      active
  • コンストラクタの詳細

    • VoiceStatus

      public VoiceStatus()