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.
- Minden jelgenerátor objektum (nem primitív típus).
- Minden jelgenártor az UGen osztály leszármazottja.
- A
ugenA => ugenB
művelet a ugenA
UGen kimenetét a ugenB
UGen bemenetére köti.
- A jelgenerátorok vezérlése metódusaik hívásával történik.
- Minden jelgenerátor rendelkezik a következő függvényekkel:
gain, op, channels, chan, last
.
- Három alapértelmezett, globális UGen létezik:
adc, dac, blackhole
.
- A jelgenerátorok különleges módon lettek integrálva a virtuális gépbe úgy, hogy
az audio jel minden egyes mintavétel esetén kerül kiszámításra, ameddig
az idő léptetve van.
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:
- gain(float) (float): hangerő szabályzás (set/get)
- last() (float): utolsó számított érték lekérdezése,
ha több csatorna van, akkor átlagol (get)
- channels() (int): a csatornák számának lekérdezése (get)
- chan(int) (UGen): az n-edik csatornának referenciájának lekérdezése,
null
, ha nincsen az adott indexen (get)
- op(int) (int): művelet módjának szabályzása (set/get)
- 0 : stop - a kimenet mindig 0 érték
- 1 : normál - összeadja a bemeteket (alapértelmezett)
- 2 : normál - az első becsatlakozott inputtól kezdve kivonja az input értékeket
- 3 : normál - összeszorozza az inputokat
- 4 : normál - az első becsatlakozott inputtól kezdve elosztja az input értékeket
- -1 : átereszt - minden bemenet összegzése, direktben a kimenetre adva
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ó.