Max for Live - Extrémně osobní Ableton Live
Dict - dynamic hodnota
Minule jsme vytvořili knihovnu dat v objektu [dict]. Pro připomenutí, knihovna vypadala následovně: { "transpozice": [4, 3, 3, 4, 3, 4, 3, 4, 4, 3, 3, 3] }. Následně jsme byli schopni pomocí zprávy [get transpozice[0]] vyvolat první přiřazenou hodnotu (nezapomeňme, že se čísluje od 0, tedy [0] znamená první hodnota). A teď se podíváme na to, jak získávat hodnoty dynamicky. Tedy tak, abychom získali potřebnou hodnotu pro tón, který zahrajeme.
Namísto hodnoty 0 tedy musíme do zprávy dostat právě to číslo základního tónu, jehož transpozici chceme v našem výsledném patchi zjistit. Použijeme zde dva další nové objekty.
Prvním objektem bude [combine]. Tento objekt sloučí data ze všech svých vstupů a vytvoří jeden výstup v podobě jediného textu (bez mezer). Tento objekt se často používá třeba pro vypisování umístění souborů, adres, URL apod. My ale objekt použijeme pro to, abychom si připravili zprávu, kterou potřebujeme poslat do objektu [dict]. Konkrétně tedy bude objekt vypadat takto: [combine transpozice[klic] @triggers 1]. Do druhého vstupu připojíme objekt s číslem, které reprezentuje náš zahraný tón. @triggers 1 je tzv. Atribut objektu [combine] (vše, co je v objektu za znakem @, je atribut daného objektu). Pomocí atributů můžeme měnit různé vlastnosti (chování) daného objektu. Zde konkrétně jsme změnili, že aktivním (červeným) vstupem bude vstup 1, nikoliv 0, což je výchozí nastavení.
Pokud nyní do druhého vstupu našeho objektu [combine transpozice[klic] @triggers 1] pošleme číslo (třeba 5), dostaneme na výstupu text: transpozice[5]. Část „transpozice[“ jsme nezměnili, protože do prvního vstupu jsme nic neposlali. Hodnota 5 přišla na druhý (aktivní) vstup (a je to právě ta hodnota, kterou budeme dynamicky měnit) a nahrazuje v objektu „klic“ a „]“ zůstává beze změny. Takto jsme si tedy vytvořili skoro celou zprávu, kterou potřebujeme poslat do objektu [dict].
Ještě to ale není úplně vše, co objekt [dict] potřebuje. Ještě potřebujeme na začátek zprávy dát klíčové slovo „get“, aby objekt [dict] věděl, že danou hodnotu chceme získat (nikoliv, že ji ukládáme). A proto za objekt [combine] přidáme ještě objekt [prepend get].
Objekt [prepend] předsadí určitý text (v našem případě get) před to, co mu přijde na vstup, a mezi oběma udělá mezeru. Díky tomu získáme kompletní potřebnou zprávu: get transpozice[5], kterou již můžeme poslat do objektu [dict] a tím získat potřebnou hodnotu.
Mimochodem, podobně jako [prepend] přidává data před vstupní data, existuje samozřejmě také objekt [append], který data přidává za vstupní data, opět také s mezerou.
Příště toto vše zasadíme do našeho patche a podíváme se na to, jak může uživatel jednoduše měnit transpozici v souboru JSON.