public interface MidiChannel
MidiChannel
オブジェクトは単一の MIDI チャネルを表します。通常、各 MidiChannel
メソッドは、MIDI 仕様で定義された「チャネル音声」、「チャネルモード」などの MIDI のメッセージを処理します。ただし、MidiChannel
には、標準 MIDI チャネルメッセージの 1 つによって最後に設定された値を検索する「get」メソッドもあります。同様に、チャネル別ソロメソッドおよびミュートメソッドも追加されています。
オブジェクトには Synthesizer
MidiChannels
のコレクションがあり、通常は 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
、オフにする場合は false
void setMono(boolean on)
「モノ」は、「モノフォニック (単声の)」という単語の省略形で、このコンテキストでは「ポリフォニック (多声の)」という単語の反対を意味し、MIDI チャネル別の単一のシンセサイザ音を指します。「モノフォニック」録音と「ステレオフォニック」録音の場合のようにオーディオチャネルがいくつあるかは関係ありません。
配下のシンセサイザがモノモードをサポートしない場合もあります。setMono
呼び出しに成功したかどうかを検証するには、getMono
を使用します。
on
- モノモードをオンにする場合は true
、オフ (つまり多重モードをオン) にする場合は false
。getMono()
、VoiceStatus
boolean getMono()
setMono
呼び出しに関係なく、常に同じ値を返します。true
、それ以外は false
(つまり多重モードがオン)。setMono(boolean)
void setOmni(boolean on)
setOmni
が正常に実行されたかどうかを検証するには、getOmni
を使用します。on
- オムニモードをオンにする場合は true
、オフにする場合は false
。getOmni()
、VoiceStatus
boolean getOmni()
setOmni
呼び出しに関係なく、常に同じ値を返します。true
、それ以外は false
(つまりオムニモードがオフ)。setOmni(boolean)
void setMute(boolean mute)
true
の値は、そのチャネルの音が消されることを意味し、false
はそのチャネルで音が出力されることを意味します (ほかのチャネルがソロになっていない場合)。
allSoundOff()
と違って、このメソッドは特定のチャネルだけに適用され、全チャネルには適用されません。また、このメソッドは現在出力されているノートだけでなく、そのあと受信されるノートも無音にします。
配下のシンセサイザがチャネルのミュートをサポートしない場合もあります。setMute
呼び出しに成功したかどうかを検証するには、getMute
を使用します。
mute
- 新しいミュート状態getMute()
, setSolo(boolean)
boolean getMute()
false
を返します。true
、そうでない場合は false
setMute(boolean)
void setSolo(boolean soloState)
solo
が true
の場合は、このチャネルおよびほかのソロになっているチャネルの音だけが聞こえます。solo
が false
の場合は、ほかのソロになっているチャネルの音だけが聞こえますが、ソロになっているチャネルがないときはミュートになっていないチャネルの音がすべて聞こえます。
配下のシンセサイザがソロチャネルをサポートしない場合もあります。setSolo
呼び出しに成功したかどうかを検証するには、getSolo
を使用します。soloState
- チャネルの新しいソロ状態getSolo()
boolean getSolo()
false
を返します。true
、そうでない場合は false
setSolo(boolean)
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.