ChucK

UGen osztály

Unit Generator - függvény generátorok (jelgenerátorok), melynek kimenetén olyan szignál jelenik meg, ami felhasználható mint audio- vagy vezérlő szignál. A ChucK nyelvben nincs fixált vezérlési arány (sebesség). Minden UGen tetszőleges aránnyal vezérelhető, az időzítő mechanizmus segítségével saját sebesség adható meg, akár dinamikusan is. A párhuzamosság segítségével szimultán több, egyesével eltérő sebességű UGen alkalmazható, mindegyiknek tetszőleges arányt megadva.

Deklarálás

Minden jelgenerátor objektum, ezért példányosításuk szükséges.

// szinusz oszcillátor példányosítása // az objektum referenciája az s változóba kerül SinOsc s;

Csatlakoztatás

A ChucK operátor (=>>) speciálisan túlterhelt a jelgenerátorokhoz: az egyik UGen másik UGen-hez ChucKolása a megfelelő output(ok) és input(ok) összekötését eredményezi.

// UGen-ek összekötése // audio bemenet (mikrofon) összekapcsolása az audio kimenettel (hangkártya) adc => dac; // UGen lánc kialakítása // szinusz oszcillátor kimenetét egy erősítőre kötjük // az erősítőt pedig az audio kimenetre (a hangkártyára) SinOsc s => Gain g => dac; // Visszacsatolás is létrehozható a hálózatban adc => Gain g1 => DelayL d => dac; // visszacsatolás d => Gain g2 => d;

Jelgenerátorok dinamikusan összeköthetők így létrehozva egy hang szintetizáló hálózatot. Fontos megjegyezni, hogy a fenti kódok csak az összeköttetést hozzák létre, audio jel generálása mindaddig nem történik meg, amíg az idő nem kerül léptetésre.

// hálózat létrehozása SinOsc s => dac; // oszcillátor kezdő frekvenciájának beállítása 440 => s.freq; // idő léptetése, hogy audio jel kerüljön generálásra 1000::ms => now;

Lehetőség van dinamikusan leválasztani már összekötött jelgenerátorokat, az UnChucK operátor (=< vagy !=>) segítségével.

// hálózat létrehozása SinOsc s => dac; // idő léptetése, hogy audio jel kerüljön generálásra 1000::ms => now; // s leválasztása dac-ról s =< dac; // idő léptetése - 1 mp csend 1000::ms => now; // s ismételt dac-ra csatlakoztatása s => dac; // idő léptetése... 1000::ms => now;

Vezérlés (időben)

ChucK-ban lehetőség van a jelgenerátorok beállításainak vezérlésére bármely időpillanatban. Csupán a megfelelő időpillanatig kell léptetni az időt és a akkor kell meghívni az UGen megfelelő metódusait.

// hálózat létrehozása SinOsc s => dac; // kezdeti frekvencia beállítása 440 => s.freq; // idő léptetése 1000::ms => now; // frekvencia módosítása // mivel a vezérlő funkció egy metódus ezért függvényként is hívható s.freq(880);
// hálózat létrehozása SinOsc s => dac; // jelenleg beállított frekvencia elmentése s.freq() => float the_freq;

Minden jelgenerátornak legalább az alábbi vezérlő paraméterei vannak:

Mono, sztereo támogatás

A nyelv támogatja a sztereo (alapértelmezett) és több-csatornás audio feldolgozást. A dac és az adc UGenek több-csatornásak. Több csatornás UGen-ek összekapcsolása esetén, ha egyezik a ki- és bemenetek számossága, akkor alapjáraton a megfelelő (pl. bal kimenet a bal bemenetre, jobb kimenet a jobb bemenetre) be- kimenetek kerülnek összekapcsolásra. Amennyiben sztereo UGen kimenetei kerülnek mono UGen bemenetére, akkor a sztereo kimenetek egy csatornára lesznek keverve. Mono UGen kimenetének sztereo UGen bemenetére kötésekor az egy kimenet lesz duplázva mindkét bemenetre. Stereo UGen-ek rendelkeznek .left és .right paraméterekkel, amikkel egyesével elérhető a bal és jobb csatorna.

Beépített UGen referencia

A jelenleg implementált összes jelgenerátor referenciája itt található.