2011年8月16日火曜日

Tokyo SuperCollider #4 資料1

Tokyo SuperCollider #4の資料です。
ファイルのダウンロードは以下のどちらかからどうぞ。





/*
 tokyo supercollider #4 - 110730
 SCQuartzComposerView tiny demo
 itaru yasuda
*/


// SCQuartzComposerView : SCCocoaGUIクラス
// SuperColliderQuartz Compserを使える
// *Quartz Composer OSXのビジュアルパッチプログラミングツール

// 何ができるのか?
// ヘルプにひと通りのデモがある
SCQuartzComposerView


//-- qtzファイルの読み込み、表示、再生

// ウィンドウ作成・表示
w = SCWindow("SCQCView", Rect(20, 250, 600, 300)).front;

// ウィンドウ内にSCQCView作成
v = SCQuartzComposerView(w, Rect(0, 0, 600, 300));

// qtzファイルのパスを指定
v.path = Document.current.dir ++ "/qtz/p0.qtz";

// レンダリング開始
v.start;


// qtzファイルをQCで開く
v.openInQC

// 停止
v.stop

// ウィンドウ閉じる
w.close


//-- QCパッチのパブリッシュされた入力・出力ポートの名前と値の操作・取得
(
w = SCWindow("SCQCView", Rect(20, 250, 600, 300)).front;
v = SCQuartzComposerView(w, Rect(0, 0, 600, 300));
v.path = Document.current.dir ++ "/qtz/p1.qtz"; // ファイル変更
v.start;
)

// QCで開く
v.openInQC

/*
QCのエディタで"Publish"してあるポート(みどり色のポート)のみ有効
QCエディタの編集結果をSCQCViewに反映させるには、QCを保存して再度SCQCViewを読み込む必要あり
*/

// 入力ポート名取得
v.inputKeys

// 出力ポート名を取得
v.outputKeys

// 出力ポートの値を取得
v.getOutputValue(\Result)

// 入力ポートの値を操作
v.setInputValue(\X_Position, 0.5)
v.setInputValue(\X_Position, -0.5)
v.setInputValue(\X_Position, 0)

v.setInputValue(\Y_Position, 0.5)
v.setInputValue(\Y_Position, -0.5)

v.setInputValue(\Amplitude, 10);
v.setInputValue(\Amplitude, 100);
v.setInputValue(\Amplitude, 5);

// シーケンス操作
(
a = 0.1;
b = -0.5;
{
300.do{
v.setInputValue(\Amplitude, a);
v.setInputValue(\Y_Position, b);
a = a + 0.2; 
b = b + 0.003;
0.05.wait;
}
}.fork(AppClock);
)

w.close

// フルスクリーン表示
(
w = SCWindow("SCQCView", Rect(20, 250, 600, 300)).front;
//w = SCWindow("SCQCView", Rect(20, 250, 600, 300), border:false).front; // 枠なし、完全なフルスクリーンになるが、閉じるボタンがなくcmd+wも効かないので、実行後はcmd+kSCをリコンパイルして閉じる(あまり行儀良くない)
v = SCQuartzComposerView(w, Rect(0, 0, 600, 300));
v.path = Document.current.dir ++ "/qtz/p1.qtz"; // ファイル変更
v.start;

v.resize = 5; // 5 - horizontally elastic, vertically elastic resize
w.fullScreen
)


/*
他に"Structure"も使える
詳しくはヘルプ参照
*/

//-- おまけ
// 3Dやパフォーマンスにこだわらなければ、Penというクラスもある
c=0;b=200;w=Window().front.drawHook_({1e3.do{|i| Pen.fillRect(Rect(c%i.cos*b+b,c*i.tan%b*2,2,2))};c=c+0.1});AppClock.play{w.refresh;1e-3}

0 件のコメント:

コメントを投稿