読者です 読者をやめる 読者になる 読者になる

音の鳴るブログ

鳴らないこともある

SuperCollider をブラウザに移植しようと思う

f:id:mohayonao:20140513114615j:plain

SuperCollider をブラウザに移植しようと思う。前からずっと同じようなこと言っていて駄目な感じするけど、実際駄目な感じで少しずつ進捗している。

当初考えていたのは JavaScriptSuperCollider の良いとこどりみたいな感じだったけど、仕様を考えるのが面倒だし絶対失敗するわと考え直して、完全に SuperCollider に寄せていく方針にした。言語仕様を考えなくて良いので簡単作業になったのは良いのだけど今度はやる気がでなくなって困っている。

必要なのは

  • コンパイラ (sclang を JavaScript に変換する)
  • VM的なやつ (変換した JavaScript を実行するための環境)
  • クラスライブラリ (型とかなんかそういうの)
  • 音声処理をするサーバー

で、コンパイラとクラスライブラリの一部を実装してとりあえず簡単な演算と配列操作くらいは出来るようにはなった。適当にコードを書いて Ctrl+Enter (Command+Enter) で選択範囲もしくはカーソルのある行のコードが実行できる。結果は Console に表示される。音とかスレッドみたいなのは全然できていない。

1 + 2 * 3 // ここで Ctrl+Enter
// -> 9

[ 1, 2, 3 ] * 100
// -> [ 100, 200, 300 ] が出力される

10.rand
// -> 0以上 9以下 の整数(Integer)がランダムに出力される

10.0.rand
// -> 0以上 10未満 の実数(Float)がランダムに出力される

(69..81).collect {|a| a.midicps }
// -> 周波数の配列が出力される(いわゆる map 関数)

(69..81).collect(_.midicps)
// -> 上のやつの簡易記法

やる気が出ないのも結構つらくなってきたので現状を打破しようとこまめにブログを書くことにした。SuperColliderのどうでもよいような細かい仕様についてメモっぽく書こうと思う。