Tokyo SuperCollider 14に参加しました

SuperCollider

3/27(Sun)に音響合成用プログラミング環境および言語のsupercolliderの勉強会の第14回に参加しました。

以前第11回に参加した様子はこちら
12回目と13回目は、イベントがあったことと自体気づかずにいました。

会場は日本橋のとあるオフィスの一室で行われ、全部で4名が参加しました。
今回は人数少なめでしたが、前々回は10名越えしていたようです。

  1. SuperCollider 初級者向け講座
    1. SynthDefのメソッドの違い
    2. Bus
    3. リズム
  2. その他あがった話題
    1. 3.7.7がリリースされた
    2. synthdefgraphs
    3. PICrouter2
    4. Tidal
    5. hsc3
    6. 北京の会場とネット越しの演奏
    7. Tokyo SuperColliderのSlack
    8. ホームページの移行
    9. 次回(Tokyo SuperCollider 15)について
  3. さいごに

SuperCollider 初級者向け講座

まず、最初の1時間半で、@moxusさんから、初級者向けのレクチャーをして頂きました。

前回からの続きになります。

ドキュメントとして、githubにある@moxusさんのオリジナルテキストを使用しました。

SynthDefのメソッドの違い

SynthDefをする際、sendstorewriteDefFileというのがあります。

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

です。

storesendwriteDefFileを同時に行うということです。

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

\dur1だと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;

このようなSynthDefPbindで鳴らすには、

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内で使われるということです。

テンポを変える

Pbindplay()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()

PparPbindの配列を渡すと、同時に複数のPbindをならせます。

トーンシンセとエフェクターのスケジュール

このあたり説明されていたのですが、帰って考えてみるとわからなくなってしまっていたのですが、備忘用として書いておきます。次回に質問しようと思います。

  • pulseffectはどこかで定義しているのか?
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

synthdefgraphs

http://synthdefgraphs.moxus.org

@moxusさんが作ったサイトです。SuperColliderのコードをもとにMax/MspやPureDataのようなチャートを生成しています。

短いコードでMaxなどの複雑なチャートと同等のものを作れるというSuperColliderの良さを、わかりやすく伝えられそうです。

このチャートの生成は何かのライブラリを使ってると思うのですが、聞きそびれました。今度聞いておきます。

余談ですが、サイト自体はReact.jsが使われているとのことです。

PICrouter2

PICrouter2

http://atelier.tkrworks.net/

OSCに対応したフィジカルコントローラーです。
@moxusさんがSuperCollider用のコードを書いたとのことです。

SC_Demo_Code

Tidal

http://slab.org/tidal/

TidalはAlex McLean氏によって開発されたHaskellを拡張したライブコーディング(Live Coding)環境で、リズムパターンの生成に特化しており、短いコードでも複雑で面白いリズムを作り出すことができます。

詳しくはクリエイティブ・コーダーの田所淳(@tadokoro)さんのブログ「Tidalでライブコーディング! – セットアップ編」を覗いてみてください。

hsc3

hsc3: Haskell SuperCollider

SuperColliderのHaskellクライアントです。
Tidalもそうですが、この界隈だと最近Haskellが熱いのかもしれません。

北京の会場とネット越しの演奏

@tdshusmさんと北京にいる李松(Li Song a.k.a. Sean Lee)さんとのOSCRadioを使ったネット越しのセッションがあるとのことです。

密集音乐会34 Miji Concert 34

最近の北京は政府による統制がきつい分、こういったアバンギャルドなシーンは逆に盛り上がっていて、ゲリラ的な演奏会をするのが流行っているそうです。

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上で募集開始していますね。

Tokyo SuperCollider #15

一部と二部に分かれていて、一部は女性限定のようです。

女性のSuperCollider使いのかたは@Craftwifeさんが有名ですが、どのくらいのかたが興味を持っているのでしょうか。

また、二部ではいくつか発表が予定されています。
なんと、さきほど触れた@tadokoroさんによるTidalの説明もあるそうです。

さいごに

今回は、初級者向け講座で@moxusさんが実際に音を出す作業をしているのを見れて非常に勉強になりました。

やはりドキュメントだけでなく、実際に操作している様子を見ると理解のしやすさが前々違いますね。

また、Tokyo SuperColliderは今後もっと盛り上げていこうという雰囲気がありました。なので、女性向けのイベントも開催したり、色んなかたに登壇をしてもらうようにしているみたいです。

自分も早く勉強会で登壇できるくらいにはなりたいですね。
と前回も言っていた気がしますがw