1017 : Max Tips(001) : 赤松正行 


------------------------------------------------------------------------
DSPマガジン 2003.08.10 No.1017
------------------------------------------------------------------------

台風一過、夏本番の今日この頃ですが、季節とは脈絡なく、今回から不定期で「Max Tips」なる新シリーズを始めようと思います。ちょっとした小ネタなんだけど、知っておくと便利なオブジェクトやテクニックを紹介しようというものです。もちろん、そんなこと知ってるぞって人もいらっしゃるでしょうが、意外と知られていないと思われる事柄を中心にお伝えしようと思います。こんなワザもあるよって情報も是非お知らせくださいね。と言うわけで、まず今回は4つのティップスをご紹介します。

・GUIはpvarでコントロール
・区切り無しのメッセージの連結
・OSXでのQT音源利用
・WebからMaxをコントロール

------------------------------------------------------------------------
Max Tips(001)
赤松正行

■GUIはpvarでコントロール

ボタンやスライダーなどのグラフィカル・ユーザ・インターフェース(GUI)を持つパッチって、意外とキレイにまとまりませんよね。中心となる処理を行うオブジェクトの周囲にGUIを並べていくと、GUIが分散して視認性が悪くなります。一方で、GUIだけを一箇所に集めると、操作性は良くなるものの、メイン処理のオブジェクトからパッチ・コードを長く延ばすことになって、その繋がりが分かりにくく、パッチ全体としても美しくありません。

このような場合に役立つのがpvarオブジェクトです。pvarを利用するには、まず、GUIオブジェクトに名前を付けます。このためには、GUIオブジェクトを選択して、Objectメニューのname...を選べば、名前を設定するウィンドウが開きますので、ここに適切な名前をタイプ入力します。例えば、スライダーに「duration」という名前を付けたとします。次に、pvarオブジェクトを作り、第1アーギュメントにGUIオブジェクトの名前を指定します。ここでは、「pvar duration」とするわけですね。

このようにしてスライダーを動かせば、pvarのアウトレットからはスライダーの値が出力されます。pvarのインレットにメッセージを送れば、そのメッセージはスライダーに送られます。つまり、pvarによってスライダーにパッチ・コードを繋ぐことなくコントロールできるわけで、send/receiveに似た機能だと考えれば良いでしょう。GUIが複数のアウトレットを持つ場合は、pvarの第2アーギュメントでアウトレットの数を指定します。インレットの数は指定できませんが、複数の入力が必要な場合はリストとして値を送ることで代用できます。

つまり、pvarを活用すれば、メインの処理を行うパッチとは切り離して、GUIオブジェクトを一箇所に集めて、操作性の良いユーザ・インターフェースを作ることができます。しかも、GUIオブジェクトに適切な名前を付ければ、その意味によってメインの処理を行うことができますから、パッチの保守性も良くなりそうです。パッチ・コードが入り乱れることも防げるし、かなり便利な機能だと思いますが、いかがでしょうか?

ちなみに、名前を付けたオブジェクトを移動しようとすると、Maxが異常終了することがあります。私の環境だけかもしれませんが、ご注意あそばせ。それから、ここではGUIオブジェクトに限って説明しますが、実際にはノーマル・オブジェクト(例えば、metroやnoteinなど)でも名前を付けることができ、pvarとともに用いることができます。

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

■区切り無しのメッセージの連結

例えば、「param 100 invert」というメッセージの各要素を区切ることなく連結したい、つまり「param100invert」という単一のメッセージに変換したい場合には、どうすれば良いでしょうか? 「sprintf %s%s%s」? ハイ、正解。でも、要素数が事前にわからない場合は、どうしますか? このようなメッセージの処理って、Maxでは結構面倒ですよね。

この場合のちょっとトリッキーな解決としては、tosymbolオブジェクトを用い、separatorメッセージを送っておく、という方法が考えられます。tosymbolは受け取ったメッセージの要素を連結し、単一のシンボルとしてのメッセージに変換するオブジェクトで、デフォルトでは要素の区切りとしてスペース(空白文字)が用いられます。そして、要素の区切りはseparatorメッセージで設定することができ、そのアーギュメントを指定しなければ、区切ることなく各要素が連結される、ことになります。これで一件落着。この応用として、「separator :」というメッセージを送っておけば、「param:100:invert」という出力が得られるなど、いろいろと活用できそうですね。

ちなみに、一般的なメッセージ処理や文字列処理のためには、前述のsprintfがC言語と同等の機能を持っていますし、Jitterをインストールしているなら、jit.str.op(strcatやstrlenなどのC言語風文字列操作)やjit.str.regexp(Perl互換の正規表現による文字列操作)なども利用できます。サードパーティ制のメッセージ処理オブジェクトもいくつかありますので、研究してみてください。

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

■OSXでのQT音源利用

OS 9では、OMSの設定によってQuickTimeのソフトウェア音源を利用できましたが、OS XではOMSが存在せず、Audio MIDI設定にも同等の機能がありません。そこで、OS X用のMax 4.2でQuickTime音源を利用したい場合は、qtmusicというエクスターナル・オブジェクトを使用します。qtmusic自体はOS 9時代から存在していますが、OS Xでも動作するようになっています。

http://www.synthesisters.com/download/qtmusic.sit

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

■WebからMaxをコントロール

WebページにMaxをコントロールする機能を盛り込みたい場合は、どのようにすれば良いでしょうか? 例えば、クライアントであるユーザがWebページのボタンを押せば、サーバ側のMaxで音を鳴らし、その音をストリーミングで配信したいような事例は、どのようにすれば実現可能でしょうか? MaxがCGIとして動作すれば良いわけですが、残念ながらそのような機能はありません。

そこで、このような目的に利用できるのが、Web2OSCというJavaScriptおよびJavaアプレット/アプリケーションです。JavaScriptとJavaですから、ほとんどのプラットフォームとWebブラウザで実行できると思われます。Web2OSCは、実際にはOSC(Open Sound Control)プロトコルによって、他のアプリケーションと通信を行います。従って、Maxだけでなく、SuperColliderやReaktorなどでも利用できます。

http://www.netmuse.org/hack.html

同じように、OSCによってFlashムービーとMaxとの通信を行うには、floscが利用できます。floscはUDP/OSCパケットとFlashのTCP/XMLソケットを変換する機能を持っています。もちろん、FlashムービーはWebページに埋め込んでおけば良いわけです。

http://www.benchun.net/flosc/

なお、以前にも紹介しましたが、OSCおよびUDPを扱うMaxオブジェクトは、以下のURLから入手できます。

http://cnmat.cnmat.berkeley.edu/Max/

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

今回紹介したサンプル・パッチは、以下のリンクをクリックしてダウンロードできます。
TIPS001files.sit

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

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

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

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

       


©