1006 : Maxビギナーズ・チュートリアル(004) : 佐近田展康 


------------------------------------------------------------------------
DSPマガジン 2003.03.03 No.1006
------------------------------------------------------------------------

Maxビギナーズ・チュートリアル(004)
インプットとアウトプット(変換)

佐近田展康

コンピュータにはさまざまな外部デバイス(機器)を接続し外部からコンピュータをコントロールしたり、コンピュータからそれらの機器をコントロールすることが出来ます。身近な所ではマウスやコンピュータ・キーボード、MIDIコントローラーなどの入力デバイス、プリンタやMIDI音源モジュールなど出力デバイスなどが挙げられます。「ROBOTIC MUSIC」のテーマであるロボットは基本的にコンピュータからの命令で動かす出力デバイスですが、もしそのロボットがセンサー等を搭載したものであれば外部の情報をコンピュータに伝える入力デバイスにもなります。

Maxにはこうした外部デバイスとの間で情報をやりとりするためのオブジェクトが多数用意されています。コンピュータ・キーボード、マウス、Apple CD player、MIDI機器などを扱うオブジェクトはMaxのパッケージに付属していますし、世界中のMaxユーザーによりさまざまな外部デバイス用のオブジェクトが開発されています。

【sample4-1】はコンピュータ・キーボードからの入力(インプット)によりMIDIメッセージ(アウトプット)を外部のMIDI音源モジュール等へと送信するものです。これでコンピュータ・キーボードをあたかもMIDIコントローラ代わりに使い演奏することができます。keyオブジェクトはコンピュータ・キーボード(以下キーボードと呼ぶ)からのキー入力をASCII値という文字コードの値として出力するもので、例えばアルファベットの大文字のAは65、小文字のaは97というふうに世界標準の規格として定められた数値を出力します。noteoutはさまざまなMIDIメッセージのうちノート・メッセージ(ノートオンおよびノートオフ・メッセージ)を外部へと送信します。ノート・メッセージはノート・ナンバー(MIDI規格のうち音高と発音の開始・停止を規定したもの)とベロシティ(音の強さを規定したもの)とチャンネル(16あるチャンネルのうちどれかを規定したもの)の要素から構成されており、これも世界標準の規格です。makenoteオブジェクトは簡単にノートオンおよびノートオフ・メッセージをパッチ内で作りnoteoutから送信するために使われるものです。

実際にこのパッチを使用するためにはnoteoutからのMIDI出力を受けるMIDI音源モジュールやMIDIインターフェイス等が必要になり、ユーザーの環境の違いによって説明も変わって来るのですが、ここでは話を簡単にするためにQuickTimeをインストールしたMacintoshであれば標準で使用可能なQuickTime音源により説明をして行きます。QuickTime音源を使用するためにはQuickTimeをインストールし、OMSの"OMS Setup"アプリケーションでQuickTime Musicを使用可能にしておく必要があります。そのうえで【sample4-1】のパッチを開くとumenuオブジェクトに使用可能なMIDI出力デバイスが自動的に表示されますので、そこでQuickTime Musicを選択します。これでキーボードを押せばピアノ音色でQuickTime音源が発音するはずです。

このパッチはインプットにほとんど何も手を加えずアウトプットしているだけですので、少し発展させてみましょう。【sample4-2】はASCII値の97〜122(a〜zに対応)をselectオブジェクトで捕まえて個別に異なった値に変換しているパッチです。selectはアーギュメントとして書かれたものと同じものをインレットから受け取ると、対応するアウトレットからbangを出力します。アーギュメントとして書かれた以外のものを受け取ると最も右のアウトレットからそのまま通過させます。例えばアーギュメントの3番目は99になっており、selectが99を受け取ると対応する第3アウトレットからbangを出力することになります。そのアウトレットには60と書かれたメッセージ・ボックスがつながっているので結果的に99は60に変換されノート・ナンバー60でQuickTime音源が発音することになります。こうして97〜122について個々に変換する値を定めた結果、キーボードの左側から右側へと徐々に音高が高くなるようにCメジャー・スケールに対応したノートナンバーを配置することができました。

このselectを用いた変換方法は単純で分かりやすいですが、多数のメッセージ・ボックスをパッチ・コードで結ばなければならず手間がかかります。またASCII値の97〜122以外についても変換を行おうとすればパッチはどんどん大きくなり手間も余計にかかってしまうでしょう。【sample4-3】はこのselectと多数のメッセージ・ボックスで果たしていた機能をtableオブジェクトを使いひとつのオブジェクトで解決したものです。ここでtableは入力数値と出力数値の対応表、言い換えれば変換テーブルとして機能しています。さらにこの結果に+オブジェクトで任意の数値を足し算することにより自由なキー・トランスポーズ(移調)が可能になります。

tableオブジェクトをダブルクリックするとtableウィンドウが開きます。そこに鉛筆ツールで点を置くことで横軸の値(入力)と縦軸の値(出力)の対応関係を書き込むことができます。例えば横軸の値が80、縦軸の値が101の位置に点を書き込むと、tableオブジェクトは第1インレットから80を受け取った時に101を出力するようになります。このようにtableオブジェクトは入力と出力の1対1の対応関係をグラフィカルに書き込むことで簡単に変換テーブルとして使用することができます。

【sample4-4】はtableオブジェクトの代わりにcollオブジェクト使って変換テーブルにしている例です。collオブジェクトをダブルクリックするとその中に格納されているデータをテキスト・ウィンドウとして見たり編集することができます。collオブジェクトのデータ書式は「インデックス, データの値;」となっており、第1インレットに受け取ったメッセージがインデックスと一致するとcollはそのインデックスに対応するデータの値を出力します。

* ここで説明したパッチは、以下のリンクをクリックしてダウンロードできます。
MBT004files.sit

------------------------------------------------------------------------

暫定版ながら、DSPマガジンのWEBサイトを作りました。
メルマガの発行確認や購読中止などの操作は、こちらをご覧ください。

http://dspmag.iamas.ac.jp/

------------------------------------------------------------------------
Copyright(C)2003 DSP Magazine. All Rights Reserved. 転送・転載禁止
------------------------------------------------------------------------ 

       


©