ˇ P. J. Vejvanovske ´ho Krome ˇr ˇ´ıˇ Konzervator z Materi´ aly pro v´ yuku IKT v hudbˇe (2015/2016)
Vyuˇzit´ı Riemannovy teorie k automatizaci hudebn´ı sazby v syst´emu Lilypond
ˇ ska Adam Siˇ
1
´ Uvod do implementace
V tomto textu nast´ın´ıme moˇznosti aplikace poˇc´ıtaˇcov´eho programov´an´ı a sazby notov´ ych z´ apis˚ u v Riemannovˇe1 teorii hudebn´ı harmonie. Z˚ ustaneme poplatni z´ akladn´ım omezen´ım t´eto teorie jako je ignorov´an´ı okt´avov´eho ˇclenˇen´ı t´on˚ u, stejnˇe jako jejich enharmonick´e ch´ap´an´ı s t´ım, ˇze tyto nedostatky mohou slouˇzit jako n´ amˇety pro samostatnou studentskou ˇcinnost. Pokus´ıme se o implementaci z´ akladn´ıch operac´ı teorie v jazyce Haskell2 . Sazbu notov´ ych z´apis˚ u zajist´ı syst´em Lilypond3 . Podrobnˇejˇs´ı informace ohlednˇe technick´ ych detail˚ u pr´ace s pˇredstaven´ ymi syst´emy nalezne ˇcten´aˇr v posledn´ı kapitole textu.
2
Zaveden´ı jmen t´ on˚ u
V Riemanovˇe teorii ztotoˇzn ˇujeme jm´ena t´on˚ u s dvan´acti ˇc´ısly od nuly do jeden´ acti. Prvn´ım samozˇrejm´ ym probl´emem je tedy nemoˇznost (enharmonick´eho) rozliˇsen´ı mezi kˇr´ıˇzky a b´eˇcky. V programov´em k´ody budeme tedy vytv´aˇret obˇe dvˇe varianty v´ ypisu ˇc´ıseln´ ych (t´onov´ ych) ˇrad. Je zˇrejm´e, ˇze d´ıky tomuto faktu, nelze oˇcek´ avat sto procentn´ı korektnost z hlediska klasick´e hudebn´ı teorie. 1 https://en.wikipedia.org/wiki/Neo-Riemannian
theory (cit. 24.4.2016)
2 https://www.haskell.org/hugs/pages/downloading.htm 3 http://lilypond.org/download.html,
http://frescobaldi.org/download
1
Nebudeme hned rozeb´ırat vˇsechny aspekty jazyka Haskell. D´ıky jeho funkcion´ aln´ımu z´ apisu budou implementace definic teorie velmi pˇr´ımoˇcar´e. Vˇzdy kdyˇz to jen trochu p˚ ujde vyuˇzijeme trik˚ u pro odstranˇen´ı technikc´ yh probl´em˚ u. V prvn´ı definici funkce ton stanov´ıme vˇsem ˇc´ısl˚ um pˇr´ısluˇsn´a jm´ena t´on˚ u s kˇr´ıˇzky. N´ asleduj´ıc´ı ˇr´ adky (a dalˇs´ı definice) je tˇreba uloˇzit do poˇc´ıtaˇcov´eho souboru se spr´ avnou pˇr´ıponou, napˇr. tonnetz.hs. ton ton ton ton ton ton ton ton ton ton ton ton ton
0 = " c" 1 = " cis" 2 = " d" 3 = " dis" 4 = " e" 5 = " f" 6 = " fis" 7 = " g" 8 = " gis" 9 = " a" 10 = " ais" 11 = " b" x = ton (x ‘mod‘ 12)
Funkce ton pˇrevede jedno ˇc´ıslo na jm´eno t´onu, kter´e ˇc´ıslo zastupuje. V jazyce ˇ Haskell m˚ uˇzeme jednoduˇse pracovat s cel´ ymi ˇradami ˇc´ısel (a tedy t´on˚ u). Radu ˇc´ısel zad´ ame pomoc´ı hranat´ ych z´avorek napˇr. takto: [0,4,7,4,4,2,4]. Pro pˇreveden´ı cel´e takov´e ˇrady na jm´ena t´on˚ u v syst´emu Lilypond definujeme funkci tony. tony s = concat (map ton s) Zb´ yv´ a doplnit paraleln´ı funkce tonB a tonyB, kter´e budou pˇrekl´adat ˇc´ısla na n´azvy t´ on˚ u s b´eˇcky. Staˇc´ı doplnit n´asleduj´ıc´ı ˇr´adky k´odu. tonB 1 = " des" tonB 3 = " es" tonB 6 = " ges" tonB 8 = " as" tonB 10 = " bes" tonB x = ton x tonyB s = concat (map tonB s)
Transpozice a inverze Uˇzit´ı pˇredstaven´ ych funkc´ı nab´ yv´a na efektivitˇe pˇri pouˇzit´ı dvou z´akladn´ıch operac´ı Riemannovy teorie transpozice a inverze. Obˇe operace lze opˇet pˇr´ımoˇcaˇre implementovat, kaˇzdou operaci n´asleduje rozˇs´ıˇren´ı na ˇradu ˇc´ısel.
2
t n x trans i n x inv n
= n = s
(x + n) ‘mod‘ 12 s = map (t n) s (-x + n) ‘mod‘ 12 = map (i n) s
Stupnice Nyn´ı m˚ uˇzeme pˇredstavit prvn´ı moˇznosti automatizace hudebn´ı sazby na pˇr´ıkladu stupnic. Stupnice je t´ onov´a ˇrada vznikl´a historicky, tud´ıˇz je tˇreba definovat z´ akladn´ı stupnice jako konstanty. cdur = [0,2,4,5,7,9,11,0] amoll = [9,11,0,2,4,5,7,9] Dalˇs´ı stupnice ale lze z´ıskat automaticky. Je nutn´e zd˚ uraznit, ˇze pˇredstaven´ y syst´em v obou pˇr´ıpadech kˇr´ıˇzk˚ u i b´eˇcek rozezn´av´a pouze pˇet prvn´ıch tˇechto pˇredznamen´ an´ı. Stupnice vzd´alen´e jiˇz nejsou vyps´any korektnˇe z hlediska hudebn´ı harmonie, z hlediska enharmonick´e z´amˇeny t´on˚ u (a tedy napˇr. v´ ystupu MIDI) jsou vˇsechny stupnice v poˇr´adku. Pokud definice tonnetz.hs otevˇreme4 pomoc´ı programu Hugs (WinHugs), dostaneme moˇznost vyuˇz´ıvat definovan´e funkce. Pˇr´ıklady povel˚ u pro syst´em Hugs budou vˇzdy uvozeny v´ yzvou Main> a bude je n´asledovat v´ ysledek interpretace povelu na novem ˇr´ adku. Pro zaˇc´ atek zkus´ıme funkˇcnost zadan´ ych funkc´ı5 . N´asleduj´ıc´ı ˇr´adky ukazuj´ı ˇz´ adanou interakci se syst´emem Hugs. Main> ton 6 " fis" Main> tonB 10 " bes" Main> tony [2,6,9] " d fis a" Main> tonyB [3,7,10] " es g bes" V generov´ an´ı stupnic zaˇcneme (informaticky) od nuly. N´asleduj´ıc´ı povel vyp´ıˇse stupnici cdur, kterou m´ ame zadanou jako konstantu. Main> tony (trans 0 cdur) " c d e f g a b c" 4 Pokud po otevˇ ren´ı vid´ıte v´ yzvu Main> probˇ ehlo vˇse v poˇr´ adku. Pokud vid´ıte chybov´ y v´ ypis a v´ yzvu Hugs>, je ve vaˇsem souboru nˇ ejak´ y pˇreklep. 5 Definovan´ e funkce lze vypsat povelem Main>:b
3
Dalˇs´ı stupnice s jedn´ım kˇr´ıˇzkem (G dur) zaˇc´ın´a o sedm p˚ ult´on˚ u (tj. kvintu) v´ yˇs neˇz C dur. S kaˇzd´ ym dalˇs´ım posunem o sedm (kvintov´ ym) vznik´a dalˇs´ı stupnice. Main> " g a Main> " d e Main> " a b
tony (trans 7 cdur) b c d e fis g" tony (trans 14 cdur) fis g a b cis d" tony (trans 21 cdur) cis d e fis gis a"
Stupnice s b´eˇcky vznikaj´ı pˇri kvartov´ ych posunech, tj. posunech o pˇet p˚ ult´on˚ u. Main> tonyB (trans 5 cdur) " f g a bes c d e f" Main> tonyB (trans 10 cdur) " bes c d es f g a bes" Main> tonyB (trans 15 cdur) " es f g as bes c d es"
Pˇ r´ıklady sazby Pˇredstaven´e funkce lze pouˇz´ıt pˇri tvorbˇe nejr˚ uznˇejˇs´ıch (chromatick´ ych) cviˇcen´ı. Rozklady kvintakord˚ u lze v postupu po kvart´ach definovat tˇreba takto (pˇripom´ın´ ame ˇze v´ ysledek je vhodnˇejˇs´ı pouˇz´ıt sp´ıˇse sluchovˇe“ v MIDI, protoˇze ” z hlediska hudebn´ı teorie nejsou vˇsechna jm´ena t´on˚ u korektn´ı): Main> concat [ tonyB (trans i [0,4,7]) | i<-[0,5,10,15,20,25,30] ] " c e g f a c bes d f es g bes as c es des f as ges bes des"
Inverze mˇen´ı t´ onorod melodie a umoˇzn ˇuje z´ıskat zaj´ımav´e n´amˇety z jiˇz existuj´ıc´ı n´ apˇevk˚ u. Pokud vezmeme napˇr´ıklad t´ony lidov´e p´ısnˇe Ovˇc´aci, ˇctver´aci“, ” z´ısk´ ame postup v f moll: Main> tonyB (inv 0 [0,4,7,4,4,2,4,5,2,4,2,0]) " c as f as as bes as g bes as bes c"
4
3
Generov´ an´ı a sazba akord˚ u
Kvintakord je trojice t´ on˚ u znˇej´ıc´ıch z´aroveˇ n. V syst´emu Lilypond takov´e souzvuky uzav´ır´ ame do lomen´ ych z´avorek <>. Jak lze vidˇet v posledn´ım pˇr´ıkladu, inverze tvoˇr´ı z durov´eho kvintakordu [0,4,7] trojici t´on˚ u [0,8,5] coˇz je pozp´ atku jmenovan´ y mollov´ y kvintakord. T´onorod tedy mus´ıme v implementaci rozeznat, takˇze definujeme predik´aty dur a moll. dur [x,y,z] = ((x+4) ‘mod‘ 12 == y) && ((x+7) ‘mod‘ 12 == z) dur _ = False moll [x,y,z] = ((x+8) ‘mod‘ 12 == y) && ((x+5) ‘mod‘ 12 == z) moll _ = False N´ asleduj´ı definice funkc´ı akord a akordB, kter´e trojici t´on˚ u pˇreloˇz´ı na z´apis jejich souzvuku v syst´emu Lilypond. Poˇrad´ı t´on˚ u mollov´eho kvintakordu mus´ı b´ yt opaˇcn´ a. akord s = if moll s then " <" ++ tony (reverse s) ++ ">" else " <" ++ tony s ++ ">" akordB s = if moll s then " <" ++ tonyB (reverse s) ++ ">" else " <" ++ tonyB s ++ ">" Stejnˇe jako v pˇr´ıpadˇe jednotliv´ ych t´on˚ u, kter´e tvoˇr´ı ˇrady, budou n´as zaj´ımat ˇrady akord˚ u. Posledn´ı dvˇe funkce vypisuj´ı libovoln´ y poˇcet akord˚ u najednou, napˇr´ıklad v t´ oninˇe C dur zad´ame TSD jako [[0,4,7],[5,9,0],[7,11,2]]. akordy s = concat (map akord s) akordyB s = concat (map akordB s) Poznamenejme, ˇze v tomto pˇr´ıpadˇe ned´av´a v´ ypis s kˇr´ıˇzky nebo s b´eˇcky stejn´ y smysl jako pˇri pr´ aci s ˇradou t´on˚ u. Akord s´am bˇeˇznˇe zad´av´a t´oninu, jej´ıˇz pˇredznamen´ an´ı je urˇceno. Napsat adekv´atn´ı funkci akordyT m˚ uˇze ˇcten´aˇr zkusit jako cviˇcen´ı. Na z´ avˇer uvedeme pˇr´ıklad povelu vypisuj´ıc´ıho TSD v t´oninˇe Es dur. Main> akordyB (map (trans 3) [[0,4,7],[5,9,0],[7,11,2]]) " < es g bes> < as c es> < bes d f>"
4
PLR-syst´ em
Riemannova teorie d´ av´ a r˚ uzn´e akordy do r˚ uzn´ ych harmonicko-matematick´ ych vztah˚ u oznaˇcen´ ych velk´ ymi p´ısmeny P, L, R6 . Tyto vztahy n´aslednˇe vytv´aˇrej´ı s´ıt’ 6 P´ ısmena vych´ azej´ı z anglick´ eho pojmenov´ an´ı vztahu t´ onin, tj. Parallel – t´ onina stejnoonina paraleln´ı a Lead tone exchange – t´ onina horn´ı tercie. jmenn´ a, Relativ – t´
5
akord˚ u Tonnetz uspoˇr´ adan´ ych do tvaru toru (torus je objekt pˇripom´ınaj´ıc´ı americkou koblihu s d´ırou uprostˇred, topologicky shodn´ y tˇreba i s ˇs´alkem na k´avu). p [x,y,z] = inv (x+z) [x,y,z] r [x,y,z] = inv (x+z) [x,y,z] l [x,y,z] = inv (x+z) [x,y,z] Jednoduch´ a aplikace nov´ ych funkc´ı je snadn´a. Pˇri souˇcasn´e aplikaci v´ıce operac´ı na akord uplatn´ıme standardn´ı notaci pro skl´ad´an´ı funkc´ı7 , napˇr. operaci l(r(l(r [0,4,7]))), zap´ıˇseme (l.r.l.r) [0,4,7]. N´asleduje pˇr´ıklad operac´ı P, L, R pro akord a moll, dost´av´ame postupnˇe A dur, C dur a F dur. Main> " < a Main> " < c Main> " < f
akord (p [4,0,9]) cis e>" akord (l [4,0,9]) e g>" akord (r [4,0,9]) a c>"
Pˇri u ´vah´ ach o postupech akord˚ u mus´ıme pracovat s posloupnostmi, ve kter´ ych n´ asleduj´ıc´ı ˇclen z´ avis´ı na pˇredchoz´ım. Z tohoto pohledu definujeme element´arn´ı funkci iter, jeˇz jako parametr dostane funkci n´asledn´ıka f a prvn´ı hodnotu x, a generuje (nekoneˇcnou) posloupnost [x, f x, f (f x), f (f (f x), ...]. iter f x = x : iter f (f x) Napˇr´ıklad jsme vidˇeli, ˇze kvartov´e posuny generuj´ı nov´e t´oniny s b´eˇcky: Main> akordyB (take 6 (iter (trans 5) [0,4,7])) " < c e g> < f a c> < bes d f> < es g bes> < as c es> < des f as>"
V anal´ yze postupu akord˚ u n´ as zaj´ımaj´ı vztahy (vazby) po sobˇe jdouc´ıch akord˚ u. A tyto vztahy jsou pochopitelnˇe r˚ uzn´e. Potˇrebujeme tedy zav´est funkci podobnou funkci iter, kter´ a ale dostane celou ˇradu funkc´ı a bude je postupnˇe uplatˇ novat na zadan´ y akord. postup [] a = [a] postup (f:s) a = a : postup s (f a) Pokud funkci pouˇzijeme pro tˇri povely, napˇr´ıklad postup [f,g,h] x, z´ısk´ame ve v´ ysledku ˇctyˇri prvky [x, f x, g (f x), h (g (f x))]. 7 Plat´ ı (.) f g x = f (g x). Pro pˇr´ıpadnˇ e z´ ajemce o problematiku je nutn´ e podotknout, ˇ ze funkce (.) je jednou z nˇ ekolika m´ alo vstupn´ıch bran k pochopen´ı funkcion´ aln´ıho programov´ an´ı.
6
N´ asleduj´ıc´ı pˇr´ıklady jsou z u ´vodn´ıho textu o Riemannovˇe teorii, jedn´a se o postup I-vi-IV-V 50. l´eta“, postup Pachelbel“ a postup Dev´at´a“: ” ” ” Main> akordy (postup [r,l, r.l.r.l, l.r] [0,4,7]) " < c e g> < a c e> < f a c> < g b d> < c e g>" Main> akordy (postup [r.l, r.l.r, l.r, l] [2,6,9]) " < d fis a> < a cis e> < b d fis> < fis a cis> < d fis a>" Main> akordy (postup (concat [[r, l]|i<-[1..12]]) [0,4,7]) " < c e g> < a c e> < f a c> < d f a> < ais d f> < g ais d> ...
Rozˇ s´ıˇ ren´ı NSH Z´ akladn´ı operace P, L, R lze rozˇs´ıˇrit o r˚ uzn´e zkratky. Napˇr´ıklad pro durov´e kvintakordy plat´ı, ˇze sloˇzen´ a operace R · L vede na subdominantu, a operace L · R vede na dominantnu zadan´eho akordu. V tzv. neo-Riemannovsk´e teorii se uˇz´ıvaj´ı tˇri dalˇs´ı operace N, S, H jako zkratky za sloˇzen´e operace P · L · R, R · P · L a L · P · L. n = p.l.r s = r.p.l h = l.p.l V n´ asleduj´ıc´ıch pˇr´ıkladech jsou vyps´ani NSH n´asledn´ıc´ı akordu C dur, tj. f moll, cis moll a as moll (vˇsimnˇeme si enharmonicky vyj´adˇren´eho t´onu b = ces). Main> akord (n [0,4,7]) " < f as c>" Main> akord (s [0,4,7]) " < cis e gis>" Main> akord (h [0,4,7]) " < as b es>"
Pˇ r´ıbuznost kvintakord˚ u a jejich spoje Pozorn´ y ˇcten´ aˇr si jistˇe vˇsiml, ˇze akordy ve vztaz´ıch P, L, R ale i N, S nebo L.R, R.L obsahuj´ı vˇzdy nˇejak´e spoleˇcn´e t´ony. Spoleˇcn´e t´ony jsou v hudebn´ı teorii d˚ usledkem definice pˇr´ıbuznosti na r˚ uzn´ ych skupin´ach kvintakord˚ u (vˇzdy v jedn´e diatonick´e stupnici). V tomto textu zavedeme pojem pˇr´ıbuznosti obecnˇeji v opaˇcn´em smˇeru8 , pr´ avˇe jako v´ yskyt stejn´ ych t´on˚ u v obou akordech (dodejme, ˇze u navz´ ajem r˚ uzn´ ych akord˚ u mohou nastat pouze tˇri situace, ˇz´adn´ y, jeden, nebo dva spoleˇcn´e t´ ony). 8 V hudebn´ ı teorii napˇr´ıklad akordy C dur a c moll nejsou pˇr´ıbuzn´ e, aˇ ckoliv maj´ı dva spoleˇ cn´ e t´ ony. Nevyskytuj´ı se spoleˇ cnˇ e v jedn´ e diatonick´ e stupnici.
7
Harmonick´e z´ akonitosti vyˇzaduj´ı, aby akordy se spoleˇcn´ ymi t´ony byly napojeny tzv. pˇr´ısnˇe. To znamen´a, ˇze spoleˇcn´e t´ony akord˚ u maj´ı b´ yt tzv. zadrˇzeny v jednom hlase a ostatn´ı t´ ony maj´ı b´ yt vedeny nejkratˇs´ı cestou. V tomto textu n´ am jde o uk´ azky algoritmick´eho myˇslen´ı aplikovan´eho v hudebn´ı teorii (a ne ou ´plnou faktickou spr´ avnost z jej´ıho hlediska), zkusme tedy i definici pˇr´ısn´eho spoje ponˇekud zobecnit. Z´ akladn´ı myˇslenkou spojov´ an´ı akord˚ u je plynulost. Zaj´ım´a n´as vzd´alenost jednotliv´ ych t´ on˚ u mezi dva akordy a tuto vzd´alenost se snaˇz´ıme minimalizovat. Zavedeme jednoduchou definici minim´aln´ı vzd´alenosti t´on˚ u a na ni zaloˇzenou vzd´ alenost dvou akord˚ u: v n m = min ((n-m) ‘mod‘12) ((m-n) ‘mod‘ 12) vzd [a,b,c] [x,y,z] = v a x + v b y + v c z Pˇri posuzov´ an´ı vzd´ alenost´ı jednotliv´ ych t´on˚ u v akordech, mus´ıme pochopitelnˇe vyzkouˇset vˇsechny moˇznosti prohozen´ı tˇr´ı t´on˚ u druh´eho akordu. Naprogramovat obecnou funkci permutace libovoln´ ych prvk˚ u je probl´em nad r´amec tohoto textu. Zde vyuˇzijeme faktu, ˇze permutace prov´ad´ıme vˇzdy pouze na trojic´ıch t´on˚ u. Moˇznost´ı, jak r˚ uznˇe uspoˇr´ adat tˇri t´ony je ˇsest. Pˇr´ımo je tedy vyjmenujeme: perm [x,y,z] = [[x,y,z],[x,z,y],[y,x,z],[y,z,x],[z,x,y],[z,y,x]] Nyn´ı staˇc´ı definovan´e funkce vhodnˇe zkombinovat. Urˇc´ıme vzd´alenost prvn´ıho zadan´eho akordu [a,b,c] ke vˇsem ˇsesti variant´am druh´eho akordu [x,y,z] a vybereme tu jeho variantu, kter´a vykazuje vzd´alenost celkovˇe nejmenˇs´ı. Pro ilustraci u ´vahy provedeme pˇr´ıkazy pro spoj akord˚ u C dur a e moll: Main> perm [11,7,4] [[11,7,4],[11,4,7],[7,11,4],[7,4,11],[4,11,7],[4,7,11]] Main> [ vzd [0,4,7] x | x<-perm [11,7,4]] [7,1,13,9,9,11] Z v´ ysledku druh´eho pˇr´ıkazu vid´ıme, ˇze nejmenˇs´ı vzd´alenost se zadan´ ym akordem C dur vykazuje druh´ a varianta akordu e moll tvaru [11,4,7]. Zb´ yv´ a tedy doplnit funkci, kter´a bude pro dva zadan´e akordy vracet konkr´etn´ı obrat druh´eho z nich. Definice uˇz nen´ı u ´plnˇe trivi´aln´ı, potˇrebuje pomocn´e funkce nejmensi a pos, kter´e urˇc´ı pozici nejmenˇs´ı hodnoty v seznamu vzd´alenost´ı. Na stejn´em m´ıstˇe v seznamu permutac´ı akordu totiˇz najdeme v´ ysledn´ y obrat. spoj a b = (perm b) !! nejmensi [vzd a x| x<-perm b] nejmensi x = pos 0 x (minimum x) pos i (x:s) y = if x==y then i else pos (i+1) s y
8
Jako uk´ azku pouˇzit´ı tˇechto definic vytvoˇr´ıme funkci zpracov´avaj´ıc´ı v´ ystup funkce postup (tj. ˇradu akord˚ u) z u ´vodu t´eto kapitoly. Kaˇzd´ y spoj vˇzdy z´avis´ı na aktu´aln´ım akordu a vybran´ y obrat v n´asledn´em kroku ovlivˇ nuje dalˇs´ı akordy. spoje (a:b:s) = a:spoje (spoj a b:s) spoje s = s Na z´ avˇer textu uvedeme pˇr´ıklady generov´an´ı spojen´ ych postup˚ u akord˚ u podle vzoru 50. l´eta“ a Pachelbel“ i s grafick´ ymi v´ ystupy: ” ” Main> akordy (spoje (postup [r,l, r.l.r.l, l.r] [0,4,7])) " < c e g> < c e a> < c f a> < b d g> < c e g>"
Main> akordy (spoje (postup [r.l, r.l.r, l.r, l] [2,6,9])) " < d fis a> < cis e a> < d fis b> < cis fis a> < d fis a>"
5
Technick´ e ok´ enko
Posledn´ı kapitola tohoto textu popisuje zprovoznˇen´ı aplikac´ı a pˇredstaven´ı zp˚ usobu pr´ ace s nimi na poˇc´ıtaˇci se syst´emem Windows. Nejprve nainstalujeme software zm´ınˇen´ y v u ´vodu textu. Zaˇcneme programem WinHugs. Po jeho instalaci a spuˇstˇen´ı vid´ıme prostˇred´ı s v´ yzvou Hugs>. M´ırnˇe problematick´e se m˚ uˇze jevit vytvoˇren´ı zdrojov´eho souboru jazyka Haskell. Zdrojov´ y soubor je ˇcistˇe textov´ y soubor, kter´ y v prostˇred´ı Windows vytvoˇr´ıme pomoc´ı aplikace Pozn´ amkov´ y blok. Pˇri ukl´ad´an´ı je nutn´e uv´est cel´e jm´eno souboru i s pˇr´ıponou .hs a ve volbˇe typu souboru vybrat Vˇsechny soubory (*.*) m´ısto volby Textov´e dokumenty (*.txt). Pokud soubor spr´avnˇe uloˇz´ıte, mˇel by z´ıskat ikonu listu pap´ıru se zahnut´ ym rohem a se symbolem lambda (λ). Tento soubor m˚ uˇzete otevˇr´ıt v prostˇred´ı WinHugs dvojklikem“ a pokud soubor neobsahuje ” syntaktick´e chyby, m´ısto standardn´ı v´ yzvy programu uvid´ıte v´ yzvu Main>. Nyn´ı m˚ uˇzete vyhodnocovat zadan´e hodnoty a funkce naps´an´ım jejich jm´ena (pˇr´ıpadnˇe parametr˚ u) a potvrzen´ım kl´ avesou Enter. V programu funguje historie pˇr´ıkaz˚ u ovl´ adan´ a ˇsipkami nahoru a dol˚ u. Pˇri zmˇenˇe zdrojov´eho souboru staˇc´ı v prostˇred´ı WinHugs vstupn´ı definice obnovit povelem :r, vyps´an´ı naˇcten´ ych funkc´ı provede povel :b.
9
Druh´ ym krokem je instalace syst´emu Lilypond pro sazbu not. Syst´em Lilypond nainstalujeme snadno, jeho pouˇzit´ı (jedn´a se o pˇrekladaˇc) ale nemus´ı b´ yt pro bˇeˇzn´e uˇzivatele GUI syst´em˚ u pohodln´e. Nainstalujeme proto tak´e tzv. frontend s n´ azvem Frescobaldi, kter´ y n´am umoˇzn´ı s pˇrekladaˇcem Lilypond pracovat na u ´rovni WYSIWYG9 ve v´ıce oddˇelen´ ych ˇc´astech hlavn´ıho okna, z nichˇz jedno bude obsahovat zdrojov´ y text v jazyce Lilypond a druh´e bude zobrazovat v´ ysledn´ y PDF soubor s notami. Mezi n´astroji tohoto programu je i pr˚ uvodce vytvoˇren´ım sloˇzitˇejˇs´ıch partitur, panel pro rychl´e vkl´ad´an´ı pˇr´ıkaz˚ u, nebo pˇrehr´ av´ an´ı v´ ysledn´ ych MIDI soubor˚ u. Zb´ yv´ a popsat jak pracovat s pˇredstaven´ ym programov´ ym k´odem. Zadan´ y soubor tonnetz.hs doporuˇcujeme otevˇr´ıt jak v Pozn´amkov´em bloku pro u ´pravy, tak v prostˇred´ı WinHugs pro vyvol´av´an´ı funkc´ı uˇz od sam´eho zaˇc´atku vytv´aˇren´ı souboru a postupnˇe pˇrid´ avat definice z tohoto textu. Po kaˇzd´e zmˇenˇe staˇc´ı v Pozn´ amkov´em bloku soubor uloˇzit (Ctrl+S) a v prostˇred´ı WinHugs zadat :r. Podle n´ asleduj´ıc´ı v´ yzvy hned vid´ıme, zda nem´ame v souboru chybu. Pokud ano, je zobrazen ˇr´ adek jej´ıho v´ yskytu. Textov´e v´ ystupy jednotliv´ ych pˇr´ıkaz˚ u obsahuj´ıc´ıch noty lze okamˇzitˇe vyuˇz´ıt pˇri sazbˇe not. Staˇc´ı v´ ysledek funkce (bez okrajov´ ych uvozovek) vybrat a zkop´ırovat. Vloˇzen´ı do programu Frescobaldi mus´ı pˇredch´ azet bud’ vytvoˇren´ı nov´e partitury s pr˚ uvodcem (ve zdrojov´em textu je n´ aslednˇe koment´ aˇrem % Hudba n´ asleduje zde. vyznaˇceno, kam je tˇreba text vloˇzit), nebo je nutn´e vytvoˇrit alespoˇ n element´arn´ı pˇr´ıklad pro relativn´ı vkl´ad´an´ı not: \relative c’ { % Hudba n´ asleduje zde. c4 e g c | c,1 } Pro pˇreklad k´ odu na notov´ y v´ ystup staˇc´ı kliknout na ikonu lekn´ınu (Vyr´ yt).
9 What
You See Is What You Get – co vid´ıˇs, to dostaneˇs
10