Data チュートリアル 3:
動作のキャプチャ

イントロダクション

このチュートリアルでは、データのキャプチャと再生に焦点をあてます。これは、実質的にはシーケンスを実行することに他なりません。しかし、MIDI チュートリアルで見てきたシーケンシングと異なり、これは任意のデータ(この場合マウスの動き)のシーケンシングを扱います。ここでは、coll の使用法を拡張し、データを収集するだけでなく、データの再生を行なうことによって興味深い描画パッチを作っています。

運動のキャプチャとプレイバック(再生)の機能は、多くのパフォーマンスツールの心臓部となるものです。このことは、運動がモーションキャプチャのデータであっても、センサのデータであっても、あるいはマウスの動きであっても変わりありません。このチュートリアルでは、キャプチャとプレイバックを行なうシステムのための基礎的となる内容を示し、いくつかの興味深い設計パターンを紹介します。

プログラムの実行、データの可視化

チュートリアルを開いて下さい。

チュートリアルパッチを見て下さい。これはかなり複雑なパッチになっていますが、これ全体は1つの目的のために作られています。その目的とは、マウスの動きをキャプチャして、これを面白い描画に変換することです。このパッチの興味深い所は、マウスの動きを受信して描画するだけではなく、マウスの動きを「レコーディング(記録)」するという点です。このパッチは、コンピュータが行っている他の作業に関りなく一定のタイミングで実行されるものであるため、Options メニューから Overdrive をオンにしておく必要があるかもしれません。

重要なヒント:マウスの操作は描画を乱してしまうため、この操作がパッチに作用しないようにしたいと考えるかもしれません。その場合、lcd オブジェクトの上にある key オブジェクトを中心とした部分に注目してください。ここでは、3つのキー(sペース、"r"、"p")をパッチの3つの機能("clear"(画面のクリア)、"record" (運動のレコーディング)、"playbakc"(運動の再生))に割り当てています。パッチの動作をスタートさせるためには、"r" キー(必ず小文字で入力して下さい)を押して、レコーディング処理を開始します。その後、スクリーン上でマウスを動かします。ループ状に大きく動かすと特に効果的でしょう。マウスの運動が終了したら、再び"r" キーを押してレコーディングをオフにします。

これで、lcd のディスプレイ上に、面白いスクリプトで作ったような描画を行なうことができるようになります。スペースバーを押してディスプレイをクリアし、"p" キーを押してプレイバックを開始して下さい。描画が開始されるはずです。描画したものがキャプチャされるだけではなく、実際のマウスの動き(および、タイミング)もキャプチャされ、再現されます。

このパッチには3つの coll オブジェクトがありますが、この3つはすべて同じデータを参照しています。この coll のデータには thegest という名前が付けられています。右端のものは最もアクセスしやすいようになっています。これをダブルクリックしてキャプチャされたデータを表示させて下さい。coll オブジェクトが持っているデータは、20 ミリ秒間隔でトラッキングされ、キャプチャされたマウスの動きです。このキャプチャがどのように行なわれているのかを見てみましょう。

レコーディング(記録)部分

パッチの左上にあるRECORD セクションはすべて、大きな赤い toggle オブジェクトでスタートします。この toggle をオンにすると、(trigger の右アウトレットに接続されたsel 1 オブジェクトを介して)パッチをリセットし、20 ミリ秒間隔でbang を出力する metro をスタートさせます。この metro がマウスの動作をトラッキングする「サンプリングレート」を決定し、同時に、その他のオブジェクトに対してトリガを送信しています。metro がbang メッセージを送信しているオブジェクトは、サブパッチ(以前使用した WTHITM のスケーリングを行なうバージョン)とintオブジェクト(i という省略形で書かれています)の2つです。

WTHITM というパッチオブジェクトについては、もう十分ご存知でしょう。これは、現時点でのマウス位置をトラッキングし、与えられたアーギュメントでスケールして、ひと組の値(X座標とY座標の値)として出力します。このケースでは、サブパッチの出力は 0 から 320、および 0 から 240 の範囲になり、サブパッチは bang メッセージを受信するたびにこの値を出力します。これを直ちにフィードバックするために、サブパッチの出力は描画サブパッチに送信され、この描画サブパッチが lcd オブジェクトに対する描画コマンドを生成します。

int オブジェクトと、これに接続された + オブジェクトは、便利な機能を実行します。bang メッセージが入力されると、現在の値(ナンバーボックスに表示されているものです)が出力されます。しかしそれだけではなく、この値は + オブジェクトにも送信されます。int オブジェクトは、この値に1を加え、それを int の右インレットに格納します。そして、int は次の bang メッセージを待ち受けます。この結果、bang メッセージが送信されるたびに値が出力されますが、この値は 1 ずつインクリメント(増加)します。これは、一種の count オブジェクトのようなものですが、出力される値に上限はありません。この方法は、上限がわからないような状況で、増加し続ける数値を得たい場合に役に立ちます。

この2つのオブジェクトから送信される値(現時点でのカウント値と、スケールされたX座標とY座標)は pack オブジェクトによってまとめられ、coll オブジェクトに送信されます。リストの最初の値(現時点でのカウント値)はインデックスとして使用され、coll に対して続く2つの値を、このインデックスで指定した場所に格納するよう命じます。この結果、coll はインデックスの値で指定された位置に、残りの値を保存するデータレコーダとして動作します。データの収集は、レコーディング機能が停止するまで続けられます。レコーディング機能を停止するには、赤いチェックボックスをクリックするか、"r" キーを押します。

ここで、レコーディングをトリガする trigger オブジェクトに接続されたselect オブジェクトがどのような動作を行なっているかを見てみましょう。レコーディングがスタートすると、2つめの trigger オブジェクトに bang が送信され、このtrigger オブジェクトは右から左の順で出力を行ないます。まず "play" と表示された toggle ボックスをオフにし(プレイバックを停止します)、次にlcd にclear メッセージを送信し、coll の格納データを消去(もう1つの clear メッセージを使います)して、最後にint オブジェクトを 0 にしてインデックスカウンタをリセットします。

プレイバック(再生)部分

パッチ左下にあるプレイバック部分は、レコーディングセクションと全く同じようなものですが、マウストラッキングを行わないという点が異なっています。正確に言えば、この部分は thegest という名前をもった coll に対してインデックス付けを行なわれたデータを要求し、このデータを同じ描画パッチで使用することによって、マウスによる描画を再現しています。ここでは、レコーディングセクションで用いた、整数を増加させるテクニックを使うことができます。このテクニックには、上限の値を定義する必要がないという利点がありますが、停止したり、自分自身でループをおこなったりすることができないという欠点もあります。

このパッチのレコーディング機能は、キャプチャされたデータに「タイプスタンプ」情報を追加しません(データに対し、integer オブジェクトの出力によってインデックス付けするだけです)。これは、coll のデータを要求するスピードを変えることによって、描画をプレイバックする速度を操作することができるということを意味します。これを行なう最も簡単な方法は、metro の実行スピードを変更することです。

パッチをアンロックして、プレイバック部分に整数ナンバーボックスを追加して下さい。この出力をmetro の右インレット(このインレットはmetro からの出力の時間間隔をコントロールします)に接続して下さい。ナンバーボックスに 2 と入力して、"p" キーを押し、プレイバックを行なって下さい。描画は前と同様に行なわれますが、その実行速度は 10 倍速くなります。描画を停止して("p" キーを押します)、ナンバーボックスの値を 40 に変更し、再び "p" キーを押すと、描画は半分の速さで実行されます。このことから、ここで行なったデータキャプチャのテクニックは、プレイバック時間に関して大きな柔軟性を与えてくれるということがわかるでしょう。

面白いデータをキャプチャしたとき、これを保存しておき、後でまた使いたいと思うのではないでしょうか。右端の coll (輪郭が青になっているもの)は、coll のデータの保存と読み込みを行なう簡単な方法を示しています。read メッセージを使うと、ディスクファイルからデータをインポートできます。これに対し、write メッセージでは、キャプチャしたデータをディスクに保存することができます。メッセージの後に実際のファイル名やパス名をアーギュメントとして続けると、特定のファイルの読み込みや書き出しを行なうことができます。アーギュメントを持たない read/write メッセージの場合には、ファイルを選ぶためのダイアログが開きます。

いくつか描画を行ない、右側のcoll にwrite メッセージを送って、そのデータをファイルに保存して下さい。このデータを(read メッセージを使って)再び読み込むと、保存してあった描画をプレイバックすることができます。coll オブジェクトによって作られるデータファイルが単純なテキストファイルであるということを覚えておいて下さい。このファイルをテキストエディタで開いたり、他のプログラムにインポートして表示、編集を行なうことができます。

結び

このチュートリアルでは、データ収集デバイスとしての coll オブジェクトの使用法を見てきました。また、上限を持たないカウンタの設計方法についても見ました。さらに、collを使って、ディスクへの書き込みや読み出しを行なう方法についても見ました。これにより、キャプチャしたデータの保存や再利用を行なうことができます。最後に、このパッチは1つのデータセットを3つの coll オブジェクトで使用している良い例であるといえます。このデータ共有の方法は、大きなパッチでは非常に便利な手段となります。

参照

coll 様々なメッセージのコレクションを格納、編集します。