チュートリアル16 :
MIDI InとOutについての詳細

イントロダクション

noteinnoteout の他にも多くの MIDI オブジェクトがあります。これらのオブジェクトは任意の種類のMIDI メッセージを送受信するために存在します。 この章では、これらのオブジェクトのうち、ピッチベンド・メッセージのための bendinbendout 、プログラムチェンジ・メッセージのための pgminpgmout 、コンティニュアスコントローラー・メッセージのための ctlinctlout を紹介します。

noteinnoteout のように、これらの他のオブジェクトには、操作の対象となるポートと MIDI チャンネルを指定するために、オプションのアーギュメントを与えることができます。MIDI 受信オブジェクトのアーギュメントとしてチャンネルナンバーを指定すると、チャンネルナンバーを送信するためのアウトレットは表示されなくなります。

bendin と bendout

bendin は MIDI キーボードのピッチベンドホイールからのデータを受信します。チャンネルは右アウトレットから、ピッチベンドデータ(ピッチベンド量)は左アウトレットから送信されます。ピッチベンドデータの範囲は 0 から 127 で、64 がベンドされていない状態を表します。

最初のパッチは、MIDI データに違った意味を与えることが簡単にできるということを示しています。 この場合、 シンセサイザで演奏された音のベロシティは bendout に送信され、ピッチベンドをコントロールします。

・シンセサイザで1つの音を繰り返し弾いて下さい。鍵を強く弾いた場合(ベロシティが 64よりも大きい場合)ピッチは高い方にベンドし、静かに弾くと低い方にベンドします。

ノートオフ・メッセージを取り除いている sel の使用法に注目して下さい。ノートオフ・メッセージが取り除かれない場合、鍵盤がリリースされる毎にピッチベンドは0になってしまうでしょう。場合によっては、厄介なことになるかもしれません。(一方で、 ノートオフによってピッチベンドをトリガする方法は面白い効果を生むかもしれません)

pgmin と pgmout

MIDI プログラムチェンジ・メッセージは、シンセサイザが演奏に使う音色を変更します。 ほとんどすべてのシンセサイザはプログラムチェンジ・メッセージを受信することができ、同様にそれらの多くは送信することができます。

異なったシンセサイザは異なったサウンドナンバーを持ち、異なったナンバリング方式を持っています。 一部のシンセサイザのナンバリングは 0 から始まりますが、他のものは 1 から始まります。中には、文字と数字の組み合わせによる、擬似 8 進数のような独自のナンバリングシステムを使用するシンセサイザもあります。

・2番目のパッチの dial をクリックして、プログラムチェンジメッセージをシンセサイザに送信して下さい。

dial1 から 32 までの 数値 を送信します。これがあなたのシンセサイザにとって適切でない場合、Dial Range と Offset を変えることができます。パッチャーウィンドウ をアンロック状態にして、dial を選択し Object メニューから Get Info... を選んで下さい。

ctlin と ctlout

コントロールチェンジ・メッセージは、極めて重要な3つの項目の情報を持っています。その3つとは、はチャンネル、コントローラーナンバー、コントロールデータです。 データの意味はコントローラナンバーに依存します。例えば、コントローラナンバ ー1 は通常モジュレーションホイールに、コントローラー 7 はボリュームに割り当てられています。

従って、ポートとチャンネルのアーギュメントに加え、ctlinctlout では、アーギュメントとしてコントローラーナンバーを、ポートアーギュメント(もし存在するなら)のすぐ後に指定することができます。 ctlin にアーギュメントとしてコントローラーナンバーが与えられると、コントローラーナンバのアウトレットは表示されなくなります。 アーギュメントとそのデフォルト値についての詳細は、Max リファレンスマニュアルの ctlinctloutを参照して下さい。

コントロールデータの再割り当て

コンティニュアス MIDI コントローラーを使って Max に対して連続した数値を送信することができ、その後、これらの数値をどのようにでも使用することができます。このパッチでは、シンセサイザのモジュレーションホイールからのデータは、ピッチ値としてシンセサイザに送り返すために使われています。

・MIDI キーボードのモジュレーションホイールを動かして、演奏される音を聞いて下さい。

speedlim オブジェクトは通過する数値のスピードを制限します。speedlim は、数値を受信すると、その数値をアウトレットから送信し、その後、他の数値を受信するまで一定の時間(ミリ秒)待機します。数値と数値の送信間隔(ミリ秒)はタイプイン・アーギュメントによって、あるいは右インレットで指定することができます。

チャンネルモード・メッセージ

コントローラーナンバー 122 から 127 は、チャンネルモード・メッセージとして知られる特別な MIDI コマンドのために確保されています。 チャンネルモード・メッセージは、他のコントロール・メッセージと同様、 ctlinctlout で送受信することができます。

最後のパッチは、”All Notes Off (オールノートオフ)” を意味するチャンネルモード・メッセージ( コントローラナンバー 123 、値 0 )を送信するために ctlout を使っている例です。多くのシンセサイザ(すべてではありません)は、このメッセージを認識し、現在鳴っているすべての音をオフにします。Max の中でノートをオフにする場合、flush あるいは poly のようなオブジェクトを使う方がより信頼性は高まります。

このパッチでは、ctlout (及びその他の送信用オブジェクト)が 左インレットでリストとして値を受け取ることが可能であることも示しています。アーギュメントがない場合、ctlout はポート a 、チャンネル1に送信します。

まとめ

ピッチベンド・メッセージは bendinbendout 、プログラムチェンジは pgminpgmout 、コンティニュアスコントロール・メッセージ(およびチャンネルモード・メッセージ)は ctlinctlout で送受信されます。

Maxでは、任意の方法でMIDI データの変更、再割り当てが可能です。

連続した数値の流れは、speedlim を通過させることによって「スローダウン」させることができます。speedlim は数値の到着が早すぎる場合、これを無視します。 これは連続した数値の流れを、通常の、離散的なステップに変換するための良い方法となります。

参照

bendin 入ってくる MIDI ピッチベンド値を出力する。
bendout MIDI ピッチベンド・メッセージを送信する。
ctlin 入ってくる MIDI コントロール値を出力する。
ctlout MIDI コントロール・メッセージを送信する。
pgmin 入ってくる MIDI プログラムチェンジ値を出力する。
pgmout MIDI プログラムチェンジ・メッセージを送信する。
speedlim 通過する数値のスピードを制限する。