ならば

音とかで遊んでいたログ

時間

ChucKは時間の概念が言語の根幹に組み込まれて*1いて、プログラマがコントロールできる。

内部型として時 time と継続期間 dur がある。dur として用意されている単位はミリ秒から週までのms、second、minute、hour、day、weekと自分には意味不明なsamp。例えば二分三十秒は

2::minute + 30::second

でOK。「::」は一体何なんだ。

VM内部での現在時間を保持するのは time型の now というキーワードで、こいつをいじることで時は進む*2。進め方はChucK演算子を使って、

  • dur型 => now : 指定した継続期間だけ時を進める
  • time型 => now : 指定した時間になるまで時を進める

とやる。
無意味にFizzBuzzを書き換えてみた。一分間0.5秒毎に数を数え上げていくバージョン。

now + 1::minute => time later;  // 今から一分後
1 => int i;
while(now < later) {
    if (i % 15 == 0) <<<"FizzBuzz">>>;
    else if (i % 3 == 0) <<<"Fizz">>>;
    else if (i % 5 == 0) <<<"Buzz">>>;
    else <<<i>>>;
    i++;
    .5::second => now;          // 0.5秒進める
}

まだ音は出ない。

*1:strongly-timed

*2:でも戻せない。時間の矢