ChucK

Időkezelés

A ChucK "erősen időzített" nyelv, az idő fogalma a nyelv szerves részét lépezi. A nyelv lehetőséget ad a programozó számára, hogy rugalmas és precíz módon kezelje az időt, és így a hang előállítását.

Idő és időtartam

Az idő és időtartam a nyelv beépített típusai. A time egy időpillanatot reprezentál (a ChucKi idő kezdetéhez viszonyítva), a dur pedig egy időtartamot (ugyanazokkal az egységekkel, mint a time).

// egy másodpercnyi időtartam 1::second => dur foo; // egy időpillanat now + foo => time later;

Az idő és időtartam segítségéval számos aritmetikai művelet is végezhető.

// 0.5 másodperc egy negyed .5::second => dur quarter; // 4 negyed egy egész 4::quarter => dur whole;

A ChucK számos beépített időtartamot tartalmaz.

Ezek használhatók időtartamok megadására.

// fél minta időtartama .5::samp => dur foo; // húsz hét 20::week => dur waithere; // többféle időtartam kombinációja 2::minute + 30::second => dur bar; // ugyanaz, mint fent 2.5::minute => dur bar;

Aritmetikai műveletek idővel és időtartammal

A ChucKban a time és dur típusokon végzett műveleteknek jól definiált, logikus jelentésük van.

// time + dur eredménye time now + 10::second => time later; // time - time eredménye dur later - now => dur D; // dur + dur eredménye dur 10::second + 100::samp => dur foo; // dur - dur eredménye dur 10::second - 100::samp => dur bar; // dur / dur eredménye szám 10::second / 20::ms => float n; // time mod dur eredménye dur now % 1::second => dur remainder; // szinkronizálás fél másodpercre .5::second => dur T; T - (now % T) => now; // time értékek összehasonlítása if( t1 < t2 ) // csináljunk valamit... // dur értékek összehasonlítása if( 900::ms < 1::second ) <<< "yay!" >>>;

now

A now kulcsszó használható az idő vezérlésére. Néhány tulajdonsága:

// kiszámítjuk "5 másodperc múlva" értékét now + 5::second => time later; // amíg el nem érjük later-t... while( now < later ) { // now értékének kiírása <<< now >>>; // idő léptetése 1 másodperccel 1::second => now; }

Idő léptetése

Az idő léptetése lehetővé teszi más shredek futását, és az audió szabályozott előállítását. Az idő léptetésének fajtái:

Idő léptetése időtartammal

// idő léptetése 1 másodperccel 1::second => now; // idő léptetése 100 ezredmásodperccel 100::ms => now; // idő léptetése 1 mintával 1::samp => now; // idő léptetése kevesebb, mit 1 mintával .024::samp => now;

Idő léptetése időpillanatig

// later kiszámítása now + 4::hour => time later; // idő léptetése later-ig later => now;

A ChucK sosem mulaszt el egyetlen időpontot sem (kivéve ha össeomlik a virtuális gép)! A cél időpillanatnak nagyobb-egyenlőnek kell lennie now-nál, vagy kivétel váltódik ki.

Idő léptetése eseménnyel

// várakozás eseményre e => now;

A léptetés bárhol elhelyezhető a kódban.

// útvonal: szinusz oszcillátor -> kimenet SinOsc s => dac; // végtelen ciklus while( true ) { // véletlenszerű frekvencia 30 és 1000 között Std.rand2f( 30, 1000 ) => s.freq; // idő léptetése 100 ezredmásodperccel 100::ms => now; }

Nincs megkötés az idő léptetésének mértékére (a lebegőpontos típus pontosságán kívül). Legyen az időtartam egy ezredmásodperc, egy minta, vagy tíz év, a rendszer annak megfelelően, determinisztikusan fog viselkedni.