チュートリアル12:
MIDI データの使用

MIDI セットアップの確認

オブジェクトの接続によってどのようにアプリケーションが構成されるかについては、おおよそ理解できたのではないでしょうか。ここからは、パッチの中で MIDI データを扱っていきます。そのため、サンプルプログラムは、より音楽アプリケーションとしての性格をもつようになります。

MIDI 機器が適切に接続されているか確認して下さい。 疑問がある場合には、「Max ファンダメンタルマニュアル」の「セットアップ」というセクションや、チュートリアル 1 の最初のページにある MIDI 機器と接続に関する説明にもう一度目を通してみて下さい。

MIDI オブジェクト

MIDI 機器とのデータ送受信のために多くのオブジェクトがあります。シンセサイザから MIDI メッセージを受信するオブジェクトは、実際にはインレットからデータを受信しているわけではありません。 それらの MIDI 入力は Max オブジェクトからではなく、仮想 MIDIポート(Max ファンダメンタルの「ポート」という章を参照して下さい)から直接に送られてきます。 MIDI メッセージを送信するオブジェクトは、メッセージを Max の外部へ送信するため、アウトレットを持ちません。

最も基本的な MIDI オブジェクトは midiinmidiout です。これらは MIDI メッセージの分析を全く行なわず、「1バイト単位で」生の MIDI データを送受信します。 しかし、一般的には、Max に入力される生のMIDI データをフィルタにかけ、必要とする情報のみを出力するような、より専門的な MIDI オブジェクトを使うことになるでしょう。

例えば、 notein オブジェクトは MIDI ノートメッセージだけを検出します。ノートメッセージが到着すると notein はキー・ナンバー、ベロシティ、チャンネル・ナンバーを出力します。同様に bendin オブジェクトは到着したピッチベンド・メッセージだけを検出し、ピッチベンド量とチャンネル・ナンバーを出力します。

notein および noteoutオブジェクト

しばらくの間、私たちはMIDI ノート・データ(シンセサイザで演奏されたノートに関する情報の受信と、シンセサイザ上でノートを演奏するためのメッセージの送信)のみに関心を注ぐことにします。

・シンセサイザでいくつかのノートを演奏して下さい。 ナンバーボックス オブジェクトでノート・データを見ることができるはずです。

何も起こらない場合は、接続を再チェックして下さい。

このチュートリアルの目的を達成するためには、MIDI インタフェースがコンピュータに接続されていなければなりません。まだ MIDI の設定を行なっていない場合には、MIDI Setup ダイアログを使って、ポート a を チャンネルオフセット 0 にして、このチュートリアルで使用するデバイスの入力と出力に割り当てて下さい。

notein の文字アーギュメントは MIDI ノート・メッセージを受信するポートを示しています。 アーギュメントがない場合には、すべてのポートから受信します。

・いくつかノートを演奏して、しばらくの間、鍵盤を押し続けてから放して下さい。 1つ1つのノートに対し、鍵盤を押したとき、放したときの両方でメッセージが送信されるのがわかります。ベロシティ 0の ノート・メッセージはノートオフを表しています。

左のパッチはオクターブ間隔で演奏するためのものです。 シンセサイザで演奏するすべてのノートが notein オブジェクトで受信されます。 ピッチ情報は、ピッチ値に12 を加算する + オブジェクトに送信されます。 これによって、当然ピッチは12半音(1オクターブ)高くなります。ナンバーボックスを追加して、ピッチの値を、数値と MIDI 音名の両方で見ることができるようにしています。

ベロシティとチャンネル情報はそのまま渡され、noteout オブジェクトでトランスポーズされたピッチ情報と再び結合されます。 演奏したものよりも1オクターブ高く、同じベロシティを持つ新しいノート情報は、 noteout によってシンセサイザに送り返されます。

メッセージ・オーダー

ピッチ、ベロシティ、チャンネル情報は同時に notein から出力されるように見えますが、数値は他のオブジェクトの場合と同様に右から左への順序(チャンネル、ベロシティ、ピッチの順)で出力されます。

ほとんどのオブジェクトと同様、 noteout は左インレットで受信したメッセージ(ピッチ・ナンバー)によってトリガされます。ピッチは 他のインレットでいちばん新しく受信したベロシティ、チャンネル値と結合させられ MIDI メッセージとしてシンセサイザに送信されます。

メッセージ・オーダーのこの一貫性(アウトレットは常に右から左へと送信し、オブジェクトは左インレットによってトリガされます)により、noteinnoteout のような異なったオブジェクトどうしでも、容易に通信を行なうことができます。それは、ピッチの前にベロシティとチャンネル・ナンバーが notein から出力され、ピッチの前にそれらが noteout に到達するので、すべてのデータが正しく同期されるからです。

受信チャンネルの指定

アーギュメントを持たない、あるいはただ文字だけのアーギュメントを持つ notein オブジェクトは、すべてのチャンネルに入力されるノート・メッセージを受信します。(これは MIDI 用語でオムニモードとして知られています) アーギュメントにチャンネル・ナンバーを書き込むことによって、 notein を、1つのチャンネルだけから受信するように設定できます。チャンネル・アーギュメントがある場合 、notein は2つのアウトレット(ピッチとベロシティ用)しか持ちません。これは、チャンネル・ナンバーがすでに分かっているためです。ポート・アーギュメント 、チャンネル・アーギュメントはともにオプションです。

・MIDI キーボードが別々のチャンネルに送信できる場合は、1以外のチャンネルで送信を行なうように設定して下さい。 演奏したとき、左の notein は依然としてデータを受信しますが、右の notein はそれらを無視します。

ノート・メッセージの送信

ノートを出力する場合、必ずしもMax へ演奏したノート情報が送られて来なければならないわけではありません。、Max で作り出したノート情報をシンセサイザに送信することができます。

これを行なうための一つの方法は、(ピッチ、ベロシティ、チャンネルで構成される)リスト を noteout の左インレットに送信することです。チュートリアル 8 で、算術演算子オブジェクトに対して、このような リストの使い方をしたことを覚えているでしょう。

・リストが書き込まれたメッセージボックスをクリックして下さい。 1つのリストはノートオンを、もう1つはノートオフ(ベロシティが 0のノート)を送信します。ノートオンの後には、ノートオフを送信しなければなりません(少なくとも理に適っています)。そうでないと、そのノートは成り続けてしまいます。 これを、シンセサイザのサステインの長い音色で試してみて下さい。

最後のパッチは、noteout の送信チャンネルをアーギュメントとして書き込むことができるという例です。チャンネル用のインレットは存在したままで、これに新しい数値を送信することによってチャンネルを変えることができます。

このパッチはまた、 noteout が、最も新しく受信したベロシティをピッチと結合するようすを示しています。

noteout に様々なベロシティを送信して下さい。MIDI ノート・メッセージをトリガするためのピッチ・ナンバーが受信されるまで、ベロシティは格納されたままです。

まとめ

notein オブジェクトは入力される MIDI ノート・メッセージを検出し、ピッチ、ベロシティ、チャンネルのデータを出力します。 アーギュメントとして特定のポートを表す文字を書き込むことができ、これによって1つのポートで受信されたノート・データだけを扱うことができます。 同様に、特定のチャンネル・ナンバーを書き込むことによって、1つのチャンネルで受信されたノート・データだけを扱うことも可能です。

noteout オブジェクトが左インレットで数値を受信すると、noteout は数値をピッチ値として扱い、そのピッチをベロシティ、チャンネル・ナンバーと結合して、MIDI ノート・メッセージを送信します。またピッチ、ベロシティ、チャンネルは、リストとして左インレットで一度に受信することも可能です。

参照

notein 入ってきた MIDI ノートメッセージを出力します。
noteout MIDI ノートメッセージを送信します。