オシレータを配列に
一昨日は配列に音階、昨日は配列にタイミング、今日は配列にオシレータを。例えば4つの音が鳴るとして、その音ごとにオシレータをサイン波、矩形波、三角波、のこぎり波と順番に入れ替える。まあそんなかんじです。
ところが配列に入れるとして配列の型で何度もエラーになるのです。1つ見つけたのが、オシレータを変数に入れてそれを配列に持っていく。
sinosc si; sqrosc sq; triosc tr; sawosc sa; [si, sq, tr, sa] @=> osc oscil[]; <<<oscil[1]>>>;
oscil[]のデータ型が見つけれなくて困っていたんですが、どうにかoscならうまくいきます。ということはフィルタを配列に入れたい場合、また探さないといけないのか?。とりあえずosc以外はダメでした。うまい方法があれば教えていただきたい。ではこれを参考にして昨日以降のコードを改良。
sinosc si; sqrosc sq; triosc tr; sawosc sw; JCRev f => dac; .5 => f.gain; .07 => f.mix; fun void arp(int num[], osc oscil[]) { for(0 => int i; i < num.cap(); i++) { oscil[i] => f;// 接続する std.mtof(num[i]) => oscil[i].freq; 0.5::second => now; oscil[i] =< f;// 接続を断つ } } arp([65, 69, 72, 76], [si, sq, tr, sw]); 0.5::second => now;
これでFM7のコードをアルペジオで、1音づつオシレータを変えることができています。