2016年6月1日水曜日

変数

SuperColliderで面白い音楽を作るとき、
変数を用いていけばスマートな(分かりやすい)音楽を作っていくことができます。

宣言方法は
var 変数名 = 内容;
です。
変数名は、小文字のアルファベットから始める必要があります。

しかし、"s" はserverとして用いられているので、
使えない変数名もあります。




また、他のプログラミング言語と異なる点として、
途中で変数宣言をした際にエラーとなります。
例えば、

var a, b, c;
a=10;
b=16;
c=8;
a+b+c;
var d;
d = a+b+c;

このコードを実行すると、

ERROR: syntax error, unexpected VAR, expecting $end
  in file 'selected text'
  line 6 char 3:

  var d;
  ^^^
  d = a+b+c; 

構文エラーになってしまいます。
なので、

var a, b, c;
var d;
a=10;
b=16;
c=8;
a+b+c;
d = a+b+c;

変数の宣言は頭で行う必要があります。


変数を用いた例として、
まず、次のようなコードがあったとします。

SupperColliderBook Figure1.6より

({
Blip.ar(
TRand.kr(
100, 1000,
Impulse.kr(Line.kr(1, 20, 60))),
TRand.kr(
1, 10, Impulse.kr(Line.kr(1, 20, 60))),
Linen.kr(
Impulse.kr(Line.kr(1, 20, 60)),
0,
0.5,
1/Line.kr(1, 20, 60))
)
}.play)

実行例:


このコードは、変数のでてくるセクションの前にあるので、
変数が使われていません。


これを変数を用いて書き換えたのが次のコードです。

({
var vco, vcf, vca;
var interval = Line.kr(1, 20, 60);
var trigger=Impulse.kr(interval);
var attack = 0, sustin = 0.5;
vco = TRand.kr(100, 1000, trigger);
vcf = TRand.kr(1, 10, trigger);
vca = Linen.kr(trigger, attack, sustin, 1/interval);
Blip.ar(vco, vcf, vca)
}.play)

これで先と同じ結果(TRandを使っているので音は違いますが)になります。
しかし、このままではモノラルなので、これをステレオに変えます。

Blip.ar(vco, vcf, vca)

となっている部分を、

Blip.ar( [vco, vco] , vcf, vca)

とします。


実行例:



後から見直した時に分かりやすい変数名になるように、
また、コメントがなくとも、ある程度何をしているか分かるように、
うまくコーディングしなければならないのは、
どのプログラミング言語でも同じですね。

0 件のコメント:

コメントを投稿