« 2016年10月チュービンゲン出張メモ | 最新のページに戻る | 王と王子と神と天使のどれになりたい?(さうして、このごろ2016年11-12月版) »
■ 音響合成用プログラミング言語SuperColliderいじってます
(4年前くらいに音響合成用プログラミング言語のSuperColliderをいじりはじめて、ブログエントリを作ってたのだけど、もうすこし理解が進んだらと思って放置していた。この先とうぶんスパコラ触る機会なさそうなので、古い情報のままで公開しておきます。)
音響合成用プログラミング言語のSuperColliderをいじっている。Max/MSPとかPure Dataとかのビジュアルプログラミング方式にも興味があったけど、SuperColliderはIDEとかも付くし、ドキュメントも充実しているのでこちらを選択。半分趣味で。
{SinOsc.ar(MouseX.kr(440, 1760))}.play;
これでテルミンみたいな音が出せるのでそれだけで楽しめてしまう。ぜんぜん先に進まない。水の流れる音とかそういった自然っぽい音を合成できるようになるのが元々の目的だったのだけど、はやくも脱線。
{XXX}.play
を
{XXX}.scope
に置き換えると音を鳴らす代わりに波形を表示してくれるっていうんだけど、"Method -scope not found"って出て表示されない。plotメソッドは使えるので、GUIが使えないというわけではない。なんだこれは。
とりあえずサーバーをいったん止めて、
s = FreqScope.server.boot;
FreqScope.new(400, 200, 0);
とかやってみたらStethscopeも開けるようになった。よくわからんが解決。
freq = MouseY.kr(4000, 200, 'exponential', 0.8);
SinOsc.ar(freq+(freq*SinOsc.ar(7,0,0.02)), 0, MouseX.kr(0, 0.9))
こっちが正しいテルミン。ビブラートかかってないとね。
かたっぱしからチュートリアル実行しているところ。SuperCollider tutorial このチュートリアルは、コードを一つ一つ実行しながらコメント文を読んでいくと理解できるようになっていて、すごくよい。
SuperColliderの活用法だけど、Raspberry Piにもインストール可能というところがポイントだと思う。たとえばブッダマシーンを作って、距離センサーかなんかで、手をかざすと音にイフェクトがかかるようにするとか。夏休みの宿題にぜひ。
SuperCollider一人勉強会、闇雲に進めてきたがまだ先は長い。しかしながらドキュメントが充実しているので、やるべき道筋ははっきりしていてとてもよい。日本語の本がないのが難点かと思っていたが、ヘルプドキュメントでだいたい間に合う。Pythonをいじっているときと似た感触。
サンプルのファイルの一つでは、"a study for recreating key (sound) aspects of data.microhelix by Ryoji Ikeda"なんて書いてあったりして、じっさい、50行くらいのコードでかなり再現出来てる。
このチュートリアルのリヴァーヴがすっごくよい。シューゲ的な、洞窟みたいなすっごい深くてうねったリヴァーヴ。これだけずっと聴いて固まっていたら、奥さんからの電話を取り逃した。
wavにexportしてsoundcloudに上げてみた。
いまのところまだどうやったらこういう音になるのか理屈がわかっとらんが。
「SuperColliderで竹内関数音楽」 これも動かしてみたけどいいかんじ。
コメント欄で竹内氏が言及しているTarai(6, 3, 0)もやってみたけど、こちらはそんなには変わらない印象。
一方、Tarai(4, 3, 0)は57小節で終了し、けっこう単調な感じがした。ともあれ、自分で試してみることができるのは、とてもいい。
SuperCollider TUTORIALS / GETTING-STARTED (Scott Wilson and James Harkins)の最後まで辿り着いたところ。けっこう時間がかかった。
順番としては、これをやるまえにほかのもっと短いチュートリアル (田所淳氏のInteractive Music IIや美山 千香士氏のSUPER COLLIDER チュートリアル (1)とチュートリアル (2) )を済ませた。
さらにMark Polishook tutorial (日本語版)をやって、さらに詳しいところをと思ってScott Wilsonに戻ってきたのだが、これはgetting startedというよりは、リファレンスマニュアル的な構成だった。
だって一番最後になってやっとPbindが出てくるし。最後までこないと曲を作ることができない。SuperColliderの特色はgenerativeにできることとサーバ、クライアント構造になっていることだろうからそのへんを詳しく書きたいのだろうとは思うけど、シーケンスの前にバスの話が来るとかおかしくねえか?と思った。つか読み飛ばした。
一番最初に読まれる文書なのだから、とりあえずSCをシーケンサとして使う例を出して、そのあとで音色を色々変えるためにSynthDefをいろいろいじる方法を出して、そのあとでgeenrativeにやるためにはchooseとかを使ってプログラム構造の説明をする、こんな順番ではなかろうか。そのうえで、サーバ、クライアント構造になっているからOSCで通信できて、ネットワーク越しとか、processingと連携できるよみたいな感じで。
とか考えながらネットを探していたら、亡くなったimoutoid氏による「SuperCollider入門者を押し止める為の記事」を見つけた。
自分がPureDataよりもSuperColliderに向かったのは、Labviewよりもmatlabを選んだのと同じ理由で、ビジュアル言語が好きでないというか、端的にマウスが使いたくないからというか。
ビジュアル言語とCUIの言語の比較でふと思い出したけど、「あなたの人生の物語」に出てくるヘプタポッドの言語ってのはビジュアル言語的だったな。つまり、世界の事態が同時進行しているさまをバイアスをかけないように表象しようとしたら、ビジュアル言語的になるし、それをCUIの言語的に表象しようとするならば関数型言語みたいになるということなんだろうか。うーむよくわからん。
さっそくSuperColliderで短い音のシークエンスを作ってみた。
ついでにgithubの練習も兼ねてコードも上げておいた。
音作るのは楽しいが、パラメータ探しをするのはなかなか難儀。supercollider.jpのwikiを見て、
MouseX.kr(1,100).poll
でマウスの値をpollしてくれるのを知ったので、マウスでパラメータ探しして良かった値で固定、というやり方を見つけた。たぶんいろいろ便利なUGenがありそうなもんだが、とりあえずこれで要は足りる。
「SuperColliderをギターのイフェクターとして使う」
Envはtestできるが、playできない。UGenはplayできないが、{UGen}とくくってfunctionにすればplayできる。UGenはplotできなくて、{UGen}とくくってfunctionにすればplotできる。うーむ、まだわからん。ひとつひとつ憶えていくか。UGenはplayできないが、SynthDefはplayできる。
「SuperColliderショートカットマスターへの道 」 これがすごく役に立った。「SinOsc.ar( 440, 0, 1 ); arはクラスメソッドだから、SinOscクラスオブジェクトから実行可能」
FM音源を作る場合、モジュレーターはキャリアーの周波数を揺らすために、音量としては>1のものをオシレーターとして作る。だからなんかのはずみでモジュレーターを直でOut()に入れてしまうとものすごい大音量が出る。これまでに3回くらいやった。マジ心臓止まる。安全弁がほしい。