3/27(Sun)に音響合成用プログラミング環境および言語のsupercolliderの勉強会の第14回に参加しました。
以前第11回に参加した様子はこちら。
12回目と13回目は、イベントがあったことと自体気づかずにいました。
会場は日本橋のとあるオフィスの一室で行われ、全部で4名が参加しました。
今回は人数少なめでしたが、前々回は10名越えしていたようです。
もくじ
SuperCollider 初級者向け講座
まず、最初の1時間半で、@moxusさんから、初級者向けのレクチャーをして頂きました。
前回からの続きになります。
ドキュメントとして、githubにある@moxusさんのオリジナルテキストを使用しました。
SynthDefのメソッドの違い
SynthDef
をする際、send
、store
、writeDefFile
というのがあります。
1 2 3 |
SynthDef("test", {arg freq=440; Out.ar(0,SinOsc.ar(freq,0,0.3)); }).send(); |
1 2 3 |
SynthDef("test", {arg freq=440; Out.ar(0,SinOsc.ar(freq,0,0.3)); }).store() |
1 2 3 |
SynthDef("test", {arg freq=440; Out.ar(0,SinOsc.ar(freq,0,0.3)); }).writeDefFile(); |
send
には揮発性があるので、s.quit
すると、起動後にSynthDef
を再度実行する必要があります。
store
は再起動後もSynth
でいきなり音を鳴らすことができます。
writeDefFile
は、サーバーには送らずに、ローカルに定義ファイルを生成します。
保存される場所はMacだと、
/Users/Hoge/Library/Application Support/SuperCollider/synthdefs
です。
store
はsend
とwriteDefFile
を同時に行うということです。
Bus
1 2 3 |
( {SinOsc.ar([500, 800], 0, [0.3, 0.02])}.play; ) |
要素が二つの配列を第一引数に渡しているので、Bus 0とBus 1から音が鳴ります。
ステレオの環境であれば、0が左、1が右になります。
1 2 3 |
( {Mix.new(SinOsc.ar([500, 800], 0, [0.3, 0.02]))}.play; ) |
Mix
を使うと、複数のBusがひとつのBusにミックスされます。
通常Bus 0(左)のみが鳴ります。
リズム
dur
1 |
Pbind(\dur,1).play |
\dur
が1
だと4部音符ということです。デフォルトのserverのクロックのBPM(60BPM)でなり続けます。
1 |
Pbind(\dur, 0.5).play |
0.5
にすると8部音符になります。
noteとmidinote
1 |
Pbind(\note, Pseq([0,1,2,3], 10)).play |
Pseq
は連続した値を持たせるオブジェクトを作ります。
この例でいうと、0、1、2、3という連続した値を10回繰り返すという意味になります。
なので、\note
に0から3までの値を順に渡しています。
\note
は音程を決める引数です。0はmidiノート番号でいる60(音名ではC)になります。半音ずつ移行します。なので1はC#になります。
1 |
Pbind(\midinote, Pseq([0,1,2,3] + 60 , 10)).play |
\midinote
はそのままmidiノート番号を使用します。なので、\note
を使用した例と同じ音を出すためには、上のように+ 60
してあげる必要があります。
ここまで見ると、\note
と\midinote
は60足すかどうかしか違いがないように思えます。
しかし、\note
は\scale
で設定した音階に依存させることができます。
1 2 |
a = Scale.hexPhrygian; Pbind(\scale, a, \degree, Pseq((0..7) ++ (6..0) ++ [\rest], 1), \dur, 0.25).play; |
こんな感じで、ちょっと変わったスケールを使うと面白い旋律になったりします。Scale
クラスのソースコードを見ると、使える音階がわかります。
カーソール上にあるクラスのファイルを見たい場合は、command + Iで開くことができます。
ただ、次の方法でスケールを途中で変更できるらしいのですが、warningが発生し変更できませんね。今度質問しようと思います。
1 |
a.tuning_(\minor); |
以下がWarning。
1 |
WARNING: Scale steps per octave 12 does not match tuning size |
独自のSynthDefをPbindで鳴らす
1 2 3 4 5 |
SynthDef("mySynth",{arg freq,amp; var out; out=Pulse.ar(freq,0.1,amp).dup*EnvGen.ar(Env.perc,doneAction:2);//エンべロープをつけて音を減衰させる。 Out.ar(0,out); }).store; |
このようなSynthDef
をPbind
で鳴らすには、
1 |
Pbind(\instrument,"mySynth",\dur,0.25,\note,Pseq([0,1,2,3,4,5,6,7,8,9],inf),\amp,Prand([0,0.3],inf)).play; |
のように\instrument
で指定します。
上のようにSynthDef
の引数にfreq
を定義しておくと、Pbind
で\note
や\midinote
に自動的に対応してくれます。
例えば、\note
に0を渡してあげれば、周波数でいえば261.6
に変換してmySynth
内で使われるということです。
テンポを変える
Pbind
のplay()
にTempoClock
オブジェクトを渡すことで、テンポを変えることができます。
1 |
Pbind('dur',1).play |
デフォルトのTempoClock
を使うので、60BPMで四分音符がなり続けます。
1 2 |
c = TempoClock(2); Pbind('dur',1).play(c); |
とすると、2倍の速さのテンポになります。つまり、120BPMで四分音符がなり続けます。
複数のPbindを鳴らす
1 2 3 4 5 6 |
Ppar( [ Pbind(\instrument,"mySynth",\dur,0.25,\note,Pseq([0,1,2,3,4,5,6,7,8,9],inf),\amp,Prand([0,0.3],inf)), Pbind(\instrument,"mySynth",\dur,0.25,\note,Pseq([0,1,2,3,4,5,6,7,8,9],inf),\amp,Prand([0,0.3],inf)) ] ).play() |
Ppar
にPbind
の配列を渡すと、同時に複数のPbind
をならせます。
トーンシンセとエフェクターのスケジュール
このあたり説明されていたのですが、帰って考えてみるとわからなくなってしまっていたのですが、備忘用として書いておきます。次回に質問しようと思います。
-
puls
やeffect
はどこかで定義しているのか?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
( Ppar( [ Pbind(\instrument, "pulse", \dur, 2, \midinote, Pseq([0, 5, 7] + 35,inf)), ] ).play() ) ( s.sendMsg("/s_new", \effect, 2000, 1, 1); t = Task({ inf.do({ var fx; fx = Pfunc({ var pat; pat = [400,300,700, 12000].choose; s.sendMsg("/n_set", 2000, \freq, pat); postln("send:") }).asStream; fx.next; 0.5.wait; }) }).play() ) t.stop(); |
その他あがった話題
3.7.7がリリースされた
以下で新バージョンがダウンロード可能になっています。
http://supercollider.github.io/download
スポンサーリンク
synthdefgraphs
http://synthdefgraphs.moxus.org
@moxusさんが作ったサイトです。SuperColliderのコードをもとにMax/MspやPureDataのようなチャートを生成しています。
短いコードでMaxなどの複雑なチャートと同等のものを作れるというSuperColliderの良さを、わかりやすく伝えられそうです。
このチャートの生成は何かのライブラリを使ってると思うのですが、聞きそびれました。今度聞いておきます。
余談ですが、サイト自体はReact.jsが使われているとのことです。
PICrouter2
OSCに対応したフィジカルコントローラーです。
@moxusさんがSuperCollider用のコードを書いたとのことです。
Tidal
TidalはAlex McLean氏によって開発されたHaskellを拡張したライブコーディング(Live Coding)環境で、リズムパターンの生成に特化しており、短いコードでも複雑で面白いリズムを作り出すことができます。
詳しくはクリエイティブ・コーダーの田所淳(@tadokoro)さんのブログ「Tidalでライブコーディング! – セットアップ編」を覗いてみてください。
hsc3
SuperColliderのHaskellクライアントです。
Tidalもそうですが、この界隈だと最近Haskellが熱いのかもしれません。
北京の会場とネット越しの演奏
@tdshusmさんと北京にいる李松(Li Song a.k.a. Sean Lee)さんとのOSCRadioを使ったネット越しのセッションがあるとのことです。
最近の北京は政府による統制がきつい分、こういったアバンギャルドなシーンは逆に盛り上がっていて、ゲリラ的な演奏会をするのが流行っているそうです。
Tokyo SuperColliderのSlack
Tokyo SuperColliderでは、Slackを始めました。SuperColliderに興味がある人なら誰でも参加できます。
告知や質問に使うことができ、#ask-anythingというchannelでわからないことを質問してOKだそうです。
参加の仕方は、以下のページでメールアドレスを登録すると、Slackから招待メールがきますのでそれに従っていけば参加できます。
https://tksupersollider.herokuapp.com
ホームページの移行
今まではblogspotのブログでTokyo SuperColliderの公式な情報を発信していましたが、今後はgithub.ioでサイトを運営するそうです。
github.ioの良い点は、Jekyllというサイトジェネレイターを使えば、github上で編集することで自動的にサイトを更新してくれることです。
旧サイト
http://tokyosupercollider.blogspot.jp
新サイト
http://tksupercollider.github.io
スポンサーリンク
次回(Tokyo SuperCollider 15)について
次回は既にconnpass上で募集開始していますね。
一部と二部に分かれていて、一部は女性限定のようです。
女性のSuperCollider使いのかたは@Craftwifeさんが有名ですが、どのくらいのかたが興味を持っているのでしょうか。
また、二部ではいくつか発表が予定されています。
なんと、さきほど触れた@tadokoroさんによるTidalの説明もあるそうです。
さいごに
今回は、初級者向け講座で@moxusさんが実際に音を出す作業をしているのを見れて非常に勉強になりました。
やはりドキュメントだけでなく、実際に操作している様子を見ると理解のしやすさが前々違いますね。
また、Tokyo SuperColliderは今後もっと盛り上げていこうという雰囲気がありました。なので、女性向けのイベントも開催したり、色んなかたに登壇をしてもらうようにしているみたいです。
自分も早く勉強会で登壇できるくらいにはなりたいですね。
と前回も言っていた気がしますがw