音を鳴らす
今のままだとジョン・ケージの有名な曲くらいしか再現できないので音の鳴らし方を。チュートリアルを見ると、まずはサイン波を作って鳴らそう、と書いてある…。音は波だそうで、波の形とか高さによって異なる音になるらしい。つまり適当な波を作ってそれをいじってやれば色々な音が出せる。波形のひとつがサイン波(正弦波)で、オルガンの音に近い音になる。
サイン波を作って2秒鳴らすコードは、
SinOsc s => dac; 2::second => now;
SinOscってのはサイン波のオシレータ*1で、それを作って"s"で呼び出せるようにしておく。dacはD/Aコンバータといって、ここではオーディオ出力になる。で、sをdacにChucK演算子でつなぐことでサイン波をdacに入力して音として出力できるようになる。入力=>出力という形で、ChucK演算子は入出力をつなぐときにも使う。つないだだけではダメで、音を鳴らすには時を進める必要がある。ずっと鳴らし続けるには二行目を
while(true) 2::second => now;
にすればいい。無限ループ。止めるときはminiAudicleなら"Remove Shred"を押す。
波の要素には形の他に周波数(単位はHz)というのがあって、これを変えると音の高さが変わる。SinOscでは周波数はfreqというパラメータで読み書きできる。タイマーっぽく三分後に440Hz*2の音を鳴らすには
3::minute => now; SinOsc s => dac; 440 => s.freq; 2::second => now;
でOK。
個人差も大きいが、ヒトはおよそ20Hzから20000Hzあたりの音まで聴き取ることができるらしい。ということで自分がどれくらいの範囲聴けるかを簡単に調べるコードを書いてみたが、可聴域ぎりぎりの音は短くてもかなり不快だった。試すんじゃなかった。