SuperColliderをやる1

けものフレンズが荒れに荒れていて現実がたいへんなことになってしまったので酒を飲みながら一期を見直す日々を過ごしていたらあっという間に生活リズムとかいろんなものが一気に終わったので昔挫折したSuperColliderに突然手を出し始めた。TidalCyclesみたいなライブコーディングの記事はそこそこ見つかるけどSuperColliderみたいなゴリゴリの音響プログラミングについての情報は数年前からほとんど表に出てきてないようだし自分用のメモとして書き始めてみようと思ったのでブログを書くことにした。あと文章を書く練習。

SuperColliderが何かという説明はググれば出てくるので省く。要するに440Hzのサイン波を出力って書いたらそれを出力してくれるみたいなプログラミング言語。音が良いらしい。

とりあえず矢印キーを使うエディタはあまり使いたくないのでatom-supercollider(https://github.com/crucialfelix/atom-supercollider)を入れた。本当はvim用のsupercolliderプラグイン(vimsc(https://github.com/supercollider/scvim))が良かったけれどvimはいまいち補完がよくわかっていないので慣れてない言語ならAtomでの方がいいと思ってAtomにした。どちらかというとVScodeの方が良いしVScodeのSC(SuperCollider)プラグインもあるのだけれどSCの実行ファイルが『~~.exe』という形式にSetting.jsonで変更できない箇所で決定されていて、修正できないわけではないけれどMacで使い続けたらどっかでまた面倒なことに引っかかりそうだったのでそうした。

環境を作るのは割と難航した。最初からAtomに決めていればプラグイン入れるだけで充分だったのだけれどTidalCyclesやvim-supercollidervscode-supercolliderなんかをいちいち寄り道してしまいそのたびに躓いたのがキツかった。実際ほとんど触っていないAtom(実はこれもこれでctagsとかプロジェクトのあたりがおかしくてどうやらなんかこれもちゃんとインストールされてないっぽい)に落ち着いたのは簡単に言うとそれらのせいでこれ以上理想的な環境を作るのが面倒くさくなったからだと思う。

環境構築は面倒だが、ちゃんとプログラミングとかやってないけどTidalCyclesやProcessingみたいなライブコーディングみたいなこともやりたいみたいな人もvimemacみたいなコードエディタのコマンドの使い方を覚えてAtomとかVScodeみたいなGUIプラグインの管理が容易に出来るエディタでvimプラグインやらを入れた上でTidalCyclesなりProcessingなり拡張プラグインを入れて操作するのが良いと思う。多分。emacsは学生時代に諦めたので知らないけどvimのビジュアルモード(特にShift+V。Shift押さえながら下矢印を押すのは苦痛だと気付くと思う)はTidalCyclesでもSuperColliderでもすごくよく使うと思う。AtomVScodeならノーマルモード、インサートモード、ビジュアルモード(これはShift+Vと抜け方さえ知ってれば良いと思う)でのカーソルの動かし方とかを知っておけば充分だと思う。意外とそのうち慣れるし楽ですので是非に。初心者はこれ(Vim初心者に捧ぐ実践的入門 - Qiita)とかやるといいかもしれない。windowsVimはいまいちわからないけど、とりあえず僕はcaps lockをctrl代わりにしている(これはOSの方で指定する)。大抵のページにはインサートモードの抜け方はESCと書いてあるが『ctrl+[』でも抜けれるのでいちいち指を伸ばさない分そちらの方が良い。僕は『jj』にマッピングしたがこれはVScodeVimと頗る相性が悪いのであまり初心者にはおすすめしない。 

というところまで言っておいてなんだけれどブログを始めたきっかけは素のSuperColliderとの併用を考え始めたから。なんでやねん。

というのも、SCの入門ブログ(https://yoppa.org/works/ofbook_study/ofbook_study01.html)等を読んでみると、基本的な使い方、文法には触れられるものの今ひとつ定義や概念が分かりづらくてせっかく音が出せても書かれてる通りにパラメーターをいじっただけでそもそも何をどういじっているのか頭で理解できる気がしなかったし、そこそこSCを使えるようになった暁には音楽制作に活かす、TidalCyclesとかProcessingに拡張を試みる等をしてみるつもりなのでもう少し奥深くまでどういう言語なのか見てみたい(今のままではSinOscがクラスなのかとかそもそもクラスという概念があるのかさえわからん)と、思っていたら先のブログで選択+cmd+dでドキュメントに飛べることを発見したから。しかもそこからOsc.scなんかのファイルを見ると

Osc : PureUGen {

  *ar {

    arg bufnum, freq=440.0, phase=0.0, mul=1.0, add=0.0;

    ^this.multiNew('audio', bufnum, freq, phase).madd(mul, add)

  }

  *kr {

    arg bufnum, freq=440.0, phase=0.0, mul=1.0, add=0.0;

    ^this.multiNew('control', bufnum, freq, phase).madd(mul, add)

  }

}

こんな感じのちょっと見慣れた構文が出現する。どうやらOscはPureUGenの後継クラスのようで、^はリターンかなんか、*はfunctionとかと同じ意味だと推定できる(もちろんthisはthisだ。)。

こういうのこそマウスを使わずに読みたいところなんだけど贅沢を言っていられないしこいつを読み進めて、どういうふうに音を出す仕組みになっているかわかる場所まで辿り着いたり、引数が実数だったりOSCクラスのようなものだったりでも掛け算が出来てそこから音が出るのかを調べていこうと思った次第。

ところでどうでもいいけれどSCでは10+5*2が30だったり[2,2]*3が[6,6](つまりmap)だったりちょっと変な計算が出てくる。こういうところから慣れていかないといけないのかと思うとちょっと疲れる。それで思い出したけどSCはpython拡張みたいなのもあってNumpyとかも使えるらしい。numpyがどの程度SCと相性が良いのかとかnumpyが実際どういうことをやってくれてるのかも知らないけれど例えばpow関数なんかが入っているのであれば自分で書く必要も無いので変な平均律で和音を作ったりしたい時に役立ちそう。そしてそういうのこそクラス化なりしておきたいので、きちんとクラスの書き方とかをわかっておきたい。

疲れたので今日はここまで。