2014年2月13日木曜日

【SuperCollider】文法を学ぶ


さてさて、ちょっと音を出してみて「楽しい!」ってなっている訳だけど、ミュージシャンじゃないしいきなり音楽はつくれない、しかも正弦波しか今の所わからない。まぁ、これでもプログラマの端くれではあるので、この正弦波をならすプログラムをちょこっと改造しつつSuperColliderの文法について勉強してみることにした。

結論から火口。いや、書こう。
{
 var x = SinOsc.ar(1000,0.5);
 var y = SinOsc.ar(800,0.3);
 var z = SinOsc.ar(600,0.3);
Out.ar(0,Pan2.ar(x + y + z,0))
}.play
これが
{
 var sineChord = {
  arg col;
  do(col,{arg i;
    Out.ar(0,Pan2.ar(SinOsc.ar(i,0.5)))
    }
  )
 };
 sineChord.value([1000,800,600]).postln
}.play
こんな風になる。この二つは同じ音が出る。SuperColliderのページのLanguage - sclang には
- Single inheritance object-oriented and functional language.
- Similar to Smalltalk or Ruby with syntax similar to C or Javascript
と書いてある。オブジェクト指向と関数型言語ですよ。CかJavaScriptに似た文法をもったSmalltakもしくはRubyに似た言語だよって書いてある(っぽい。)
関数の書き方が
var  square = {arg x; x * x};  // ※1
square.value(8).postln;    // ※2
とそんな感じになる。
※1で関数を作成して、変数に代入。
※2で実行。

※1はJavaScriptっぽいし、上の例でdo(/*配列 */, /*関数*/)みたいなのはなんとなくrubyっぽい気がするぞ!

というわけで、上の二つは同じ音が出る訳ですが、普通のプログラミングとちょっと違うぞって言う面白さがある。音として出力されるのでたとえいくつかの音に分解して逐次実行しても最終的に出てくる音は現実空間で混じり合って同じになったりする。逆に逐次実行するということで時間的な意味合いも出てくる。

そういう意味でプログラミングの意味でも興味深いSuperColliderなのでした。

2014年2月10日月曜日

【Super Collider】ことはじめ


メディア芸術祭に行ってきて、なんか俺もやりたいというありがちで間の抜けた理由から、久々にSuperColliderを立ち上げてみた。

 久々にといっても、以前インストールして一度しか使ったことがなく、音が出るというのとvirturalboxとロゴが似ている(docに並べている)位の知識しかない。
使わないのに似ているというだけで並べられたアイコン
いろいろ試してみようと思ってまずはI googled it!

で、ここら辺とかを見ながらいろいろとやってみる。
{
var x = SinOsc.ar(1000,0.5);
var y = SinOsc.ar(800,0.3);
var z = SinOsc.ar(600,0.3);
Out.ar(0,x) + Out.ar(1,y) + Out.ar(0,Pan2.ar(z,0))
}.play

と簡単に正弦波をならしてみた。
OscというのはOscillatorのことらしい。これは多分シンセサイザーとかやっている人には当然の知識なんだろうなーとか思う。

 プログラミングの面白さもあるので、いろいろ想像するの楽しいなって思いながら、とりあえず今日はこの程度のしかやっていないのでもうすこし触ってみようかなとも思う。