モジュール java.desktop
パッケージ 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​()  
    • フィールドの詳細

      • 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​()