モジュール java.desktop
パッケージ javax.sound.midi

インタフェースMidiChannel


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

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

MIDIチャネル・メッセージの規定動作については、ここでは詳しく述べませんので、MIDI 1.0仕様を参照してください。 仕様はMIDI Reference: The Complete MIDI 1.0 Detailed Specificationと題され、MIDI製造業者関連付け(http://www.midi.org)によって発行されています。

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

関連項目:
Synthesizer.getChannels()
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    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)
    このチャネルのソロ状態を設定します。
  • メソッドの詳細

    • 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)
      指定されたキーを押している圧力を取得します。

      デバイスがポリ圧力の設定をサポートしていない場合、このメソッドは常に0を返します。 setPolyPressureを呼び出しても何の効果もありません。

      パラメータ:
      noteNumber - MIDIノート・ナンバー、0から127まで(60 =中央のC音)
      戻り値:
      そのノートに対する圧力、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呼出しに成功したかどうかを検証するには、getProgramgetControllerを使用します。 制御の変更によってバンクが変更されている可能性があるので、次のステートメントを使用して現在のバンクを確認します。

         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)