JavaTM 2
Platform
Std. Ed. v1.4.0

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 つのボイスだけです (それ以前に出力された音はすでにすべて止まっていると想定)。通常、その状態がアクティブとレポートされたボイスは聞こえるサウンドを生成していますが、そうでない場合もあります。これはインストゥルメントの詳細 (つまり合成アルゴリズム) と、そのノートの持続時間によって決まります。たとえば、あるボイスで 1 回手をたたく音を合成しているとします。この音は非常に速く減衰するため、ノート・オフメッセージが受信される前に聞こえなくなってしまう可能性があります。このような状況では、現在サウンドが生成されていない場合でも、このボイスはアクティブと見なされます。

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 から始まるチャネル番号、アクティブでない場合は指定されていない値になります。

関連項目:
MidiChannel, active

bank

public int bank
このボイスが現在使用しているインストゥルメントのバンク番号です。これは MIDI バンク選択メッセージによって指定された番号で、SoundBank オブジェクトについては参照しません。値の範囲は、このボイスがアクティブな場合は 0 〜 127、アクティブでない場合は指定されていない値になります。

関連項目:
Patch, Soundbank, active, MidiChannel.programChange(int, int)

program

public int program
このボイスが現在使用しているインストゥルメントのプログラム番号です。値の範囲は、このボイスがアクティブな場合は 0 〜 127、アクティブでない場合は指定されていない値になります。

関連項目:
MidiChannel.getProgram(), Patch, active

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

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.