タイミング

昨日は配列で音階を実現しましたが、音が鳴るタイミングは定数でした。そこで音が鳴るタイミングも配列の中に入れてみる。しかし時間は

1::second => dur jikan;

このようにちょっと変わっているので試しにいくつか実験してみる。

[1::second, 2::second, 3::second] @=> dur tim;
<<<tim[1]>>>;

実行結果は88200.000000 :(dur)でした。わかりづらいのですがサンプル数を返しています。1秒は44100ということです。

[1, 2, 3] @=> int miu;
miu[1]::second => dur tim;
<<<tim>>>;

こちらのほうがいい。さあじゃ、昨日のコードを改良して関数arpの第2引数にタイミングを記録した配列を。ちょっと変えてwavファイルを書き出してみた。

sinosc s => JCRev f =>  WvOut w => blackhole;
"foo++.wav" => w.wavFilename;
.5 => f.gain;
.07 => f.mix;
fun void arp(int num[], float tim[])
{
   for(0 => int i; i < num.cap(); i++)
   {
       std.mtof(num[i]) => s.freq;
       tim[i]::second => now;
   }
}
arp([65, 69, 72, 76], [0.3, 0.5, 0.7, 1.0]);
0.5::second => now;