sc – いろいろ

SuperCollider勉強中。
今回はクラスシステムの所に関しての理解を深めるテスト。

例えばSinOscを使って音をならすサンプル。

{ SinOsc.ar(440, 0, 0.2) }.play;

前回の通りみてみると、カーリーブラケットに括られている所は関数。
てことは、

f = {SinOsc.ar(440, 0, 0.2)};
f.play()

と一緒のはず。
・・・OK、鳴る。

てことはSinOsc.arは関数を返している。

SinOsc.ar(440, 0, 0.2)
を実行すると、a BinaryOpUGenが得られる。

このaなんとか、ってのがインスタンスのことなのではないかと思います。

例えばSinOscだとかOutだとかPan2だとかはその名前をそのまま返す。
つまりこれがクラスなのでは。

で、

SinOsc.ar

の場合、a SinOscとなる。
やっぱりインスタンスくさいな。

関数を作成した場合はa Function
んー、、、だんだんつながってきたな。

じゃあ今度はこれ。

Function

予想通りFunctionが返ってくる。
とすると{}で括った式は、Functionオブジェクトを作るための略式なんじゃまいか。

という結論に至る前にこれはただ文字列返してるだけじゃないよね?という疑問。
試しに以下を実行。

Fanction

はい、ERROR: Class not defined.出ました。
ってことはやっぱり宣言済みのクラスなんでしょう、実行文と同じ値を返すものは。

とすると前回メッセージとして説明されていたpostlnとかplayは、やっぱりメソッドと解釈して良さそうです。

となると、
SinOsc.ar(440, 0, 0.2)という式は、BinaryOpUGenクラスのインスタンスを作成するためのメソッドで、
この時点でSinOscのインスタンスは作られていないのでクラスメソッドということになりそうです。

んー、なるほど。
書式が分かれば随分OOな言語っぽい感じに思えてきます。

ちなみにarはaudio rateの略で、音波を発生させるもの。
krはcontrol rateで、制御用の波形を生成するもの、と言うことみたいです。
実際にクラスも違うようです。a MulAddってのが返ってきます。

とりあえずscでは大文字で始まるキーワードをみたらクラスだと思えばいろいろと理解しやすそうです。

あとはFunctionが実際に実行出来る形、なのかも。
Function.valueなりFunction.playなりが、Functionクラスのインスタンスに収まった処理を評価する、というメソッド。
とすればoscでサーバに通信しているのはFunctionクラス?

んーこの辺はまだ定かではないのでもうちょい勉強したら詳しく書くかもしれないし書かないかもしれない。。。

って勉強中にちょっとChucKのページをみてみたんですが、
あれです、、、scよりも随分シンプルで記述しやすそうな言語っぽいです。

でもだんだん分かってきたし、名前の威圧感などもscの方があるので(ぇ
このまま勉強を続けることにします。

とりあえずはGetting Startedの続きを。

—————————— 余談
今僕はUnbutuにインストールしてscいじって、geditプラグイン使ってならしてるんですが、
なんかすんごいノイズというかなんというか、、音がブツッブツいうんです。。
なんじゃいと思ってmacで試したらすげーきれいに鳴ってらっしゃいます。。
Linux版の問題かい。

解決方法あるかちょっと探してみますが、しばらくの間勉強期間としては問題ないのでスルーしときます。

—————————— 追記
あっ、しまつた。
ここに詳しくいろいろ書いてあったっぽい。
And What About Functions and Sound?
ざっくりしか読んでなかった・・・。
ちゃんと読み直そう。

ポイントはUGen(unit generator)みたいだ。

— 追々記
結局UGenってのが音を作るためのクラスですよ、ぐらいの捉え方でしばらくは問題なさそう。
フィルタとかスペクトル解析とかオシレータとかその辺全部UGen、ってことになるっぽい。

コメントを残す

メールアドレスが公開されることはありません。