Real-time programování
Workshop FAMU CAS 2016

GAMU, 22/1/2017 https://www.facebook.com/events/1809248592670562/

Download: gamu-cas-2016.mp3 (edit)

Veronika Dostálová – basic-model-veruna-neco22ss.pd

Download: basic-model-veruna-neco22ss.pd

basic-model-veruna-neco22ss.pd je patch v programu Pure Data vytvořený v rámci předmětu Real-time programování v umělecké praxi 2. Tento patch basic-model veruna neco22ss.pd byl vytvořen primárně pro zvukovou produkci. Může fungovat v rámci skupiny, jako tomu bylo při kocertu v GAMU, nebo samostatně, viz (nahravka.wav). Hlavní ovládací prvek se skládá z togglu, metra 500 (posílá sérii bangů v konstantním tempu) a counteru, který počítá do dvanácti a posílá tedy 12 po sobě jdoucích odlišných bangů. Dále je zde prvek, který ovládá celkovou hlasitost zvuku ze všech nástrojů, umožňuje schematické zobrazení zvuku v podobě vlnové křivky v tabulce master a rozněž umožňuje nahrávání do souboru.

Samotné hrací zařízení sestává ze tří potažmo čtyř nástrojů. Dva nástroje jsou propojeny skrze společný input z counteru a oba sdílí k nim přiřazené noty, nicméně každý z nich dále umožňuje jiné nakládání se vstupním signálem a ústí v odlišný output s vlastním ovládáním hlasitosti, takže bych řekla, že jsou ty nástroje čtyři. Jeden z těch dvou nástrojů, které mají společný input mění signál přicházející counteru a not na zvuk pomocí oscilátoru, tuto zvukovou vlnu je dále možné modulovat měněním počtu vibrací (základní nastavení je 283), kterými se zvuk násobí, a dále možné k tomu přičítat odlišnou hodnotu (základní je 3). Takto upravnený zvukový signál se dále sčítá s dalším zvukovým signálem, u kterého je možné určit rychlost vibrací (vlnovou délku?, výšku tónu), která vchází do oscilátoru a poté může být násobena odlišným počtem vibrací (základní je nastavený na 39). Takto sečtené zvukové signály se násobí se zpožděním, které je možné modulovat a které je ovládáno vlastním výběrem série bangů z counteru. Tento nástroj v podstatě umožňuje modulaci tónů vycházejících z not napsaných v jeho horní části, tyto zvuky se rytmicky opakují vždy v určené vybrané doby z counteru.

Další nástroj, který vychází ze stejných not ve stejném čase takto přicházející signál dělí dvěma. Signál je dále pomocí oscilátoru převáděn na zvuk, který je dále možné modulovat násobením a přičítáním signálu, dále se opět sčítá se zvukovým signálem, u kterého je možné určovat rychlost vibrací (výšku tónu) u takto sečtených zvukyů je také možné měnit zpoždění (základní je nastavené na 125). Další nástroj vytváří signál, který je vždy v 1. a 6. dobu a pak ještě náhodně. Přes dva sčítající se oscilátory je možné upravovat počet vibrací a výšku tónů a nakonec ovládat hlasitost.

Poslední nástroj sčítá zvuk dvou not, které vychází v první a šesté době s dalším upravovatelným zvukovým signálem, dále je zde možné upravit zpoždění a pak také oříznout zvuk podle hlasitosti.

Ukázka:

František Fekete – secondAV_no_music.pd

Download: secondAV_no_music.pd

I když jsem během semestru pracoval i se zvukem, na výstupním koncertu semináře real time programming 2 jsem se nakonec rozhodl pracovat pouze s obrazovou složkou. Bylo to dáno dvěma faktory. Zaprvé, už během zkoušek a příprav na audiovizuální performance jsem zjistil, že pokud chce performer intenzivně reagovat na změny prostředí (ať už vizuálního či hudebního), musí se věnovat pouze jedné z těchto dvou složek. Zadruhé jsem neměl s hudební produkcí žádnou zkušenost a po několika pokusech jsem usoudil, že moje pokusy o hudbu by byly čistým a neúspěšným experimentem. Soustředil jsem se tedy především na budování vizuální složky a na to, aby intereagovala s ostatními, s převažující náladou hudby, rytmem a tempem. Tato interakce mohla být buď naprogramovaná, tedy že změny v obrazu byly zapříčiněny předem naprogramovaným střídáním signálu, který byl pro všechny hráče fixní, nebo intuitivním reagováním na to, co jsem slyšel kolem.

Můj samotný patch měl čtyři zákládní objekty, z nichž každý měl několik ovládacích prvků. Jejich mísením a kombinacemi se dalo dosáhnout různého typu barevnosti, kompozice a rytmu.

První z objektů byla koule (nebo jiné objekty, které se daly během hraní přepsat), na kterou jsem promítal více typů obrazů pomocí objektu pixfilm (viz. obr. 1). Také jsem naprogramoval pět různých velikostí koule, které byly střídány pomocí signálu, který byl určen výchozím stepem (obr. 3). S objektem se dalo manipulovat několika dalšími různými způsoby, například objektami shear, rotationXYZ, jehož změny mohly být opět mechanizovány pomocí výchozího signálu. Některými objekty jsem tedy manipuloval ručně a některé byly manipulovány automaticky, dle el.signálu, který přicházel.

Dalším objektem byla také koule, na kterou jsem však nemapoval obraz, ale používal jsem ho ze správou draw line, aby fungovala jako mřížková koule. Většinou doby se automaticky otáčela metrem a byla zvětšená tak, že fungovala jako mřížkované strukturované pozadí (obr.4), které přípomínala jakýsi vesmírný cyklus se sluncem uprostřed (což byl vrchol koule). Mřížka se opět dala manipulovat například objektem shear (obr.5). Když jsem chtěl, aby rytmus obrazu byl rychlejší a agresivnější, pustil jsem el.signál, aby na každou dobu střídal dvě velikosti koule - 0 a 3. S každou dobou tedy objekt mizel a zase se zjevoval. Toto a další analogické situace jsem vytvářel pomocí objektu alternate, který funguje tak, že s přijímaným el.signálem pošle bang do střídavědo jednoho a pak do druhého čísla.

Posledními dvěma objekty byly cylinder a circle, ze kterým jsem pracoval analogicky. Daly se na něj mapovat obrazy, používat objekt alternate k jeho mizení a zjevování se a ručně se daly ovládat hodnoty objektů shear a scaleXYZ. Dále objekt skoro nepřetržitě rotoval metrem. (obr.6,7).

Intuitivní kombinací všech zmíněných faktorů a živou reakcí na hudbu jsem se pokusil vytvořit různé obrazové kombinace, měnit jejich charakter, který býval často překvapivý a nahodilý, i když jsem jednotlivé prostředky změny podrobně znal (obr.8,9,10).

Jiří Rouš – GAMU Performance

Download: jiri-rous-gamu.sc

V kódu, jenž byl použit v kontextu závěrečné skupinové performance, která byla vyústěním kurzu realtime programming, jsem použil standartní metody zvoleného programovacího jazyku, kterým byl scalng, jazyk pro komunikaci s programem supercollider server. Je důležité zmínit základní fylozofii tohoto systému, která spočívá na rozdělení do rolí server a klient. Server se stará o zvukovou syntézu a její distribuci na jednotlivé výstupy zvukového rozhraní a klient serveru říká kdy má co jak dělat skrze komunikační protokol OSC. Klientem tak může být v podstatě jakýkoliv programovací jazyk a k jednomu serveru může najednou přistupovat vícero klientů. V kolektivu hráčú jsem si vybral být zodpovědným za hraní rytmické zvukové složky performance v její druhé půli. Pro tento účel jsem použil knihovny JITLIB (akronym pro Just In Time Library ) jež je inheretní součástí softwarového balíku jež je distribuován spolu s jádrem supercollideru. Knihovna JITLib zjednodušuje práci v reálném čase pomocí takzvaných zástupných uzlů, neboli proxy. Obsah, zdroj, či řekněme vnitřní struktura těchto uzlů se může v průběhu performance plynule či instantně proměňovat a tato proměna se může odehrávat v synchronizaci s hlavním tempem programu. Možnosti plynulé proměny vnitřní struktury jsem použil pro práci s rytmickými strukturami. Obsah čtyř zástupných uzlů byl v průběhu performance postupně proměňován čímž docházelo k různým variacím rytmické složky. Vnitřní struktura zástupných uzlů odbavujících jednotlivé vzory byla postavena na objektu Pbind, který umožňje propojit několik proměnných hodnotových proudů do jediného událostního proudu. Tento proud pak v definovaných časových rozestupech vytváří jednotlivé instance samotných zvuků/syntetizérů jež jsou po určité době opět automaticky ukončeny. Odbavování jednotlivých událostí je řešeno skrze interpret jazyku sclang. Rozdělení definice rytmické složky a definice zvukových zdrojů umožňuje nazávislou transformaci těchto dvou vrstev.

Pro práci s kódem byl použit editor Emacs který umožňuje jednotlivé kusy kódu posílat do interpretu který tento kód vzkoná či jej přeloží do srozumitelné formy a pošle k vykonání serveru.

Použité softwarové nástroje:

Ukázka:

Adéla Kudlová – GEM obj.

Download: adela-kudlova-gem-obj.zip

GEM .obj je grafický patch pro 3D objekty v GEM (grafické prostředí pro multimedia v PD) používající externí 3D objekt ve formátu .obj v reálném čase. Je možné synchronizovat obraz pomocí osvětlení 3D objektu v závislosti na bpm vnořeného patche vysílajícího zvukový signál. Tento signál v reakci na bpm mění barvy objektu.

Objekty:

Zprávy:

Jakub Jirka – Simple Synth

Download: jakub-jirka-simple-synth.zip

Simple synth je jednoduchý syntetizátor postavený na náhodně propojených oscilátorech a násobků jejich hodnot. Jednotlivé nástroje (zvuk 1, zvuk2, etc.) jsou variace možností vzájemného zapojení oscilátorů a poměru jejich hodnot. V rámci nástorjů jsou použity efekty freeverb a low pass filtr. U některých nástrojů je možné ovládat intezitu low pass a high pass filtrů. Nástroje je možné ovládat za pomoci sekvencéru, který je napojený na exponential attack delay obálku určující průběh zvuku v čase. V rámci patche je možné ovládat tempo, udávané v milisekundách, celkovou hlasitost a hlasitost jednotlivých nástrojů.

Ukázky:

Kryštof Pešek – Synchronizační software pro realtime coding

Download: https://github.com/k-o-l-e-k-t-i-v/SCKolektiv

Charakter společných setkání, kterých jsem měl možnost se zůčastnit v rámci workshopu Martina Blažíčka, vychází z praxe takzvaného livecodingu, tj. produkování obrazu a zvuku v reálném čase za pomoci rozmanitých prostředí, které jsou k tomuto účelu vytvořeny.

Podobná praxe má, dnes především v zahraničí již dlouholetou tradici. Ačkoli se stále jedná o poměrně ojedinělou uměleckou praxi, komunity podobné těm mála domácím existují téměř již po celém světě. V Evropě nyní asi nejvíce ve Spojeném království nebo v Německu. Komunity se za posledních přibližně dvacet let přenesli z studentských a hudebních klubů nebo galerií do podoby reálných akademických programů a tato praxe je v různých podobách již i vyučována na prestižních uměleckých a technických univerzitách.

Od klasického pojetí práce v audiovizi, která dnes snad vychází nejvíce paradigmatu filmového průmyslu, tj. komponování audiovizuálního díla do uzamčeného tvaru určeného ke spotřebě, praxe livecodingu reflektuje nové technologické možnosti komputace obrazu i zvuku v reálném čase. Charakter audiovizuálního díla se tím poměrně dramaticky posouvá od uzamčeného komponovaného tvaru k více expresivní, živé produkci, která nutně obsahuje i prvky performativní. Tím vzniká naprosto paralelní větev k tradičně přijímané roli a představě o roli obrazu a zvuku. Samozřejmě spolu s novými možnostmi a specifickou kulturou vznikají i nové nároky na softwarová řešení, která v audiovizuální tvorbě tradičně (až na málo víjímek) stála spíše v pozici kompozičních prostředí směřující výsledek do výše zmíněného produktu, nežli nástrojů určených pro samotnou živou produkci.

Software, který je pro podobnou praxi vhodný, se vyznačuje zejména důrazem na možnost živé úpravy nástoje, který produkuje obraz nebo zvuk v reálném čase. Nástroje tak odpovídají spíše specifickým intuitivním nárokům, než soustředěné práci podobné metodě klacicky kompoziční. Hlavní požadavek stávajících i vznikajících programů a programovacích prostředí nejvíce požaduje možnosti zásahu do živě generované zvukového nebo obrazového výstupu ve vztahu na odehrávající se situaci či produkci ostatních spoluhráčů. Požadavky tak nově zahrnují spíše múzické požadavky na samotný software, které vychází dnes nejvíce z praxe než notně setrvačné teorie. V jednotlivých softwarových implementacích se tak jedná o jedinečné spojení technického, teoretického softwarově historického a naprosto praktického uvažování.

Příklad programovacího prostředí modi kovaného pro účely livecoding praxe, personalizovaný software nazvaný NetProxy v programovacím prostředí SuperCollider

Vývoj samotného softwaru jde podle mého názor vždy ruku v ruce s konkrétními potřebami uživatelů/tvůrců softwaru a stěžejní je zde nutně možnost svobodné výměny informací, technická zdatnost a určitá míra skupinové shody (kompatibility) jednotlivých nástrojů a tvůrčích prostředí. Co je pak specifické na vývoji softwaru určeného pro popisovanou audiovizuáloní praxi je čistě fyzické a kulturní pojítko sdíleného času a prostředí ve kterém daný software vzniká. Tato spojitost nelze podcenit, protože představuje velmi výrazný rys; sdílené podmínky spojují i tak zásadně odlišná technologická prostředí, která by se za běžných okolností jen těžko takto konfrontovala.

Podobné mimořádné spojení probíhá na poměrně těžko dokumentovatelné bázi výskytu „pokročilých hráčů“ na jednom místě v jeden čas. Jednotliví pokročilí uživatelé (hráči) tak tvoří mimořádnou vazbu, odehrávající se naprosto mimo racionální (softwarové) nebo systémové prostředí. To je způsobeno především tím, že potřeby každého hráče jsou velmi specifické a jednotná metodologie zde spíše neexistuje (nebo existovat nemůže).

\begin{center}
\begin{figure}
\includegraphics[width=1\textwidth] {screenshot.png}
\caption{ {\small příklad programovacího prostředí modifikovaného pro
účely livecoding praxe, personalizovaný software nazvaný NetProxy v
programovacím prostředí SuperCollider}}
\end{figure}
\end{center}

Software, který je k dispozici je často vyvíjen pro velmi specifické potřeby jednotlivých tvůrců a málokdy dochází na podobně volné (virtuózní) úrovni ke společné shodě. Vlastní vývoj vysoce personalizovaného softwaru pro podobné účely praxe je dnes velmi těžko monitorovatelný. Lze říci že v podobných komunitách se odhrává tolik vývoje jako je tvůrců. Stěžejní je zde fakt, že do komunitního rozvoje rodiny svobodných softwarových nástrojů, přispívají opravdu vrcholní tvůrci v oboru a uzavřenost je spíše okrajovým jevem. Podobný vývoj, nebo lépe řečeno vedení tvůrců k podrobnému popisu své praktické zkušenosti (a tím dokumentované personalizaci softwaru) je velmi přínosné ať už pro pro účely objevování konkrtétní jedinečné umělecké tvorby, nebo popisování kulturního hnutí jako takového.

Software, který vzniká dlouhodobě a vychází ze společných požadavků hráčů nese charatker synchronizačního modulu v programovacím prostředí SuperCollider. Software vyvýjený několika hráči, co možná nejméně zasahuje do uživatelských prostředí jednotlivých uživatelů. Řešení problému synchronizace vícero zvukových jednotek vychází z potřeb vzniklých při společné performatívní praxi.

Samotný vývoj synchronizačního softwaru, který je navržený pro synchronozaci v programovacím prostředí SuperCollider je vyvýjen omezeným počtem účastníků, ale je již poměrně snadno implementovatelný (a šiřitelný pod svobodnou licencí GNU/GPL 2.0). Software je k dispozici na webu a porálu komunitního softwaru GitHub.

Software zajišťuje synchronizaci zvukových serverů na několika simultárně běžících strojích přes síťový protokol UDP. Software je značně modulární a dovoluje vícero hráčům v prostředí SuperCollider sdílet pomyslný společný metronom, tím že dokáže distribuovat poměrně precizní časování (s odchylkou pod 10ms) značně přispívá k percepční kvalitě dané živé performance.

Na vývoji softwaru se dále značnou měrou podílí Jáchym Pešek a na testování Alexandra Timpau a Martin Blažíček, příležitostně pak studenti Centra audiovizuálních studií a členové livecodingové skupiny Kolektiv.

Jakub Krejčí – SOMENOISESFORNOTHING.zip

Download: SOMENOISESFORNOTHING.zip

Just open Pure Data SOMENOISESFORNOTHING and you would see After you can open LcOscPlatform, processing folder, with OSC receiving from Pure Data. There are some image examples to start experimenting with. Try REPL Mode, It is ok for Live Coding Usage, if you are not making something so special.

Martin Blažíček – Quant for Pd

Download: quant-for-pd.zip

Quant for Pd je metrický systém navržený pro živé kódování zvuku v prostředí PureData. Je možné jej použít pro synchronizaci libovolných médií – obrazu, zvuku, videosekvencí, světel, motorů a pod. Systém sestává z několika vzájemně propojených objektů ovládaných jednotným bpm. Řeší pouze základní úlohy a je navržen tak, aby usnadňoval psaní kódu v reálném čase se zachováním tempa. Všechny navržené objekty reagují pouze na kroky metrické mřížky, bez ohledu na čas jejich vytvoření. Systém byl navržen tak, aby byl ideálně využit ve skupině hráčů, nebo pro synchronizaci apliakcí na různých nespojených počítačích.

Objekty: