JavaTM 2 Platform
Standard Ed. 5.0

javax.sound.midi
インタフェース MidiChannel


public interface MidiChannel

MidiChannel オブジェクトは単一の MIDI チャネルを表します。通常、各 MidiChannel メソッドは、MIDI 仕様で定義された「チャネル音声」、「チャネルモード」などの MIDI のメッセージを処理します。ただし、MidiChannel には、標準 MIDI チャネルメッセージの 1 つによってもっとも最近設定された値を検索する get メソッドもあります。同様に、チャネル別ソロメソッドおよびミュートメソッドも追加されています。

Synthesizer オブジェクトには MidiChannel のコレクションがあり、通常は MIDI 1.0 仕様によって 16 チャンネルのそれぞれに 1 つずつ規定されています。Synthesizer は、MidiChannelnoteOn メッセージを受信した場合にサウンドを生成します。

MIDI チャネルメッセージの規定動作については、ここでは詳しく述べませんので、「MIDI 1.0 Specification」を参照してください。仕様は『MIDI Reference: The Complete MIDI 1.0 Detailed Specification』というタイトルで、MIDI Manufacturer's Association ( http://www.midi.org) から発行されています。

MIDI はもともとキーボードミュージシャンの動きを伝えるプロトコルでした。その原形は MidiChannel API に見ることができます。API にはキー番号、キーベロシティ、キー圧力などの MIDI の概念が保持されています。MIDI データは必ずしもキーボード奏者によって作られる必要はない、ということを理解しておく必要があります (転送元は他の楽器のミュージシャンでもソフトウェアでも可)。ノートがどのように作られたかにかかわらず、ベロシティと圧力に一定の値を生成するデバイスもあります。また、MIDI 仕様では、実装側に適した方法でシンセサイザがデータを使用できるようになっている部分も多くあります。たとえば、ベロシティデータをボリュームまたは明るさ、あるいはその両方に常にマップする必要はありません。

関連項目:
Synthesizer.getChannels()

メソッドの概要
 void allNotesOff()
          このチャネルで現在出力中のノートをすべてオフにします。
 void allSoundOff()
          このチャネルで出力中のノートをすべて、すぐにオフにします。
 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)
          このチャネルのソロ状態を設定します。
 

メソッドの詳細

noteOn

void noteOn(int noteNumber,
            int velocity)
指定されたノートの音を出し始めます。キーダウン速度は通常、そのノートのボリュームまたは明るさ、あるいはその両方を制御します。velocity がゼロの場合、このメソッドは noteOff(int) のような働きをして、ノートを停止させます。

パラメータ:
noteNumber - MIDI ノートナンバー、0 から 127 まで (60 = 中央の C 音)
velocity - キーを押す速度
関連項目:
noteOff(int, int)

noteOff

void noteOff(int noteNumber,
             int velocity)
指定されたノートの音をオフにします。キーアップベロシティを無視しない場合は、キーアップベロシティを使用して、ノートの減衰に影響を与えることができます。いずれにしても、ノートは瞬時に消えるわけではありません。ノートの減衰速度は Instrument の内部によって決まります。ホールドペダル (コントローラ、controlChange を参照) を押している場合は、このメソッドの効果はペダルを離すまで保留されます。

パラメータ:
noteNumber - MIDI ノートナンバー、0 から 127 まで (60 = 中央の C 音)
velocity - キーを離す速度
関連項目:
noteOff(int), noteOn(int, int), allNotesOff(), allSoundOff()

noteOff

void noteOff(int noteNumber)
指定されたノートの音をオフにします。

パラメータ:
noteNumber - MIDI ノートナンバー、0 から 127 まで (60 = 中央の C 音)
関連項目:
noteOff(int, int)

setPolyPressure

void setPolyPressure(int noteNumber,
                     int pressure)
指定された音のキー圧力に反応します。ポリフォニックキー圧力によって、キーボード奏者は複数のキーを、それぞれ違う圧力で同時に押すことができます。圧力を無視しない場合、通常は圧力を使用してそのノートのボリューム、明るさ、ビブラートなどの特徴を変化させます。 配下のシンセサイザがこの MIDI メッセージをサポートしない場合もあります。setPolyPressure が成功したかどうかを検証するには、getPolyPressure を使用します。

パラメータ:
noteNumber - MIDI ノートナンバー、0 から 127 まで (60 = 中央の C 音)
pressure - 指定されたキーの値、0 から 127 まで (127 = 最大圧力)
関連項目:
getPolyPressure(int)

getPolyPressure

int getPolyPressure(int noteNumber)
指定されたキーを押している圧力を取得します。

パラメータ:
noteNumber - MIDI ノートナンバー、0 から 127 まで (60 = 中央の C 音) デバイスがポリフォニック圧力の設定をサポートしない場合、このメソッドは常に 0 を返します。setPolyPressure を呼び出しても何の効果もありません。
戻り値:
その音に対する圧力、0 から 127 まで (127 = 最大圧力)
関連項目:
setPolyPressure(int, int)

setChannelPressure

void setChannelPressure(int pressure)
キーボード圧力の変化に反応します。チャネル圧力は、キーボード奏者がキーボード全体をどれだけ強く押しているかを示します。これは、setPolyPressure の設定によって、キー別圧力センサーの最大値または平均値になります。もう少し一般的に言うと、チャネル圧力は、ポリフォニックキー圧力を実装していないデバイスの単一のセンサーの測定値です。setPolyPressure で述べているように、圧力を使用してサウンドのさまざまな面を制御できます。 配下のシンセサイザがこの MIDI メッセージをサポートしない場合もあります。setChannelPressure が成功したかどうかを検証するには、getChannelPressure を使用します。

パラメータ:
pressure - キーボードを押している圧力、0 から 127 まで (127 = 最大圧力)
関連項目:
setPolyPressure(int, int), getChannelPressure()

getChannelPressure

int getChannelPressure()
チャネルのキーボード圧力を取得します。デバイスがチャネル圧力の設定をサポートしない場合、このメソッドは常に 0 を返します。setChannelPressure を呼び出しても何の効果もありません。

戻り値:
その音に対する圧力、0 から 127 まで (127 = 最大圧力)
関連項目:
setChannelPressure(int)

controlChange

void controlChange(int controller,
                   int value)
指定されたコントローラの値の変化に反応します。コントローラはキーボードのキー以外の制御装置で、スイッチ、スライダ、ペダル、ダイヤル、息圧力センサーなどです。MIDI 1.0 仕様は、MIDI デバイスの一般的なコントローラに標準番号を与え、コントローラのいくつかについて目的を説明しています。コントローラの変化に対する 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)

getController

int getController(int controller)
指定のコントローラの現在の値を取得します。戻り値は 7 ビットで表現されます。14 ビットコントローラの場合、MSB コントローラ値と LSB コントローラ値を別々に取得する必要があります。たとえば、ボリュームコントローラの 14 ビット値を求めるには、コントローラ 7 (0x07、チャネルボリューム MSB) の値と 128 を掛け合わせ、コントローラ 39 (0x27、チャネルボリューム LSB) の値を足します。 デバイスが特定のコントローラの設定をサポートしない場合、このメソッドはこのコントローラに対して 0 を返します。controlChange を呼び出しても何の効果もありません。

パラメータ:
controller - 望ましい値のコントローラ番号。可能範囲は 0 〜 127、解釈については MIDI 1.0 仕様参照
戻り値:
指定されたコントローラの現在の値 (0 〜 127)
関連項目:
controlChange(int, int)

programChange

void programChange(int program)
プログラム (パッチ) を変更します。これによって、現在選択されている計測のバンクから特定の計測が選択されます。

MIDI 仕様は、すでに聞こえている音を新しい計測 (音色) に切り替えるか、あるいはノートオフによって終了させるまで元の音色を続けるかについては、規定していません。

プログラム番号はゼロから始まります (0 〜 127 で表される)。MIDI ハードウェアディスプレイおよび MIDI に関する文書には、通常 0 〜 127 ではなく 1 〜 128 までの番号が使われます。 配下のシンセサイザが特定のプログラムをサポートしない場合もあります。programChange 呼び出しに成功したかどうかを検証するには、getProgram を使用します。

パラメータ:
program - 切り替えるプログラム番号 (0 〜 127)
関連項目:
programChange(int, int), getProgram()

programChange

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

getProgram

int getProgram()
このチャネルの現在のプログラム番号を取得します。

戻り値:
現在選択されているパッチのプログラム番号
関連項目:
Patch.getProgram(), Synthesizer.loadInstrument(javax.sound.midi.Instrument), programChange(int)

setPitchBend

void setPitchBend(int bend)
このチャネルのすべてのノートのピッチ座標を変更します。これは現在出力中のノートすべてと後続のノートに影響します。ピッチのベンドをなくすには、値を中央の位置にリセットする必要があります。

MIDI 仕様ではピッチベンドを 14 ビット値に規定し、ゼロが最大下方歪み、16383 が最大上方歪み、8192 が中央 (ピッチベンドなし) であると規定しています。ピッチ変更の実際の値は指定されていません。ピッチは、ピッチベンドの感度設定によって変更できます。ただし、一般的な MIDI 仕様では、デフォルト範囲は中央から上下 2 半音とされています。 配下のシンセサイザがこの MIDI メッセージをサポートしない場合もあります。setPitchBend が正常に実行されたかどうかを検証するには、getPitchBend を使用します。

パラメータ:
bend - ピッチ変更量、マイナスでない 14 ビットの値 (8192 = 歪みなし)
関連項目:
getPitchBend()

getPitchBend

int getPitchBend()
このチャネルの情報または下方ピッチオフセットを取得します。デバイスがピッチベンドの設定をサポートしない場合、このメソッドは常に 8192 を返します。setPitchBend を呼び出しても何の効果もありません。

戻り値:
歪み量、マイナスでない 14 ビットの値 (8192 = 歪みなし)
関連項目:
setPitchBend(int)

resetAllControllers

void resetAllControllers()
全実装コントローラをデフォルト値にリセットします。

関連項目:
controlChange(int, int)

allNotesOff

void allNotesOff()
このチャネルで現在出力中のノートをすべてオフにします。ノートは瞬時に消えるわけではありません。ノートの減衰速度は Instrument の内部によって決まります。ホールドペダルコントローラ (controlChange を参照) を押している場合は、このメソッドの効果はペダルを離すまで保留されます。

関連項目:
allSoundOff(), noteOff(int)

allSoundOff

void allSoundOff()
このチャネルで出力中のノートをすべて、すぐにオフにします。ホールドペダルおよび現在の Instrument の内部減衰速度は無視します。

関連項目:
allNotesOff()

localControl

boolean localControl(boolean on)
ローカル制御をオンまたはオフにします。ローカル制御のデフォルトはオンです。「オン」に設定されていると、デバイスがサウンドの合成および MIDI メッセージの転送もできる場合、デバイスがノートオンおよびノートオフメッセージに応答してサウンドを合成し、デバイス自体が転送します。「オフ」に設定されると、シンセサイザはシンセサイザ自体の転送された MIDI メッセージは無視するが他のデバイスから受信したメッセージは無視しません。 配下のシンセサイザがローカル制御をサポートしない場合もあります。localControl 呼び出しに成功したかどうかを検証するには、戻り値を確認します。

パラメータ:
on - ローカル制御をオンにする場合は true、オフにする場合は false
戻り値:
新しいローカル制御値。ローカル制御がサポートされていない場合は false

setMono

void setMono(boolean on)
モノモードをオンまたはオフにします。モノモードでは、チャネルは一度に 1 つのノートだけを合成します。多重モード (モノモードオフと同じ) では、チャネルは同時に複数のノートを合成できます。デフォルトはモノオフ (多重モードオン) です。

「モノ」は、「モノフォニック (単声の)」という単語の省略形で、このコンテキストでは「ポリフォニック (多声の)」という単語の反対を意味し、MIDI チャネル別の単一のシンセサイザ音を指します。どれだけ多くのオーディオチャネルがあるかということとは関係ありません (「モノフォニック」対「ステレオフォニック」の録音の場合と同じ)。 配下のシンセサイザがモノモードをサポートしない場合もあります。setMono 呼び出しに成功したかどうかを検証するには、getMono を使用します。

パラメータ:
on - モノモードをオンにする場合は true、オフ (つまり多重モードをオン) にする場合は false
関連項目:
getMono(), VoiceStatus

getMono

boolean getMono()
現在のモノモードまたはポリモードを取得します。モノモードとポリモードの切り替えを許可しないシンセサイザは、setMono 呼び出しを考慮せず、常に同じ値を返します。

戻り値:
モノモードがオンの場合は true、そうでない場合は false (つまり多重モードがオン)
関連項目:
setMono(boolean)

setOmni

void setOmni(boolean on)
オムニモードをオンまたはオフにします。オムニモードでは、チャネルは全チャネルに送信されたメッセージに応答します。オムニがオフの場合は、チャネルはそのチャネル番号に送信されたメッセージにだけ応答します。デフォルトはオムニオフです。 配下のシンセサイザがオムニモードをサポートしない場合もあります。setOmni が正常に実行されたかどうかを検証するには、getOmni を使用します。

パラメータ:
on - オムニモードをオンにする場合は true、オフにする場合は false
関連項目:
getOmni(), VoiceStatus

getOmni

boolean getOmni()
現在のオムニモードを取得します。オムニモードの切り替えを許可しないシンセサイザは、setOmni 呼び出しを考慮せず、常に同じ値を返します。

戻り値:
オムニモードがオンの場合は true、そうでない場合は false (つまりオムニモードがオフ)
関連項目:
setOmni(boolean)

setMute

void setMute(boolean mute)
このチャネルのミュート状態を設定します。true の値は、そのチャネルの音が消されていることを意味し、false はそのチャネルで音が出力されることを意味します (ほかのチャネルがソロになっていない場合)。

allSoundOff() と違って、このメソッドは特定のチャネルだけに適用され、全チャネルには適用されません。また、このメソッドは現在出力されているノートだけでなく、そのあと受信されるノートも無音にします。 配下のシンセサイザがチャネルミュートをサポートしない場合もあります。setMute 呼び出しに成功したかどうかを検証するには、getMute を使用します。

パラメータ:
mute - 新しいミュート状態
関連項目:
getMute(), setSolo(boolean)

getMute

boolean getMute()
このチャネルの現在のミュート状態を取得します。配下のシンセサイザがこのチャネルのミュートをサポートしない場合、このメソッドは常に false を返します。

戻り値:
チャネルの音が消されている場合は true、そうでない場合は false
関連項目:
setMute(boolean)

setSolo

void setSolo(boolean soloState)
このチャネルのソロ状態を設定します。solotrue の場合は、このチャネルおよびほかのソロになっているほかのチャネルの音だけが聞こえます。solofalse の場合は、ほかのソロになっているチャネルの音だけが聞こえますが、ソロになっているチャネルがないときはミュートになっていないチャネルの音がすべて聞こえます。 配下のシンセサイザがソロチャネルをサポートしない場合もあります。setSolo 呼び出しに成功したかどうかを検証するには、getSolo を使用します。

パラメータ:
soloState - チャネルの新しいソロ状態
関連項目:
getSolo()

getSolo

boolean getSolo()
このチャネルの現在のソロ状態を取得します。配下のシンセサイザでこのチャネルをソロにできない場合、このメソッドは常に false を返します。

戻り値:
チャネルがソロの場合は true、そうでない場合は false
関連項目:
setSolo(boolean)

JavaTM 2 Platform
Standard Ed. 5.0

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

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