ssaw08 1202

28
SSAW08 後期第11回 作品制作のヒント Max/MSP5の新機能・Max+SCで音響生成 2008年12月2日

Upload: atsushi-tadokoro

Post on 18-Jul-2015

720 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Ssaw08 1202

SSAW08 後期第11回

作品制作のヒントMax/MSP5の新機能・Max+SCで音響生成2008年12月2日

Page 2: Ssaw08 1202

今日の内容

• Max/MSPの新機能について• 進化したエディット昨日を試してみる• 新しいGUIパーツ• プレゼンテーションモードを活用

• Max + SC で音響合成• お互いのいいとこ取り• Max:多彩なGUIパーツ• SuperCollider:高品質の音響、多彩なUnitGenerator

Page 3: Ssaw08 1202

Max/MSP 5の進化

• 進化した部分• ツールバーの進化• パッチのズーム• グリッド機能• 透過オブジェクトパレット• テンプレート• プレゼンテーションモード

Page 4: Ssaw08 1202

Max/MSP 5の進化

• ツールバー

• 左から• ロック・アンロック• オブジェクトの追加• ズームイン (新機能)• プレゼンテーションモード (新機能)• インスペクター• 表示順序の入れ替え• グリッド表示 / 非表示 (新機能)• グリッドに吸着

Page 5: Ssaw08 1202

Max/MSP 5の進化

• エディットが容易になった• 画面を拡大して、細かな部分を編集• グリッドに吸着させることで、整理しながらパッチを配置

Page 6: Ssaw08 1202

Max/MSP 5の進化

• 画面をダブルクリックで新規にオブジェクトを追加できる• 透過ウィンドウでオブジェクトのリストがグラフィカルに表示• カテゴリから選んで選択

Page 7: Ssaw08 1202

Max/MSP 5の進化

• プレゼンテーションモード• ユーザとのインタフェイスに関するオブジェクトだけを残して、あとは隠してしまうことができるモード

• オブジェクトの配置や大きさを、プレゼンテーションモード専用に自由に設定できる

• 必要のない部分は全て隠しておくことが可能• 作成手順• オブジェクトをプレゼンテーションモードに追加• プレゼンテーションモードに移行• 必要に応じて、再配置、リサイズ• ロック

Page 8: Ssaw08 1202

Max/MSP5 + SuperCollider

• 互いの利点で機能を補完• GUIの構築:Max/MSPが有利• 音響生成:SuperColliderのほうが高機能

• OSCで連携する

Page 9: Ssaw08 1202

SuperColliderのおさらい

• 音響生成サーバーの起動

//サーバの生成する//サーバ名 "myServer"//サーバのIDアドレス (127.0.0.1);//ポート番号 (8000)s = Server("myServer", NetAddr("127.0.0.1", 8000));s.boot; //サーバーの開始

Page 10: Ssaw08 1202

SuperColliderのおさらい

• 楽器の定義:SynthDef で行う• SynthDefの構成

SynthDef ( 楽器名, { arg 引数1, 引数2, 引数3... ; var 変数1, 変数2, 変数3... ; 音響生成の関数の定義 Out.ar(バス番号, 最終的に出力する信号); }).サーバへの処理

Page 11: Ssaw08 1202

SuperColliderのおさらい

• 楽器の定義 の例:サイン波を出力する楽器を定義し、ディスクに保存

SynthDef("sine", { //楽器"sine"を定義 arg freq=800; //引数 "freq" で周波数を設定 var osc; //変数の定義 (osc) osc = SinOsc.ar([freq, freq], 0, 0.1); // サイン波を生成、周波数 = freq Out.ar(0, osc); // バス0でサウンドを生成}).send(s); // 定義ファイルをサーバに送信

Page 12: Ssaw08 1202

SuperColliderのおさらい

• 定義した楽器で音響生成を開始• サーバインスタンス.sendMsg("/s_new", "楽器名", SynthID, アクション, ターゲットID);• 定義した楽器の音響生成終了• サーバインスタンス.sendMsg("/n_free", SynthID);

// 新規に楽器"sine"を生成s.sendMsg("/s_new", "sine", n = s.nextNodeID, 0, 1);

// 楽器"sine"を終了s.sendMsg("/n_free", n);

Page 13: Ssaw08 1202

SuperColliderのおさらい

• 演奏中の楽器のコントロール• SynthDefのパラメータ (引数) を変更する• サーバインスタンス.sendMsg("/n_set", SynthID, "引数名", 値);

// 新規に楽器"sine"を生成s.sendMsg("/s_new", "sine", n = s.nextNodeID, 0, 1);

//周波数"freq"を1600Hzに変更s.sendMsg("/n_set", n, "freq", 1600);//周波数"freq"を100Hzに変更s.sendMsg("/n_set", n, "freq", 100);

// 楽器"sine"を終了s.sendMsg("/n_free", n);

Page 14: Ssaw08 1202

SuperColliderのおさらい

• もう少し複雑な楽器の定義の例

//基本周波数とそれと同調したノコギリ波//左右のチャンネルの周波数を微妙にずらす//リバーブを付加SynthDef("syncsaw-stereo", { arg sync=50, saw=55, detune=0.1, mul=0.5, wet=0.25, room=0.5, damp=0.5; var mix; mix = SyncSaw.ar([sync+detune, sync-detune] , saw, mul); mix = FreeVerb2.ar(mix[0], mix[1], wet, room, damp); Out.ar(0, mix);}).send(s);)

s.sendMsg("/s_new", "syncsaw-stereo", n = s.nextNodeID, 0, 1);s.sendMsg("/n_set", n, "sync", 30, "saw", 45);s.sendMsg("/n_set", n, "detune", 0.08);s.sendMsg("/n_set", n, "room", 1, "wet", 0.3, "damp", 0.7);s.sendMsg("/n_free", n);

Page 15: Ssaw08 1202

SCのSynthをMaxからコントロール

• SuperColliderで定義したSynthのパラメータを、Max/MSPからコントロールできるようにしてみる

• "サーバインスタンス.sendmsg" の部分をMaxから送出する• udpsendオブジェクトを利用

Page 16: Ssaw08 1202

SCのSynthをMaxからコントロール

• SuperCollider側:楽器の定義

(//基本周波数とそれと同調したノコギリ波//左右のチャンネルの周波数を微妙にずらす//レゾナンス付きローパスフィルターを追加//リバーブを付加SynthDef("syncsaw-stereo", { arg sync=40, saw=45, detune=0.1, lpf=200, rq=0.7, mul=0.5, wet=0.25, room=0.5, damp=0.5; var mix; mix = SyncSaw.ar([sync+detune, sync-detune] , saw, mul); mix = RLPF.ar(mix, lpf, rq); mix = FreeVerb2.ar(mix[0], mix[1], wet, room, damp); Out.ar(0, mix.softclip);}).send(s);)

Page 17: Ssaw08 1202

SCのSynthをMaxからコントロール

• Max側:パラメータのコントロール

Page 18: Ssaw08 1202

SCのSynthをMaxからコントロール

• プレゼンテーションモードを活用して、GUIを工夫してみる

Page 19: Ssaw08 1202

SCのSynthをMaxからコントロール

• プレゼンテーションモードを外した状態

Page 20: Ssaw08 1202

グラニュラーシンセシス1

• SuperColliderでサンプリングした音をつかって音響合成してみる• グラニュラーシンセシス• 音の粒を大量に生成して、音響合成する手法

• SuperColliderでは、TGrainsというユニットジェネレーターを使うと容易に実現できる

Page 21: Ssaw08 1202

グラニュラーシンセシス1

• SuperCollider側:グラニュラーシンセシスの定義

(//グラニュラーシンセシスSynthDef.new("granular", { arg trate = 100, pos = 0, speed = 1.0, mul = 0.8; var b = 10, dur, clk, pan, wet, mix; dur = 12 / trate; clk = Impulse.kr(trate); pos = pos * BufDur.kr(b) + TRand.kr(0, 0.01, clk); pan = WhiteNoise.kr(1.0); mix = TGrains.ar(2, clk, b, speed, pos, dur, pan, 0.5); mix = mix * mul; Out.ar(0, mix.softclip) }).send(s);)

Page 22: Ssaw08 1202

グラニュラーシンセシス1

• テスト

//サンプルファイルの読込みs.sendMsg("b_allocRead", 10, "sounds/a11wlk01-44_1.aiff");//テストs.sendMsg("/s_new", "granular", n = s.nextNodeID, 0, 1, "gate", 1, "pos", 0.5, "trate", 100);//停止s.sendMsg("/n_free", n);

Page 23: Ssaw08 1202

グラニュラーシンセシス1

• Max側コントローラー

Page 24: Ssaw08 1202

グラニュラーシンセシス1

• プレゼンモードOFF

Page 25: Ssaw08 1202

グラニュラーシンセシス2

• Grainのパラメータをランダムの範囲で指定できるように• pos:サンプルファイルからGrainをとりだす位置• speed:Grainのピッチ• dur:Grainの長さ• pan:Grainの定位

Page 26: Ssaw08 1202

グラニュラーシンセシス2

• SuperCollider側:グラニュラーシンセシスの定義

//グラニュラーシンセシスパラメータは範囲で指定SynthDef.new("granular2", { arg trate = 100, posMin = 0, posMax=1.0, speedMin=0.1, speedMax=1.0, durMin=0.01, durMax=0.1, panMin = -1.0, panMax = 1.0, mul = 0.8; var b = 10, clk, pos, speed, dur, pan, wet, mix; clk = Impulse.kr(trate); pos = BufDur.kr(b) * TRand.kr(posMin, posMax, clk); speed = TRand.kr(speedMin, speedMax, clk); dur = TRand.kr(durMin, durMax, clk); pan = TRand.kr(panMin, panMax, clk); mix = TGrains.ar(2, clk, b, speed, pos, dur, pan, 0.5); mix = mix * mul; Out.ar(0, mix.softclip) }).send(s);

Page 27: Ssaw08 1202

グラニュラーシンセシス2

• Max側コントローラー

Page 28: Ssaw08 1202

グラニュラーシンセシス2

• プレゼンテーションモードOFF