JavaTM Platform
Standard Ed. 6

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 〜 16383、アクティブでない場合は指定されていない値になります。

関連項目:
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 Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。