今回も引き続きSuperColliderと連携する予定のProcessingの基本について学んでいきます。今回はProcessingによるアニメーションの基礎をとりあげます。プログラミングによってアニメーションを表現する原理を整理した上で、簡単なアニメーションから始めて、「ベクトル」という概念の導入、最後は沢山の物体を同時にアニメーションさせます。
スライド資料
授業内で使用するスライド資料は、下記から参照してください。
この授業の後半は、SuperCollider単体で使うのではなく、他のソフトウエアと連携して、よりインタラクティブな展開を目指します。SuperCollider単体でグラフィクスを生成することも可能ですが、あまり便利とはいえません。そこで、Processingという2Dや3Dグラフィクスの表示やアニメーションに特化した開発環境を導入します。サウンドをSuperCollider、グラフィクスをProcessingと分担して、オーディオビジュアルなプロジェクトの作成を目指します。
スライド資料
授業内で使用するスライド資料は、下記から参照してください
openFrameworksで作品をつくる際に、場合によっては一つのアプリケーションの中で複数の場面を切り替える必要が出てくる場合があります。そうした際にtestAppクラスの中に全ての場面を詰め込もうとすると、各操作での条件分岐などが複雑になり、扱いが大変となります。今回は、大量の場面を効率的に取り扱う方法について考えていきます。
サンプルファイル
紹介したサンプルは、いつものようにGithubからダウンロード(もしくは、pull)してください。
スライド資料
スライド資料は下記から参照してください。
今回から数回にわたって、SuperColliderと他のアプリケーションとの連携について取り上げます。例えば、Max/MSPやPdなどのアプリケーションでGUIを作成して、音はSuperColliderから生成したり、ProcessingやopenFrameworksなどのアプリケーションで、SuperColliderの音を視覚化したりといったことが可能となります。連携にはOpenSoundContorol (OSC) というプロトコル(通信の方式)を使用します。今回は、このOSCについて考えていきます。
スライド資料
授業内で使用するスライド資料は、下記から参照してください
サンプルプログラム
今回使用したSuperColliderのプログラムです。
//サーバーのブート
s = Server.default;
s.boot;
// 表示されるメッセージ
// [ "/dumpOSC", 1 ]
//全てのOSCメッセージを表示する
s.dumpOSC;
//楽器の定義
SynthDef("test_osc", {
var out;
out = SinOsc.ar([220, 221],0,0.5);
Out.ar(0, out);
}).store;
// 表示されるメッセージ
// [ "/d_recv", DATA[244], 0 ]
// a SynthDef
//サウンド再生開始
s.sendMsg("/s_new", "test_osc", x = s.nextNodeID, 1, 1);
// 表示されるメッセージ
// [ "/s_new", "test_osc", 1000, 1, 1 ]
//再生終了
s.sendMsg("/n_free", x);
// 表示されるメッセージ
// [ "/n_free", 1000 ]
//サーバーの終了
s.quit;
// 表示されるメッセージ
// [ "/quit", ]
// [ 24, 0 ]
//別の楽器
SynthDef("perc", {
arg freq, dur;
var out, env;
env = Env.perc(0.01, dur, 0.2);
out = SinOsc.ar(freq,0,0.5) * EnvGen.kr(env, doneAction:2);
out = Pan2.ar(out, Rand(-1.0, 1.0));
Out.ar(0, out);
}).store;
連携のためのPd(Pure Data)のプログラムは下記からダウンロードしてください。