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 ボリュームを明らかにするフィールドが提供されます。これらはすべて、ボイスを使用していくうちに変化する可能性があります。ボイスがアクティブでない間は、これらのフィールドの値は特定されません。そのため、アクティブなフィールドから先に確認する必要があります。
修飾子と型 | フィールドと説明 |
---|---|
boolean |
active
そのボイスが現在 MIDI ノートを処理しているかどうかを示します。
|
int |
bank
このボイスが現在使用しているインストゥルメントのバンク番号です。
|
int |
channel
このボイスが演奏されている MIDI チャネルです。
|
int |
note
このボイスが演奏している MIDI ノートです。
|
int |
program
このボイスが現在使用しているインストゥルメントのプログラム番号です。
|
int |
volume
このボイスの現在の MIDI ボリュームレベルです。
|
コンストラクタと説明 |
---|
VoiceStatus() |
public boolean active
public int channel
MidiChannel
、active
public int bank
SoundBank
オブジェクトについては参照しません。値の範囲は、このボイスがアクティブな場合は 0 から 16383、ボイスがアクティブでない場合は特定されません。public int program
public int note
public int volume
この値は、そのボイスが生成するサウンドの瞬間的なレベルを必ずしも反映しないことに注意してください。サウンドの瞬間的なレベルは、現在のインストゥルメントやそのインストゥルメントが生成する振幅の包絡線の形状を含めて、さまざまな要因によって決定されます。
active
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.