public interface MidiChannel
MidiChannel オブジェクトは単一の MIDI チャネルを表します。通常、各 MidiChannel メソッドは、MIDI 仕様で定義された「チャネル音声」、「チャネルモード」などの MIDI のメッセージを処理します。ただし、MidiChannel には、標準 MIDI チャネルメッセージの 1 つによって最後に設定された値を検索する「get」メソッドもあります。同様に、チャネル別ソロメソッドおよびミュートメソッドも追加されています。
オブジェクトには SynthesizerMidiChannels のコレクションがあり、通常は MIDI 1.0 仕様によって 16 チャネルのそれぞれに 1 つずつ規定されています。Synthesizer は、MidiChannels が noteOn メッセージを受信した場合にサウンドを生成します。
MIDI チャネルメッセージの規定動作については、ここでは詳しく述べませんので、MIDI 1.0 仕様を参照してください。仕様書は『MIDI Reference: The Complete MIDI 1.0 Detailed Specification』というタイトルで、MIDI Manufacturer's Association (http://www.midi.org) から発行されています。
MIDI はもともとキーボードミュージシャンの動きを伝えるプロトコルでした。その原形は MidiChannel API に見ることができます。API にはキー番号、キーベロシティー、キー圧力などの MIDI の概念が保持されています。MIDI データは必ずしもキーボード奏者によって作られる必要はない、ということを理解しておく必要があります (転送元はほかの楽器のミュージシャンでもソフトウェアでも可)。ノートがどのように作られたかにかかわらず、ベロシティーと圧力に一定の値を生成するデバイスもあります。また、MIDI 仕様では、実装側に適した方法でシンセサイザがデータを使用できるようになっている部分も多くあります。たとえば、ベロシティーデータをボリュームまたは明るさ、あるいはその両方に常にマップする必要はありません。
| 修飾子と型 | メソッドと説明 |
|---|---|
void |
allNotesOff()
このチャネルで現在出力中のノートをすべてオフにします。
|
void |
allSoundOff()
このチャネルで出力中のノートをすべて、すぐにオフにします。ホールドペダルおよび現在の
Instrument の内部減衰速度は無視します。 |
void |
controlChange(int controller, int value)
指定されたコントローラの値の変化に反応します。
|
int |
getChannelPressure()
チャネルのキーボード圧力を取得します。
|
int |
getController(int controller)
指定のコントローラの現在の値を取得します。
|
boolean |
getMono()
現在のモノ/多重モードを取得します。
|
boolean |
getMute()
このチャネルの現在のミュート状態を取得します。
|
boolean |
getOmni()
現在のオムニモードを取得します。
|
int |
getPitchBend()
このチャネルの上方または下方ピッチオフセットを取得します。
|
int |
getPolyPressure(int noteNumber)
指定されたキーを押している圧力を取得します。
|
int |
getProgram()
このチャネルの現在のプログラム番号を取得します。
|
boolean |
getSolo()
このチャネルの現在のソロ状態を取得します。
|
boolean |
localControl(boolean on)
ローカル制御をオンまたはオフにします。
|
void |
noteOff(int noteNumber)
指定されたノートの音をオフにします。
|
void |
noteOff(int noteNumber, int velocity)
指定されたノートの音をオフにします。
|
void |
noteOn(int noteNumber, int velocity)
指定されたノートの音を出し始めます。
|
void |
programChange(int program)
プログラム (パッチ) を変更します。
|
void |
programChange(int bank, int program)
バンク番号およびプログラム (パッチ) 番号を使用してプログラムを変更します。
|
void |
resetAllControllers()
全実装コントローラをデフォルト値にリセットします。
|
void |
setChannelPressure(int pressure)
キーボード圧力の変化に反応します。
|
void |
setMono(boolean on)
モノモードをオンまたはオフにします。
|
void |
setMute(boolean mute)
このチャネルのミュート状態を設定します。
|
void |
setOmni(boolean on)
オムニモードをオンまたはオフにします。
|
void |
setPitchBend(int bend)
このチャネルのすべてのノートのピッチ座標を変更します。
|
void |
setPolyPressure(int noteNumber, int pressure)
指定されたノートのキー圧力の変化に反応します。
|
void |
setSolo(boolean soloState)
このチャネルのソロ状態を設定します。
|
void noteOn(int noteNumber,
int velocity)
velocity がゼロの場合、このメソッドは noteOff(int) のような働きをして、ノートを停止させます。noteNumber - MIDI ノートナンバー、0 から 127 まで (60 = 中央の C 音)velocity - キーを押す速度noteOff(int, int)void noteOff(int noteNumber,
int velocity)
Instrument の内部によって決まります。ホールドペダル (コントローラ、controlChange を参照) を押している場合は、このメソッドの効果はペダルを離すまで保留されます。noteNumber - MIDI ノートナンバー、0 から 127 まで (60 = 中央の C 音)velocity - キーを離す速度noteOff(int), noteOn(int, int), allNotesOff(), allSoundOff()void noteOff(int noteNumber)
noteNumber - MIDI ノートナンバー、0 から 127 まで (60 = 中央の C 音)noteOff(int, int)void setPolyPressure(int noteNumber,
int pressure)
setPolyPressure が正常に実行されたかどうかを検証するには、getPolyPressure を使用します。noteNumber - MIDI ノートナンバー、0 から 127 まで (60 = 中央の C 音)pressure - 指定されたキーの値、0 から 127 まで (127 = 最大圧力)getPolyPressure(int)int getPolyPressure(int noteNumber)
noteNumber - MIDI ノートナンバー、0 から 127 まで (60 = 中央の C 音)
デバイスが多重の圧力の設定をサポートしない場合、このメソッドは常に 0 を返します。setPolyPressure を呼び出しても何の効果もありません。setPolyPressure(int, int)void setChannelPressure(int pressure)
setPolyPressure の設定によって、キー別圧力センサーの最大値または平均値になります。もう少し一般的に言うと、チャネル圧力は、ポリフォニックキー圧力を実装していないデバイスの単一のセンサーの測定値です。setPolyPressure で述べているように、圧力を使用してサウンドのさまざまな面を制御できます。
配下のシンセサイザがこの MIDI メッセージをサポートしない場合もあります。setChannelPressure が正常に実行されたかどうかを検証するには、getChannelPressure を使用します。pressure - キーボードを押している圧力、0 から 127 まで (127 = 最大圧力)setPolyPressure(int, int), getChannelPressure()int getChannelPressure()
setChannelPressure を呼び出しても何の効果もありません。setChannelPressure(int)void controlChange(int controller,
int value)
Instrument の反応の仕方は、その Instrument 特有である場合があります。
MIDI 1.0 仕様は 7 ビットコントローラと 14 ビットコントローラの両方を定義します。ダイヤルやスライダなどの連続型コントローラは 14 ビット (2 MIDI バイト) が標準で、スイッチなどの離散コントローラは 7 ビット (1 MIDI バイト) が標準です。各型の制御の予想解像度を知るには、仕様を参照してください。
コントローラ 64 から 95 (0x40 - 0x5F) では、7 ビットの精度が可能です。7 ビットコントローラの値はすべて、value 引数によって設定されます。コントローラの追加設定によって、14 ビットの精度が可能になります。これにはコントローラ番号を 2 つ使います。1 つは最上位 7 ビット用で、もう 1 つは最下位 7 ビット用です。コントローラ番号 0 から 31 (0x00 - 0x1F) は、14 ビットコントローラの最上位 7 ビットを制御し、コントローラ番号 32 から 63 (0x20 - 0x3F) は、14 ビットコントローラの最下位 7 ビットを制御します。たとえば、コントローラ番号 7 (0x07) はチャネル音量コントローラの上位 7 ビットを制御し、コントローラ番号 39 (0x27) は下位 7 ビットを制御します。14 ビットコントローラの値は、上位 7 ビットと下位 7 ビットの相互作用によって決まります。コントローラの最上位 7 ビットが設定されると (コントローラ番号 0 から 31 を使用)、下位の 7 ビットは自動的に 0 に設定されます。その後、下位 7 ビットに対応するコントローラ番号を使用してさらにコントローラの値が変更されます。
配下のシンセサイザが特定のコントローラメッセージをサポートしない場合もあります。controlChange 呼び出しに成功したかどうかを検証するには、getController を使用します。
controller - コントローラ番号 (0 から 127 まで、解説は MIDI 1.0 仕様を参照)value - 指定されたコントローラが変更される値 (0 から 127 まで)getController(int)int getController(int controller)
controlChange を呼び出しても何の効果もありません。controller - 目的の値のコントローラ番号。可能範囲は 0 から 127、解説は MIDI 1.0 仕様を参照。controlChange(int, int)void programChange(int program)
MIDI 仕様は、すでに聞こえている音を新しいインストゥルメント (音色) に切り替えるか、あるいはノート・オフによって終了させるまでもとの音色を続けるかについては、規定していません。
プログラム番号はゼロから始まります (0 から 127 で表される)。MIDI ハードウェアディスプレイおよび MIDI に関する文書には、通常 0 から 127 ではなく 1 から 128 までの番号が使われます。
配下のシンセサイザが特定のプログラムをサポートしない場合もあります。programChange 呼び出しに成功したかどうかを検証するには、getProgram を使用します。
program - 切り替えるプログラム番号 (0 から 127 まで)programChange(int, int), getProgram()void programChange(int bank,
int program)
programChange 呼び出しに成功したかどうかを検証するには、getProgram と getController を使用します。制御の変更によってバンクが変更されている可能性があるので、次のステートメントを使用して現在のバンクを確認します。
int bank = (getController(0) * 128)
+ getController(32);
bank - 切り替えるバンク番号 (0 から 16383 まで)program - 指定されたバンク (0 から 127 まで) で使用するプログラム (パッチ)programChange(int), getProgram()int getProgram()
Patch.getProgram(), Synthesizer.loadInstrument(javax.sound.midi.Instrument), programChange(int)void setPitchBend(int bend)
MIDI 仕様ではピッチベンドを 14 ビット値に規定し、ゼロが最大下方歪み、16383 が最大上方歪み、8192 が中央 (ピッチベンドなし) であると規定しています。ピッチ変更の実際の値は指定されていません。ピッチは、ピッチベンドの感度設定によって変更できます。ただし、一般的な MIDI 仕様では、デフォルト範囲は中央から上下 2 半音とされています。
配下のシンセサイザがこの MIDI メッセージをサポートしない場合もあります。setPitchBend が正常に実行されたかどうかを検証するには、getPitchBend を使用します。
bend - ピッチ変更量、マイナスでない 14 ビットの値 (8192 = 歪みなし)getPitchBend()int getPitchBend()
setPitchBend を呼び出しても何の効果もありません。setPitchBend(int)void resetAllControllers()
void allNotesOff()
Instrument の内部によって決まります。ホールドペダルコントローラ (controlChange を参照) を押している場合は、このメソッドの効果はペダルを離すまで保留されます。allSoundOff(), noteOff(int)void allSoundOff()
Instrument の内部減衰速度は無視します。allNotesOff()boolean localControl(boolean on)
localControl 呼び出しに成功したかどうかを検証するには、戻り値を確認します。on - ローカル制御をオンにする場合は true、オフにする場合は falsevoid setMono(boolean on)
「モノ」は、「モノフォニック (単声の)」という単語の省略形で、このコンテキストでは「ポリフォニック (多声の)」という単語の反対を意味し、MIDI チャネル別の単一のシンセサイザ音を指します。「モノフォニック」録音と「ステレオフォニック」録音の場合のようにオーディオチャネルがいくつあるかは関係ありません。
配下のシンセサイザがモノモードをサポートしない場合もあります。setMono 呼び出しに成功したかどうかを検証するには、getMono を使用します。
on - モノモードをオンにする場合は true、オフ (つまり多重モードをオン) にする場合は false。getMono()、VoiceStatusboolean getMono()
setMono 呼び出しに関係なく、常に同じ値を返します。true、それ以外は false (つまり多重モードがオン)。setMono(boolean)void setOmni(boolean on)
setOmni が正常に実行されたかどうかを検証するには、getOmni を使用します。on - オムニモードをオンにする場合は true、オフにする場合は false。getOmni()、VoiceStatusboolean getOmni()
setOmni 呼び出しに関係なく、常に同じ値を返します。true、それ以外は false (つまりオムニモードがオフ)。setOmni(boolean)void setMute(boolean mute)
true の値は、そのチャネルの音が消されることを意味し、false はそのチャネルで音が出力されることを意味します (ほかのチャネルがソロになっていない場合)。
allSoundOff() と違って、このメソッドは特定のチャネルだけに適用され、全チャネルには適用されません。また、このメソッドは現在出力されているノートだけでなく、そのあと受信されるノートも無音にします。
配下のシンセサイザがチャネルのミュートをサポートしない場合もあります。setMute 呼び出しに成功したかどうかを検証するには、getMute を使用します。
mute - 新しいミュート状態getMute(), setSolo(boolean)boolean getMute()
false を返します。true、そうでない場合は falsesetMute(boolean)void setSolo(boolean soloState)
solo が true の場合は、このチャネルおよびほかのソロになっているチャネルの音だけが聞こえます。solo が false の場合は、ほかのソロになっているチャネルの音だけが聞こえますが、ソロになっているチャネルがないときはミュートになっていないチャネルの音がすべて聞こえます。
配下のシンセサイザがソロチャネルをサポートしない場合もあります。setSolo 呼び出しに成功したかどうかを検証するには、getSolo を使用します。soloState - チャネルの新しいソロ状態getSolo()boolean getSolo()
false を返します。true、そうでない場合は falsesetSolo(boolean) バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.