前回AKAI MPC1000とpuredataを連携させ、映像などのヴィジュアル素材を操作する記事を書きましたが、あの説明だけでは、puredataを始めたばかりの人には分かりにくいと思いました。そこで、具体的なパッチを簡単にご紹介しようと思います・・と思ってましたが、長くなったので以下興味がある方はどうぞ。説明は読まなくても、パッチを上図のまま写していけば動くはずです。あれ?と思ったときは記事にもしかしたらヒントがあるかもしれません。
パッチの構成
大まかに言いますと、このパッチは3つのセクションで構成されています。- PCの画面にGEMウィンドウを表示する
- mpc1000からMIDI信号を受信し、その数値を調整する
- 動画ファイルのパラメータの設定
GEMウィンドウを表示する
全体図の画面左上に、上図のオブジェクトのかたまりがあります。[dimen 640 480]→[create, 1]の順にクリックすると、PC画面にGEMというウィンドウが表示されます。[0, destroy]でウィンドウを閉じることができます。
[dimen 数字 数字]でウィンドウのサイズを調整できます。ライブパフォーマンスなどで利用する場合、fullscreenにしたくなると思いますが、そのときはfullscreenを解除できる仕組みを作っておくことをおすすめします。mac os x moutain lionでmagic mouse利用の場合は、マウスを二本指ダブルタップ(mission control)でパッチに戻れます。
MIDI受信と数値の調整
midiの受信とその数値の調整をしているセクションです。上図では[notein]の下のナンバーボックスに「36」とあります。これはmpc1000のPAD2を叩いたじょうたいです。その数値が[sel 37 36 42]で振り分けられます。[sel]は左のアウトレットから順に設定した数値に合致した時だけ[bang]を吐きます。
続いて[+ ]というオブジェクトで、[bang]と[notein]から受信したベロシティ値と合算されます。合算といっても実質は、ベロシティ値だけを通しているだけです。
余談ですが、実は自分がパッチを作っていて一番引っかかったのがここでした。この[+ ]を挟むことが思いつく前は、selでpad情報を振り分けているはずなのにpadを1つ叩いたら、そのベロシティ値が全部のpadセクションに数値が送られてしまっていました。padを1つ叩いただけなのに、他の動画も反応してしまうという状態でしたが、とりあえずこれでいけました。
[$1 500]から[line]にかけての部門は、流れてきた数値を徐々に変化させているところです。その変化する数値を、動画ファイルの画面サイズを変更する為に利用します。そのままの数値を送ると大きすぎたり、小さすぎたりするので[/ ]というオブジェクトで割り算して、数値を小さくしています。
その下の[del 数値]というのは、設定した数値時間後に[bang]を吐くオブジェクトです。midiから送られてくるベロシティ値は、叩き終わったら0になります。そうすると動画ファイルのサイズも0になります。それが個人的に嫌だったので、padを叩いた後にサイズ調整のために作ったセクションです。
動画ファイルのパラメータを設定
最後に動画ファイルを設定するセクションに入ります。なにやらたくさんオブジェクトが並んでいますが、以下のパッチを基本にして4つ並べただけです。要はmpc1000のほうで使いたいpadの数だけ用意するということになります。
ちなみに前回の記事で、[pix_film]のヘルプにあるパッチを利用しようと書きましたが、自分で実際にやってみると、[auto $1]のトグルをONにすれば自動的に動画がループするはずが、動画が一周りするとうんともすんとも言わなくなったので、やり方を変えました。[auto $1]を使って上手くいかないのは何故か分からないので、知っている人がいたら是非教えていただきたいです。
一番上にある赤いボタンを押すと、ファイルブラウザが開きます。ここで流したい動画を選択します。動画ファイルはサイズも長さもコンパクトなものが良いです。解像度も揃っている方が良いです。というのも、これかれらVJなどに使えるパッチを作成していこうという方は、[pix_mix]などの動画をミックスするオブジェクトを使うことになると思いますが、この[pix_mix]は同じ解像度のファイルしかミックスできない仕様になっています。今回のパッチは[pix_mix]を使わないので、動画の解像度が違っても大丈夫です。
動画ファイルを選択し開くと、GEMウィンドウに動画が映し出されると思います。ちなみに、[pix_film]→[unpack 0 0 0]の下のナンバーボックスに、動画ファイルの解像度が出力されています。この数値が一致しないと[pix_mix]は使えないと言うわけです。この辺はpdのバージョンアップでなんとかなれば良いと思うのですが、技術的に難しいのでしょうか?
さて、動画の再生はどうすれば良いのでしょうか?先ほど書いた通り、[auto $1]が上手くいかないですし・・・。というわけで今回は[counter]と[metro]を使うことにしました。これだと普通の再生も、逆再生も簡単に実装できます。
- [counter]について
[counter]というのは[bang]が入力されるたびに、順番に連続した数値を出力するオブジェクトです。3つの数字は左から順に「数値の初期値」「数値の最大値」「数値が進む方向」を設定しています。このパッチでは[counter 0 0 0]と初期設定していますが、 [counter]のインレットにそれぞれ数値を与えて、数字の動きを制御していきます。[counter]はこの設定した値の中でぐるぐるループを繰り返すオブジェクトです。
[counter]のインレットを見ると4つあります。左から1つ空けて、3つのインレットに数値を入力することができます。メッセージボックスを2つ作り、それぞれ「1」「2」とあります。「1」をクリックすると数値は、設定した初期値から順番に大きくなっていきます。「2」をクリックすると逆に設定した最大値から、順番に数値が減少するようになります。 ちなみに「3」はup to downです。つまり最小値から最大値まで行ったらそこから今度は、最小値に向かって進んでいくというループをします。
[pix_film]は文字通りフィルムと同じ原理
では、最大値は何をもって決定するのかというと、動画ファイルのフレームの長さを使います。動画のフレームと言ってもピンと来ない場合、アニメやフィルム映画のことを思い出してみると分かりやすいかもしれません。アニメやフィルムは静止した画像を連続して映すことによって、まるで動いているように見せるという仕組みになっていますよね。puredataの[pix_film]も原理は同じということです。
-[pix_film]というオブジェクト
[pix_film]のオブジェクトを見てみると、インレットが2つ、アウトレットが3つあります。まずアウトレットの真ん中から[unpack 0 0 0]に繋がっています。そこから数値が3つ出力されています。その真ん中から2つの数値は先ほど、動画の解像度のところで出てきました。そして、一番左の数値が動画ファイルのフレームの長さが出力されているということになります。上図では「length」が「163」となっています。これがこの動画ファイルの長さです。163枚の絵が格納されているということです。そして、その絵にそれぞれ1〜163という名前でインデックスがつけられていると考えると良いと思います。[pix_film]の右のインレットにナンバーボックスをつなぐと、そのナンバーボックスの数値に合わせて、その絵をgemウィンドウに映しだすというわけです。ナンバーボックスの数値ををマウスで動かすと、それに合わせて画像が次々に変わっていくと思います。
-[pix_film]と[counter]を連動させる
この[pix_film]→[unpack]から出力される動画の長さを、先ほどの[counter]の一番右のインレット(数値の最大値)に繋ぎます。こうしておけば動画ファイルを開いた時点で、自動的に[counter]の設定ができてしまうという仕組みです。
-[metro]で機械的に連続した[bang]を出力
[counter]に[bang]ボタンをマウスで連続してクリックしても良いですが、とてもじゃないけど滑らかな数値の動きは出せないでしょう。そこで[metro]というオブジェクトを使います。[metro 数値]は機械的に連続して[bang]を出力してくれるオブジェクトです。そして数値によって、その[bang]の出力スピードを変更してくれます。また、[metro]の右インレットに数値を入力すれば、リアルタイムに出力スピードを変更できます。
これで[counter]で設定された数値内の中で、連続した数値を出力する仕組みができました。その出力を[pix_film]の右インレットに流し込んみ、163枚の絵を連続して切り替えていくことで、動画が再生されるというわけです。
-動画を映し出す位置を調整
あとは、[translateXYZ]や[rotateXYZ]などを使って動画を貼付ける位置を調整していきます。XYZというのは軸のことです。x軸とかy軸といった感じです。[translateXYZ -3 -2 0]などの数値は、例のごとく初期値のことで、インレットを使ってリアルタイムに変更することができます。
様々な数値の動きを制御するのが醍醐味
こういったインレットにどんな数値を送りこむのか?というのが今回のパッチの肝です。今回の場合は、mpc1000から送られてくるベロシティ値を利用して、インレットに数値を送ることで動画に変化を与えています。
[rectangle]のサイズを変化させるインレットに対して、数値を送りpadが叩かれるたびに、動画が大きくなるというものです。ただ単に数値を送るとパッと画像が現れ、次の瞬間に消えてしまうので、「midi受信と数値の調整」のところで紹介した、midi情報だけではできないことを、puredataの[line]オブジェクトなどを使って新たな要素を加えて行くと言った感じです。
まとめ
今回自分の備忘録として、そしてmpc1000などを使って打ち込み音楽を作っている人が、気軽に映像とコラボレーションできる環境として、puredataというものがありますよということを知ってもらいたくて記事にしてみました。
DAWとの連動も
参考文献
Pd Recipe Book -Pure Dataではじめるサウンドプログラミング(単行本)
Pure Data -チュートリアル&リファレンス-
こじ研
PureData
0 件のコメント:
コメントを投稿