この連載ではノウハウ0の状態からMax9で制作に関するプログラムの自作を目指します!試行錯誤をしながら一緒に無限の可能性を探っていきましょう。※Max for Liveについてはこちらの過去記事をご覧ください。
こんにちは。タムラです。
引き続き理想のMIDI制御を求めてM4L触っていきます。
前回記事→Max9をはじめよう#6-2:理想のカーブを求めて
Live API について理屈は一旦横においておきましょう。M4LからLiveのパラメータを触ることができます。
一旦テストでEQ Three のパラメータを動かすパッチを組みます。
プロジェクト画面はこんな感じです。

そして以下のパッチでEQ Three が動きます。

主役は『Live.path』と『Live.object』です。M4LからLiveのパラメータを動かす場合必要になるオブジェクトです。
ID発行屋さんです。動かしたいパラメータの住所を教えるとIDを発行してくれます。
住所とはインレットに接続されている『path live_set tracks 0 devices 1 parameters 1』の部分。これは動かしたいパラメータからコピーできます。今回はインサートされている『EQ three』のGain Low パラメータのパスを取得します。

『path live_set tracks 0 devices 1 parameters 1』=『住所:Liveセット、1番目のトラック内の、2番目のデバイス内の、2番目のパラメータ』という意味です。(通番は0から始まるので2番目が1です)
このメッセージが『Live.path』に入力されるとidが発行されます。メッセージにid 1と表示されているのでこのパラメータに無事iDが発行されたことが確認できました。
このidはLiveを閉じるまで有効です。新たな住所を入力するたび通番で発行されます。(つまり私は一回ミスしてidを無駄にしてるということです)
一度idを発行していれば『EQ three』のGain Low = id1 と結びつくので以降はチェーンの順番を変えても問題ありません。
外交官です。M4L内で発行されたidを参照し、入力された数値に応じてLiveのパラメーターを動かす様に指示を出してくれます。
なので『Live.object』の左インレットにはidを、右インレットには変化したい数値を入力します。直接数値を入力することはできないので『Set』メッセージを使いLive.objectに伝達します。
Live.dialはデフォルトは整数型ですが振り切れてしますので最大値を1に変更、TypeをFloatに変更します。
このパッチ全然実用的ではありません。
というのもパスをメッセージで固定してしまっているので『1番目のトラック内の、2番目のデバイス内の、2番目のパラメータ』しか動きません。都度メッセージを作り直すのは少し面倒なので解決したい問題です。LFOをアサインする様なイメージでmapを追加して解決しましょう。
もう一つ、再起動したらidがまっさらになるのでまたid発行作業が必要になります。超面倒です。これもどうにかしたいところ
テストパッチです。

『Live.map』はmap機能を持ちます。上のボタンを押すとLive.mapが待機状態になり、次に触れたパラメータのパスが内部で入力され、対応したidを『Live.remote ~』に渡しています。なんて便利なんでしょうか。
『Live.object』は変化した値を全て一つづつ処理するのに対して『Live.remote~』は動的な信号を入力します。

『Live.object』でフェーダーが動いていたのは大量に単発の通信を行なっていただけです。(ログが大量に残ります)
今回の場合やLFOなど連続変調を繰り返す処理に関しては『Live.remote ~』に軍配が上がります。(LiveのLFOがオートメーションに記録できない要因です)
そして『@normalized 1 』は受け取ったidのパラメーターの最大値を1として平均化し振り切れない様に記述しています。
mapできる様になって楽になったとはいえ、idの有効期限はLiveを閉じるまで。再起動するたびにマッピングし直しはやってられません。
そこで『Live.remote』のUse Persistent Mapping機能を使います。

ここにチェックを入れておくと『Live.remote』内に最後に受け取ったパラメータを記憶します。これはidを覚えている訳ではなく、マッピング情報がLive内に保存されるのでidクリアの心配は必要ありません。
なんやかんや活路が見えてきました!
ここまで読んでいただいて「map8でいいじゃん。」と思った方もいらっしゃるかと思います。
僕もそう思います。ただもう引き下がれないのです。
続きはまた次回!