Jste zde

Počítačová syntéza zvuku 2

Pokračování rozboru syntézy zvuku. Podrobnosti o Csound a SAOL.

Prostředí pro tvorbu zvuku na počítači
Pomineme-li MIDI sekvencery a  samplery (i mezi nimi je vynikajícísoftware, třeba sekvencer MEGAMID, který umí sekvence hezky visualisovat,nebo DOSovský FASTRAK,  jenž ovládá SoundBlaster například v pythagorejskémladění) , zbývají pouze simulátory a kompilátory. 

Simulátory jsou programy (s náležitým grafickým rozhraním) určené většinoupro hudebníky. Používají se většinou k simulaci (s pokud možno nejmenšíresolucí) starších analogových nástrojů asi na úrovni Moogova syntezátoru.Zmíním se zde o  programu Generator německé  firmy Native Instruments.

Jedná se o modulární syntezátor, postavený na aditivní syntéze z parabolickýchprůběhů (časově méně náročné, než sinus). Nejzákladnější moduly (oscilátor,násobička, sčítačka…) jsou k disposici pro tvoření dalších bloků i celýchnástrojů. Je zde i velká třída předdefinovaných bloků a nástrojů, kterévšak může uživatel v příjemném grafickém prostředí měnit, stejně tak jakotvořit vlastní. Samozřejmě velkým omezením je výkon počítače. Uživateltedy musí řešit kompromis mezi kvalitou výstupního tónu a  rychlostíprocesoru. (například zmíněným použitím parabolických průběhů místo sinusových).Přesto je výstupní tón velmi věrný. Další výhodnou vlastností je, že nástroje– ač jsou ovládány klasickou MIDI klaviaturou, což nabádá na použití stejnětemperované řady -  ladí čistě (Just Intonation). 

Kompilátory naproti tomu žádné grafické rozhraní nemají, obvykle kompilují,práce v reálném čase není prioritou a proto se volí většinou kvalitnějšímetody (přímá syntéza nebo interpolovaná wave-table syntéza) taktéž rozsahpoužití je větší, než u simulátorů.

Jako zdrojový kód používají buď MIDI sekvenci (potom je nazýváme MIDIrenderery), nebo mají vlastní programovací jazyk.   Některé znich jsou:

  • Nyquist  - Tvůrce: R.B.Dannenberg, Syntax: LISP, platforma:SUN
  • SuperCollider – Tvůrce: J. McCartney, Syntax : front-end 
  • Chant – oficiální jazyk IRCAM (www.ircam.fr)
  • Další dva: Csound a SAOL popíši podrobněji. 


Programovací jazyk Csound

Naprogramovat kompilátor, který vytvoří všechny slyšitelné akustickésignály z relativně krátkých zdrojových kódů a k tomu je dostatečně efektivnínení nijak snadné. Situaci ztěžuje fakt, že nejde o program masové spotřebya vývoj počítačů je dosti rychlý.

Základní požadavky na moderní akustický kompilátor tedy jsou:

  1. Nezávislost na platformě
  2. Modularita 
  3. Kompatibilita směrem k nižším versím

V polovině 80. let Barry Vercoe na MIT přepsal MUSIC 360 do jazyka C. Protožena většině počítačů té doby byl již jazyk C implementován, získal nezávislostna platformě. Jako základ použil Mathewsův kompilátor, jehož syntaxe jevelmi podobná assembleru.  Vhodnou strukturou programu umožnil každému,kdo potřebuje realisovat nějaký nový nástroj, vytvořit jeho definici vprogramovacím jazyku C. Na tuto subrutinu se potom v nové versi Csoundumůže odkazovat již pouze opcode-m. Protože vývoj Csoundu je hrazen grantem,je v public domain GPL.  Standardní kód je aktualisován 2x do roka.

Základy syntaxe zdrojových souborů pro Csound

Z historických i praktických důvodů se zdrojové soubory pro Csound člení na orchestra (*.ORC) a score (*.SCO). Pro archivaci se někdy slučujído jediného souboru (*.CSD), ale není problém je buď ručně, či utilitourozdělit.
Soubor *.SCO  je prostá řídící posloupnost. Co řádek, jeden řídícíkód, co mezera*, to oddělovač částí řídícího kódu. Doba se měří v jednotkáchbeats.  Uvedu a vysvětlím jednoduchý příklad:

f1 0 8192 10 1   ; sine wave table
i1 0.0 1 5000 7.00             ; C (below middle)
i1 1.0 1 5000 7.02  ; D
i1 2.0 1 5000 7.04  ; E
i1 3.0 1 5000 7.05  ; F
i1 4.0 1 5000 7.07  ; G
i1 5.0 1 5000 7.09  ; A
i1 6.0 1 5000 7.11  ; B
i1 7.0 1 5000 8.00  ; C (middle)

Na začátku každého score souboru jsou definice tabelovaných funkcí.Strukturu mají:

f  p1  p2  p3  p4 ...   vyvolávajíGEN subrutinu pro výpočet tabulky.

  • p1 je číslo tabulky (na toto číslo  1 - 200) se funkcíodvolává  v ORC.  (je li negativní, tabulka bude mazána)
  • p2 Doba generace/smazání tabulky  (beats)
  • p3 Velikost tabulky (2**n), (2**n+1)
  • p4 Číslo GEN rutiny, kterou bude tabulka generována
  • p5,p6… závisí na čísle GEN. V našem případě to budou amplitudy harmonických.


Score dále obsahuje řídící posloupnost (p-field), tedy něco jakozobecnění tónů v partituře (někdy se používá název chiméry). 

i p1 p2  p3  p4  ...  - První tři p majípředem určenou aplikaci

  • p1 Číslo nástroje v ORC souboru. Obvykle celé (ve speciálníchpřípadech (partikulární nota) i desetinné, záporné - konec) 
  • p2 Začátek syntézy dané noty (beats)
  • p3 Doba trvání (beats)
  • p4, p5 … závisí na konkrétním nástroji. Obvykle je p4 frekvencea p5 amplituda

Každé score končí návěstím e (end of score).

Uvedený score soubor tedy vygeneruje funkci sínus a vnutí nástroji i1zahrát stupnici, protože v i1 je P4 je amplituda v lineárních jednotkácha P5 výška tónu v pitch class, že je to  ve stejně temperované (EqualTemperated)řadě zjistíme dále.

Orchestra soubor implementuje metody, kterými bude Score kompilováno.Názorný příklad orchestru, který přehraje partituru výše uvedenou je zde:
 

sr = 44100
kr = 100
ksmps = 441
nchnls = 1

 instr 1
k1      linen   p4, 0.05, p3,0.08   ; envelope
a3 oscil k1, 3*cpspch(p5), 1        ; sine wave at freq * 3
a4 oscil k1, 4*cpspch(p5), 1        ; sine wave at freq * 4
aout = a3+a4                        ; sum of partials
 out aout
 endin


Soubor by měl začínat hlavičkou, která říká:

  1. jaký bude vzorkovací kmitočet (sample rate, sr)
  2. jak rychle bude prováděna změna parametrů nástrojů (control rate, kr)
  3. jaký je poměr sr/kr (ksmps)
  4. kolik kanálů bude mít výsledný soubor 


Následuje definice nástroje struktury: 

instr p1 
blabla
out aout
endin

V definici nástroje se používá několik  druhů proměnných, rozlišenýchprvním znakem.

Za základní můžeme považovat asig (audio rate) a ksig (control rate)Výpočty s nimi se provádějí v intervalech, daných hlavičkou. Ještě existujíglobální proměnné, sdílené všemi nástroji: gasig (global audio signal),gksig a proměnné, které se počítají jen při inicialisaci –isig. Inicialisacikaždé proměnné lze provést pomocí opcode-u INIT.
Nástroje se tvoří prostřednictvím matematických operací a opcode-ů,které lze chápat jako externí funkce. Je možné využívat opcode-ů, vytvořenýchve standardu, nebo lze v C implementovat vlastní.
V našem případě se k1 tvoří opcode-m LINEN , jde tedy o funkci, složenouz po částech přímkových úseků s amplitudou p4 a trváním p3 vyčíslovanouv čase, určeném kr.

Vlastní signál se tvoří  opcode-m OSCIL (wave – table oscillator)pomocí tabulky 1 s amplitudou rovnou k1. Zajímavý  je výpočet frekvence.Získává se pomocí funkce cpspch (cycle-per-secunde-pich-class), která vrací kmitočet temperovaného ladění z pich – class. pc je representacetónu v E.T. ladění taková, že celá část značí oktávu a desetinná část vzdálenosttónu od C v půltónech.   Pro náročnější použití je samozřejměmožné do score souboru zapsat přímo kmitočet, nebo použít mikrotonálníopcode-y.

Programovací jazyk SAOL
Csound je  užívaný na široké škále strojů, počínaje osobními počítačia konče studiovým zařízením firmy Analog Devices –SHARC, kde se používámultiprocesorových DSP. Přesto existuje ve světě tendence Csound nahradit. Důvody jsou zřejmé.  Syntax Csoundu neumožňuje typovou kontrolua tak je ladění programů obtížné,  Nové opcode-y nemožno definovatprogramem přímo v Csoundu. Musí se překompilovat kompilátor, což je náročné.

K požadavkům na kompilátor lze dále přičíst:

4.  Nové opcode-y možno definovat v orc souboru 
5. orc soubory musí mít strukturu podobnou nějakému standardnímu vyššímu programovacímu jazyku 
6. Zdrojové dvojice (orc, sco) mají být sdruženy, komprimovány a musíbýt možný streaming

Tyto požadavky se pokusil vyřešit Eric Schreier z laboratoří MIT (machinelistening group pod vedením prof. D.P.W. Ellis-e). Z teoretického pohleduse mu to podařilo, ovšem kompilátor je neefektivní a vyhlídky na přenosstreamů po internetu jsou v nedohlednu.

Programovací jazyk je dvojice StructuredAudioOrchestraLanguage a StructuredAudioScoreLanguage.Je možno tvrdit, že  jak je Csound podobný assembleru, je Saol podobnýCéčku.  Soubory *.SAO  (SAolOrchestra) a .SAS (SAolScore) jemožné zkompilovat do MPEG4 streamu.(*.MP4) a přenášet je po internetu.SAOL byl sice formálně začleněn do specifikace přenosu  syntetickéhozvuku dle normy MPEG, ale kompilace je výpočetně tak náročná, že ještěneexistuje player, který by na PC  tyto streamy v reálném čase přehrál.Že na akademické úrovni Csound nahradí je bezesporu. Domnívám se však,že pro vážnější práci bude Csound nadále používán, protože programy v němjsou kratší a přehlednější. Pro srovnání je možné říci, že Csound budejako Fortran (Krátké a efektivní programy – výkoný opcode v kompilátoru),kdežto Saol bude jako Pascal (efektivní typová kontrola). Nesmíme zapomenout,že v případě jak Csound-u (tam to ale nemá valný význam), tak SAOL-u existujívisualisační toolkity.

Základy syntaxe SAOL-u
Struktura score souboru je velmi podobná Csound-u. Nutná je ale deklaračníčást. Příklad programu uvádím níže: 

global{
srate 44100;
krate 5000;
}
instr bell(freq)
{
ksig env1;ksig env2;ksig env3;ksig env4;ksig env5;ksig env6;ksigenv7; asig op1;asig op2;asig op3;asig op4;asig op5;asig op6;asig op7;
table sine(harm, 2048, 1); 
 env1 = kline(0, 0.0015, 1, 1, 0);
 env2 = kline(0, 0.0015, 0.8, 0.8,0);
 env3 = kline(0, 0.0015, 0.6, 0.2,0);
 env4 = kline(0, 0.0015, 0.4, 0.1,0);
 env5 = kline(0, 0.0015, 0.3, 0.05,0);
 env6 = kline(0, 0.0015, 0.2, 0.025,0); 
 env7 = kline(0, 0.0015, 0.1, 0.0125,0); 
 op1 = oscil(sine, freq)*env1; 
 op2 = oscil(sine, 2.76*freq)*env2; 
 op3 = oscil(sine, 5.4*freq)*env3; 
 op4 = oscil(sine, 8.93*freq)*env4;
 op5 = oscil(sine, 13.34*freq)*env5;
 op6 = oscil(sine, 18.64*freq)*env6;
 op7 = oscil(sine, 31.87*freq)*env7;
output ( 0.1428*op1 + 0.1428*op2 + 0.1428*op3 + 0.1428*op4 + 0.1428*op5+ 0.1428*op6 + 0.1428*op7);
}

První část v programu je deklarace. V ní je (na rozdíl od Csoundu) ivýpočet tabulky.

Protože se proměnné deklarují, můžou se jmenovat libovolně. Všimněmesi také, že vstupy  instrumentu jsou obsaženy v hlavičce instrumentu.V Csoundu to mohlo být kdekoliv v programu.  Proto je orchestr nezávislýna score a implementované nástroje můžou být používány kdekoliv (třebai v MIDI přehrávačích). Z obecného hlediska se Opcode-y neliší příliš odCsoundu. Základních Opcode-ů je však v Saolu podstatně méně. Další lzevšak jednoduše implementovat (struktura stejná, pouze  klíčové slovoinstr nahradíme opcode). V příkladu jde o aditivní syntézu, envn jsou k-proměnné obálek jednotlivých harmonických, opn jsou už obálkované aproměnné. Výsledekzní jako zvonek.

Jazyk SASL
Score soubory mají ovládat nástroje, specifikované jazykem SAOL. Jejich struktura má však blíže k MIDI než k Csound-u Následující ukázkanení pro Csound typická, Je to stejná řídící posloupnost, jako v Csoundu,pouze čas se udává v sekundách.

0.0 bell 1 440
1.0 bell 1 880
2.0 bell 1 660
3.0 bell 1 500

Lepší score je toto (instrument, který jej přehraje, jsme si sice neuvedli,ale není to na závadu):

n2: 1.50 voice1 -1 60 3 0.5
    2.40 n2 control vowel 2
    2.50 n2 control vowel 3
    2.50 n2 control pitch 62
    3.40 n2 control vowel 2
    3.50 n2 control vowel 3
    3.50 n2 control pitch 64
    4.40 n2 control vowel 2
    4.50 n2 control vowel 1
    4.50 n2 control pitch 67
    6.4 n2 control stop 1

Návěští n2 označuje inicializaci nástroje voice1 (s nějakými parametry).Další řádky nejsou nové tóny, ale pouze změny parametrů jediného tónu.Je to analogické některým instrukcím v MIDI. (V Csoundu lze totéž řešitnapříklad  použitím globálních proměnných.) Poslední řádek ukončuječinnost instrumentu.
 

Hodnocení článku: 

Komentáře