Masarykova univerzita Fakulta informatiky
Softwarové technologie tvorby zvuku a podpora živého hraní Bakalářská práce
Jan Valendin
Brno, jaro 2006
Poděkování Chtěl bych poděkovat MgA. Rudolfu Růžičkovi za laskavý souhlas s vedení této bakalářské práce. Dále děkuji celé své rodině, díky které je toto vše možné.
Prohlášení Prohlašuji, že tato práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj.
Shrnutí V práci se zabývám softwarovými technologiemi tvorby zvuku, rozhraním MIDI pro komunikaci počítačů s elektronickými nástroji a komunikaci zvukových programů mezi sebou navzájem, dále zásuvným modulům technologie VST, jejich ovládání pomocí zpráv rozhraní MIDI a vlastní konstrukci takového modulu. Součástí práce je program VSTunel – modul VST, který ulehčuje hudebníkovi práci s nastavením parametrů softwarového hudebního syntetizátoru pomocí vlastního grafického uživatelského rozhraní.
Klíčová slova MIDI, ovladač, VST, uživatelské rozhraní
OBSAH 1
Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
2
Technologie tvorby zvuku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Přehled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Vzorky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Syntéza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Živá produkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 4 4 5 7
3
Rozhraní MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Fyzické propojení . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Přenosový protokol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Přehled zpráv MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4 Výhody a nevýhody rozhraní MIDI . . . . . . . . . . . . . . . . . . . . . 3.5 Soubory pro ukládání zpráv MIDI . . . . . . . . . . . . . . . . . . . . . . 3.6 Softwarové použití rozhraní MIDI . . . . . . . . . . . . . . . . . . . . . .
8 8 8 8 9 10 12 12
4
Rozhraní VST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 4.2 Zásuvné moduly VST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Struktura modulu VST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Hostitelský program VST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.5 Vývoj modulů VST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13 13 13 13 14 14
5
Program VSTunel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Šablona VST Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Jednotka uPlugin.pas . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.2 Jednotka uEditor.pas . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Uživatelské rozhraní . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4 Konstrukce modulu VSTunel . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5 Návod k použití modulu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15 15 15 16 17 17 19 20
6
Závěr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
7
Literatura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1 Zdroje pro rozhraní MIDI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.2 Zdroje pro rozhraní VST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.3 Ostatní zdroje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23 23 23 24
8
Přílohy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.1 Standardní přiřazení ovládaných parametrů . . . . . . . . . . . . . . . . 8.2 Obsah přiloženého média CD-ROM . . . . . . . . . . . . . . . . . . . . .
25 25 27
1
1. Úvod Dnešním hudebníkům doba přeje. Široce dostupné počítačové technologie jsou nejvýraznějším fenoménem, který je odlišuje od kolegů z dob minulých. Dnešní počítače dokáží v reálném čase zpracovávat úlohy, které by si na starších strojích vyžádaly řádově více času, což otevírá zcela nové možnosti jejich využití při živém hraní. S příchodem nové generace procesorů (přelomový byl především procesor Intel Pentium M) je možné veškeré zastaralé vybavení nahradit malým a lehkým přenosným počítačem, který je navíc na rozdíl od většiny starého hardwaru mnohem lépe přizpůsobitelný představám svého uživatele. Program Minimoog, který byl inspirací pro tuto práci, vychází ze stejnojmenného analogového syntetizátoru a řadí se do kategorie tzv. nástrojů VST (Virtual Studio Technology, technologie umožňující vzájemnou spolupráci nejrůznějších programových a technických prostředků pro hudební účely). Společnost Arturia, mezi jejíž produkty tento program patří, se zabývá převáděním funkčnosti skutečných hudebních nástrojů do softwarové podoby – zvuk je v jejích programech tvořen pomocí tzv. fyzikálního modelování (tj. emulace zvuku vibrujícího systému pomocí softwarové analogie), nejsou tedy použity žádné předem nahrané vzorky (samples). Tento přístup se stává v posledních letech stále populárnějším, protože umožňuje velmi věrné napodobení zvuku a především funkčnosti skutečného nástroje za cenu velké náročnosti programu na systémové prostředky (především procesor počítače). Syntetizátor Minimoog vynikal ve své době ojedinělými možnostmi v nastavení výsledného zvuku – základem architektury jsou tři oscilátory, každý generující zvukovou vlnu. Tyto vlny se poté míchají do výsledného signálu, podléhajícího pak dalším úpravám. Všechny parametry tohoto procesu je možno v programu Minimoog ovládat prostřednictvím graficky znázorněných otočných potenciometrů pomocí myši nebo prostřednictvím rozhraní MIDI (Musical Instrument Digital Interface – rozhraní pro komunikaci hudebních nástrojů s počítačem). Ovládání programu je velmi přehledné a intuitivní, ale stává se nepraktickým v okamžiku, kdy je třeba ovládat takto program při živé produkci. Ta má svoje specifika: na všechny případné změny má hudebník většinou méně času, než by si přál, v časovém stresu navíc častěji dochází k chybám a za ty se draze platí – i hráčskou chybu klávesistovi obecenstvo odpustí snadněji než špatně přepnutý zvuk, který navíc vyděsí i ostatní spoluhráče. S ohledem na tato nebezpečí jsem cítil potřebu nějakého zjednodušení, až mne napadl koncept programu (modulu VST) VSTunel, jenž je součástí této bakalářské práce. Výchozí představa byla následující: potřeboval jsem jednoduchý program, který by pomocí velmi intuitivního grafického uživatelského rozhraní umožňoval ovládání funkcí nástrojů VST, které při hraní nejčastěji používám, tj. například hlasitosti, nastavení filtru, ozvěny (delay), dozvuku (reverb), případně dalších. Nejdůležitějším kritériem pro mne byla přehlednost, ovládání programu by nemělo odvádět hudebníkovy myšlenky od samotné hudby a jeho typické použití by uživateli nemělo zabrat více než několik málo sekund. K řešení této úlohy jsem se rozhodl použít programovací prostředí Borland Delphi. Při konstrukci nástroje (modulu) VST jsem využil šablonu, kterou vytvořil Tobias Fleischer z Tobybear Productions. Základem této šablony je sada vývojových nástrojů firmy Steinberg VST Software Developement Kit (VST SDK), kterou z jazyka C++ do Delphi přeložil Frederic Vanmol.
2
Ve druhé kapitole jsou popsány moderní způsoby tvorby zvuku pro hudební účely, jejich výhody a nevýhody při použití na koncertech. Ve třetí kapitole je popsáno rozhraní MIDI, čtvrtá kapitola je věnována technologii VST. Kapitola pátá je zaměřena na návrh a realizaci modulu VSTunel, který je k práci přiložen na CD spolu se svým zdrojovým kódem. Program, který je výsledkem této bakalářské práce, splňuje všechny výchozí požadavky, na jeho ovládání jsem si rychle zvykl a používám jej s úspěchem při své hudební produkci.
3
2. Technologie tvorby zvuku 2.1
Přehled Zvuk pro hudební účely může být tvořen mnoha nejrůznějšími způsoby. Omezíme-li se na oblast digitální (resp. softwarové) tvorby zvuku, existují dva hlavní směry: a) Přehrávání vzorků b) Syntéza
2.1.1 Vzorky (Samples) Tato technologie používá pro tvorbu zvuku předem nahraných vzorků (samples). Díky tomu je kvalita reprodukovaného zvuku závislá pouze na kvalitě pořízených vzorků a jejich použití nevyžaduje výpočetně náročné zpracování, protože většina zvukových odstínů daného nástroje je už obsažena v nahraném vzorku a není je třeba vytvářet v reálném čase. Na druhou stranu to znamená mnohem menší možnost kontroly nad výsledným zvukem, než je tomu u synteticky vytvářených zvuků. Proto se použití vzorků osvědčuje jen u těch nástrojů, jejichž zvuk není příliš závislý na vstupních podmínkách, například u akustického piána, kde k věrné reprodukci stačí použití několika různých vzorků pro různé úrovně úhozové dynamiky pro jednotlivé tóny. Naopak není vhodné, pokud chceme zachytit zvuk, jehož charakteristika se v čase výrazně mění, což je případ zvuku analogových syntetizátorů. Do této kategorie patří ještě tzv. Wavetable syntéza, ve které jsou nahrané vzorky pouze výchozím materiálem, ze kterého je požadovaný zvuk generován pomocí skládání či jiných dodatečných úprav. Důležitými parametry vzorků jsou především:
a) Vzorkovací frekvence (Sample rate)
Určuje, kolikrát za sekundu je přečten/zapsán údaj o aktuální úrovni hlasitosti nahrávané či generované zvukové vlny. Tato hodnota udává tzv. frekvenční rozsah systému (frequency range), který určuje, s jakou přesností bude původní zvuk zachycen/reprodukován. Přesné zachycení zvuků o vysoké frekvenci vyžaduje použití vysokých vzorkovacích frekvencí. Podle tzv. Nyquist-Shannonova pravidla platí, že pro reprezentaci zvukového signálu s nejvyšší frekvencí X je třeba vzorkovat s frekvencí 2*X. Vzhledem k tomu, že frekvenční rozsah lidského ucha je přinejlepším 16 – 22.000 Hz, k věrné reprodukci zvuku by měla stačit vzorkovací frekvence cca 44.000 Hz, což je přibližně hodnota, kterou používají zvukové nosiče CD.
b) Bitová hloubka (Sample bits)
Udává počet bitů uložených při jednom přečtení vzorku, které reprezentují aktuální úroveň hlasitosti signálu. Tato hodnota udává tzv. dynamický rozsah systému (dynamic range). Jeden bit odpovídá 6 dB, použití větší bitové
4
hloubky tedy umožňuje větší dynamický rozsah. Nosiče CD, které používají šestnáctibitovou hloubku (tj.dynamický rozsah 96 dB ), tedy například nedokáží zcela reprodukovat dynamický rozsah velkého orchestru, který běžně přesahuje 100 dB. Vzorkovací frekvence a bitová hloubka dohromady určují velikost zvukových souborů se vzorky, což je důležitý parametr pro případné přehrávání v reálném čase. Velikost jedné vteřiny zvukového záznamu odpovídá množství bitů daného bitovou hloubkou násobenému vzorkovací frekvencí. Velké množství vzorků přehrávaných současně tedy vyžaduje větší/rychlejší vnitřní paměť systému. Softwarové syntetizátory, které k dosažení studiové kvality zvuku (tj. zvuku použitelného v jakékoliv profesionální nahrávce, nebo při profesionálním koncertu) používají nahrané vzorky, běžně těchto vzorků používají současně stovky megabytů, což je i na dnešní poměry velmi mnoho paměti. I z důvodu úspory systémových prostředků tedy budoucnost vidím spíše v následující technologii, syntéze.
2.1.2 Syntéza Základním principem této technologie je skládání jednoduchých zvukových vln (tj. především sinusoidy (sine), obdélníku (square), trojúhelníku (triangle) a pily (saw)). Existuje několik typů syntézy zvuku, nejrozšířenější jsou:
1. Aditivní syntéza Technika založená na tzv. Fourierově transformaci - skládání složitých funkcí z mnoha jednoduchých signálů generovaných oscilátory. Tato technika umožňuje kvalitní napodobení zvuku nástrojů se statickým frekvenčním spektrem, tedy například klasických varhan, kde také zvuk vzniká skládáním jednotlivých rejstříků. Nedostačuje naopak tam, kde se frekvenční spektrum dynamicky mění. Klasickým nástrojem, který aditivní syntézu používal, je Synclavier z roku 1985. Dnes už se tato technika příliš nepoužívá.
2. FM (Frequency Modulation) syntéza Technika pocházející ze 60. let 20. století, jejímž autorem je John Chowning ze Stanfordské univerzity v Kalifornii. Tato technika pracuje s několika (2 a více) tzv. operátory, což jsou digitálně řízené generátory sinusových vln. Jedna tzv. modulační (modulation) vlna může ovlivňovat druhou, tzv. nosnou (carrier) vlnu, čímž vzniká požadovaný výsledný signál, který obsahuje prvky z obou frekvencí a další harmonické frekvence závisející na vzájemném poměru obou vstupních frekvencí. Nevýhodou tohoto přístupu je značná složitost programování procesu skládání vln – hlavně fakt, že ve většině případů není automaticky předem jasné, který parametr syntézy je potřeba změnit, je–li třeba dosáhnout požadovaného
5
zvuku, je tedy nutno často experimentovat. Obtížně se pak pomocí FM syntézy napodobuje zvuk skutečných nástrojů, kvalita zvuku je obecně nízká. Nejznámějším představitelem nástrojů využívajících FM syntézu byl komerčně velmi úspěšný syntetizátor Yamaha DX7 z roku 1983.
3. Subtraktivní syntéza Je technika založená na odstraňování nežádoucích frekvenčních komponentů z tónu pomocí filtrace. Základními součástmi tohoto procesu jsou oscilátor, filtr a zesilovač. Oscilátory generují signál (typicky trojúhelníkovou vlnu), ze které jsou pomocí jednoho či více filtrů odstraněny nebo potlačeny některé z obsažených frekvencí. Dynamické změny hlasitosti (tzv. obálku (envelope) ADSR (Attack – náběh, Delay – zpoždění, Sustain – výdrž, Release – uvolnění)) potom zajišťuje zesilovač. Výhodou tohoto přístupu je snadné a velmi dobře předpověditelné ovládání jednotlivých parametrů procesu syntézy, ve své analogové podobě se subtraktivní syntéza stala základem mnoha úspěšných syntetizátorů, například Minimoogu (rok 1971).
4. Fyzikální modelování Jedná se o pokročilý druh syntézy, který je založen na fyzikálním modelu skutečného zdroje zvuku (například houslové struny, kobylky a ozvučné části houslí). Přestože jsou principy fyzikálního modelování známy již od 70. let 20. století, teprve s výrazným nárůstem výpočetního výkonu mikroprocesorů v 90. letech 20. století se mohly rozšířit první hardwarové, později softwarové nástroje využívající tento druh syntézy. Prvním hardwarovým byl syntetizátor Yamaha VL1 v roce 1994. Dnes už existují různě pokročilé modely všech hlavních druhů hudebních nástrojů – strunných, žesťových, bicích a dokonce i lidského hlasu. Zajímavou kategorií jsou pak programy modelující chování analogových elektromagnetických obvodů v syntetizátorech, jako je například Minimoog (technologie True Analog Emulation firmy Arturia). Tento typ syntézy je kvůli použití složitých algoritmů zdaleka nejnáročnější na výpočetní výkon systému, samotný program však může zabírat v porovnání se srovnatelně zvukově kvalitním softwarovým nástrojem používajícím vzorky velmi málo paměťového místa. Tento druh fyzikálního modelování je pro mne nejzajímavější, virtuální analogové syntetizátory tohoto typu mají velmi příjemný, hutný (fat) zvuk a současně umožňují velmi přirozené korekce zvuku – změna zvuku má přirozený charakter (myšleno pro analogové syntetizátory) díky simulaci chování elektrických součástek nástroje (kondenzátory, cívky, atd.), v nichž mají veličiny napětí a proudu spojité průběhy.
6
2.2
Živá produkce Má-li hudebník větší ambice, než být pouze doprovodným hráčem, držícím se v pozadí, pro zaujmutí náročného ucha posluchače je nezbytně nutná invenční práce se zvukem. Vliv hudebních zvuků na lidskou psychiku je nezpochybnitelný, je pouze problémem naučit se s ním odpovídajícím způsobem pracovat. To předpokládá možnost ovládat zvuk svého nástroje, aniž by ovládání odvádělo hudebníka příliš od čistě hudebních myšlenek k technickým problémům. V tomto směru nabízí softwarová syntéza mnoho zajímavých možností. Hlavní výhodou syntézy oproti přehrávání vzorků je její flexibilita. Právě možnost ovládat celý proces vzniku zvuku od samého začátku a v jejím průběhu pomocí nastavení jejích parametrů umožňuje hráči na elektronické klávesové nástroje (nebo jiný digitální nástroj – obecně zařízení MIDI) hru s výrazem (expresí), jaké by nebyl schopen, pokud by musel použít předem nahrané vzorky. Příkladem takového druhu hraní může být například klávesista Jan Hamer (70. a 80. léta), hrající na reálné analogové syntetizátory (převážně Minimoog a Moog Modular, viz. např. album Jeff Beck and the Jan Hammer Group Live) s podobným výrazem jako Jimi Hendrix na kytaru. Jan Hammer pro ovládání parametrů svého zvuku používal samozřejmě ovládací prvky Minimoogu (kolečko pro ohýbaní tónu (pitch wheel), modulační kolečko (modulation wheel), dodatečný stisk (aftertouch) a další) dále nejrůznější nožní pedály (ovládání hlasitosti, pedál wah-wah – „kvákadlo“). Chceme-li stejného výsledku dosáhnout za použití softwarových nástrojů a efektů namísto skutečných, je nutné se vypořádat v především s otázkou, jakým způsobem všechny tyto parametry ovládat. Přirozeným požadavkem při hře na softwarový model saxofonu by například mělo být snadné ovládání intensity dechu. Ať už zkonstruujeme vhodný samostatný ovladač (v dnešní době jich existuje celá řada, od „klasických“ – klávesových až po avantgardní ovladače typu žebřík, nebo rukavice), nebo použijeme nějaký standardní (elektronické klávesy), je nutné jej propojit se samotným nástrojem. V dnešní době pro toto spojení existuje jediné snadné a široce dostupné řešení – použití rozhraní MIDI, kterému se budu věnovat v následující kapitole.
7
3. Rozhraní MIDI 3.1
Úvod Musical Instrument Digital Interface (MIDI), v překladu „Digitální rozhraní pro hudební nástroje“, je souhrnný název pro specifikaci fyzického propojení dvou zařízení (počítačů, hudebních nástrojů, ovladačů MIDI a také programů) a pro přenosový protokol. Standard MIDI popsal v roce 1983 Dave Smith ze společnosti Sequential Circuits. Díky jeho jednoduchosti a přehlednosti jej brzy přejali všichni hlavní výrobci hudebních syntetizátorů a je tak už léta využíván v nejrůznějších oblastech umělecké hudební i jiné činnosti. Kromě svého typického použití, tj. vzájemné komunikace mezi hudebními nástroji, efekty a počítači, používá se například i pro ovládání technického zázemí – například světel, opony a kulis v divadle.
3.2
Fyzické propojení Standardní propojení MIDI, používané od roku 1983 dodnes v podstatě v nezměněné podobě, používá 3 druhy portů: MIDI IN pro vstupní data, MIDI OUT pro data výstupní a MIDI THRU, kterým vystupuje kopie dat z MIDI IN. Na straně hudebních nástrojů jsou tyto porty realizovány jako standardní 5 pinové konektory DIN (tj. založený na standardu německého Deutsches Institut für Normung). Data se po kabelech, přenášejí jednosměrně, sériově po jednotlivých bytech pomocí změn elektrického proudu, rychlostí 31250 bitů za sekundu. Na straně případného počítače je MIDI zapojeno většinou do portu D–Sub (který je typicky osazen přímo na zvukové kartě, nebo je do ní připojen, bývá také používán pro zapojení pákového ovladače (joystick)), ačkoliv dnes již existují standardy umožňující zapojení MIDI přes porty USB, nebo Firewire, dokonce je možné MIDI data posílat přes lokální síť (Local Area Network – LAN) prostřednictvím Ethernetu.
3.3
Přenosový protokol Standardizován v roce 1991 Asociací výrobců MIDI (MIDI Manufacturers Association), podstatou protokolu je přenos zpráv MIDI (MIDI messages). Typicky se zpráva generuje v okamžiku, kdy hráč na klávesový (nebo jiný) nástroj stiskl některou z kláves, uvolnil klávesu, přednastavil ovládací prvek a tak podobně. Většina zpráv MIDI se skládá z jednoho stavového bytu (status byte) následovaného jedním či dvěma datovými byty (data byte). Stavový byte obsahuje kód typu zprávy (ve vyšších 4 bitech) a číslo kanálu (channel number, v nižších 4 bitech). Zprávy mohou být přenášeny po kterémkoliv z 16 kanálů (channels) a především zařízení MIDI může být nastaveno pro příjem zpráv pouze z některých (nebo všech) kanálů.
8
3.3.1 Přehled zpráv MIDI Druh zprávy
Stavový byte [1]
Datový byte 1 [2]
Datový byte 2 [2]
Uvolnění klávesy (Note Off)
8n [3]
Číslo noty (Note Number)
Rychlost uvolnění (Velocity)
Stisknutí klávesy (Note On)
9n
Číslo noty (Note Number)
Úhozová rychlost (Velocity)
Dodatečný stisk více kláves (Polyphonic Aftertouch)
An
Číslo noty (Note Number)
Tlak (Pressure)
Změna ovládacího prvku (Control Change)
Bn
Číslo ovládacího prvku (Controller Number)
Data (Data)
Změna programu (Program Change)
Cn
Číslo programu (Program Number)
nepoužito
Dodatečný stisk kláves (Channel Aftertouch)
Dn
Tlak (Pressure)
nepoužito
Ovládání výšky tónu (Pitch Wheel) [4]
En
Méně důležitý byte (Least Significant Byte – LSB)
Více důležitý byte (Most Significant Byte – MSB)
[1] Hodnoty v tabulce jsou v šestnáctkové soustavě. [2] Všechny datové byty začínají nulou v nejvyšším bitu, rozsah hodnot je tedy 0 – 127 pro jeden datový byte. [3] Symbol n zastupuje 4 bity udávající číslo kanálu (channel number) [4] Zatímco u jiných parametrů dostačuje rozsah hodnot 0 – 127, pro ovládání výšky tónu byly tomuto druhu zprávy pro lepší rozlišení přiřazeny dva datové byty, což odpovídá rozsahu hodnot 0 – 16383. Vzhledem k tomu, že variace stavového bytu ve stávající implementaci protokolu MIDI nejsou vyčerpány, je možno vytvářet další uživatelské druhy MIDI zpráv. Rozšířeny jsou například zprávy SysEx (System Exclusive – „Vyhrazeny systémem“), sloužící k ovládání vnitřních nastavení konkrétních syntetizátorů, které toto podporují. Částečně pomocí zpráv typu SysEx je také realizován podprotokol MIDI – tzv. MIDI Time Code („Časový kód“), který umožňuje synchronizaci skupiny současně pracujících navzájem komunikujících MIDI zařízení (například přehrávače hudby a videa).
9
3.4.1 Výhody a nevýhody rozhraní MIDI a) Nevýhody •
Jako největší nevýhoda se začíná s postupem času jevit pomalost rozhraní. Pokud chci například zahrát akord složený z více tónů, musí se postupně přenést přes rozhraní všechny zprávy MIDI (za každou stisknutou klávesu jedna), každá se musí na straně příjemce dekódovat a vyhodnotit, což si jistý čas vyžádá (typicky v řádu jednotek milisekund). Není tedy možné hrát tóny zcela současně. Tento fakt většinou není na závadu, většina kapel není sehraná přesněji než je cca 20 milisekund, tento fakt však na přesnosti ubírá. Problémy nastávají, jakmile je třeba přes jedno rozhraní přenášet ovládací zprávy pro rozsáhlý soubor nástrojů, v takovém případě je vhodné použít více přenosových cest, jinak může dojít k zahlcení (tzv. „zakuckání“ – MIDI choke) a následné ztrátě některých částí přenášených zpráv. Typickým výsledkem takových poruch je ztracení některé ze zpráv typu Uvolnění klávesy, což způsobí nekontrolované uváznutí tónu (stuck tone), který stále zní, dokud mu uživatel nepošle zprávu o uvolnění znova – většinou opětovným stisknutím a uvolněním odpovídající klávesy.
•
Nevýhodou pro hráče na ostatní nástroje je také fakt, že bylo rozhraní MIDI vytvořeno původně jen pro nástroje klávesové. Přestože je možné zprávy MIDI generovat i jinými ovladači, než jsou klávesy (a také je jich na trhu mnoho rozmanitých druhů), je to poněkud obtížnější, zvláště u dechových nástrojů, kde je nutno snímat v podstatě nepřetržitou spojitou informaci o úrovni hudebníkova dechu. Problémem je i také přesně postihnout spojitý průběh výšky tónu ve velkém rozsahu, což je typické chování strunných nástrojů, jako je cello, kontrabas a tak podobně.
•
Značným omezením je nemožnost postihnout pomocí zpráv MIDI chování komplexních zvukových systémů, jako je například lidský hlas, proto je při hudební produkci, která zahrnuje vokální party, nutno použití dodatečných prostředků. Je pravděpodobné, že i tento nedostatek bude ve spíše vzdálenější budoucnosti odstraněn, přestože se k tomu nejspíše nepoužije MIDI v dnešní podobě, protože na takový úkol nejspíše nebude dostačovat jeho přenosová kapacita.
•
Jako slabina technického rázu se mi jeví technika, jakou jsou vyráběny kabely pro rozhraní MIDI. Tyto jsou většinou velmi náchylné k mechanickému poškození, a neodpovídají náročným požadavkům, které na ně mají hudebníci, kteří často cestují. Kabely také nemohou přenášet informace na vzdálenost delší než asi 15 metrů.
10
b) Výhody •
Největším přínosem MIDI je v umožnění zcela nového přístupu k hudební kompozici. Data z mnoha ovladačů MIDI je možno nahrávat do jediného zdroje a přesto zůstanou od sebe odděleny (díky použití různých kanálů) tak, že je možno každou jednotlivou zprávu znova editovat, aniž by byly ovlivněny ostatní zprávy. Toto nesrovnatelně usnadňuje práci oproti použití výhradně zvukového materiálu (tj. například souborů .wav), kde se každá změna nastavení projeví i na celku.
•
Další výhodou je jednoduchost práce s rozhraním MIDI, snadné zapojování zařízení (i za chodu), množství a variabilita zařízení, které jsou pro MIDI produkovány. Rozhraní MIDI umožnilo a iniciovalo vznik zcela nových hudebních nástrojů (resp. ovladačů) – dechových, kytarových, bicích a dalších, i velmi bizarních druhů, používaných v experimentální tvorbě.
•
Tato rozmanitost umožňuje snadné použití syntetizátorů i jiným hudebníkům než klávesistům – skvělým příkladem jsou kytaristé Pat Metheny (viz. např. album Pat Metheny Group – Offramp (1981)) nebo Allan Holdsworth, kteří na syntetizovaném zvuku svých nástrojů MIDI založili svůj nezaměnitelný zvuk.
•
MIDI umožnilo vznik zcela nového odvětví hudební produkce, tzv. MIDI sequencing (sekvenční zpracování MIDI), což zahrnuje nahrávání, zpracování a následné přehrávání informací MIDI. Pomocí tohoto přístupu dnes vzniká převážná část moderní populární hudby, protože práce s MIDI je snadná a rychlá, data MIDI jsou velmi kompaktní a tedy snadno přenositelná. Nejznámějšími programy pro MIDI sequencing jsou Cubase firmy Steinberg nebo Cakewalk.
•
Díky existenci ovladačů MIDI je možno vyrábět syntetizátory bez klaviatury, totiž je možné ovládat pomocí jednoho nástroje mnoho dalších nástrojů, což hudebníkovi ulehčuje situaci – nemusí si zvykat na vlastnosti mnoha nástrojů nebo na jejich rozdílné ovládací prvky. V neposlední řadě se takové nástroje mnohem snáze převážejí, je zde možnost jejich montáže do tzv. racků (úložných beden pro hudební hardware o standardních rozměrech), jednodušší konstrukce také snižuje jejich cenu.
11
3.5
Soubory pro ukládání zpráv MIDI Pro ukládání dat rozhraní MIDI se nejčastěji používají soubory ve formátu tzv. standardního MIDI souboru (Standard MIDI File, SMF, používá se pro něj standardně přípona .mid). V tomto souboru jsou uloženy zprávy MIDI (tj. stavové byty a jim odpovídající byty datové) spolu s příslušnou časovou známkou (timestamp). V hlavičce souboru jsou dále uloženy údaje o použitých nástrojích, tempu, názvech jednotlivých stop a podobně. Přehrávání těchto souborů je dnes nejběžnějším způsobem využití MIDI.
3.6
Softwarové použití rozhraní MIDI Pohodlné používání programů a nástrojů generujících zprávy MIDI v kombinaci s jinými hudebními programy (například softwarovými syntetizátory, sequencery, efekty zpracovávajícími zvukové datové toky a podobně) se díky kompatibilitě a srozumitelnosti rozšířilo ve spojení se standardem Virtual Studio Technology („technologie virtuálního studia“, VST), který popíši v následující kapitole.
12
4. Rozhraní VST 4.1 Úvod Standard VST (Virtual Studio Technology) byl popsán firmou Steinberg v roce 1996 současně pro platformu PC i Macintosh. Jedná se o virtuální rozhraní sloužící k propojení jednotek, kterými jsou: syntetizátory, zásuvné moduly pro zpracování zvuku, nahrávací systémy s pevným diskem a podobně. Pomocí programů propojených díky VST je možné vytvořit kompletně virtuálnísoftwarové hudební studio, zahrnující v sobě programové ekvivalenty všech komponent používaných ve skutečném studiu, nebo umožnit spojení virtuálního studia se skutečnými fyzickými nástroji, efekty atd. Základní jednotkou rozhraní VST je zásuvný modul (VST plugin).
4.2 Zásuvné moduly VST Moduly VST je možno podle převládajícího způsobu jejich použití rozdělit do tří základních druhů: a) Nástroje VST (Virtual Studio Technology Instruments, VSTi) - programy používané k vytváření zvuku pro hudební účely, nebo jeho přehrávání. b) Efekty VST (VST Effects) – moduly používané ke zpracování zvuku, typickými představiteli této kategorie jsou delay (ozvěna), reverb (dozvuk) nebo phaser (změna fáze). c) Ovladače VST (VST Controller) – moduly řídící činnost jiných VST modulů nebo vůbec jiných programů či fyzických nástrojů. Do této kategorie spadá program VSTunel, který je součástí této práce.
4.3 Struktura modulu VST Nejčastěji je modul VST za běhu tvořen dvěma vzájemně nezávislými výpočtovými vlákny (threads). Jedním je vlákno samotného modulu (plugin thread), které se stará o vlastní implementaci zpracování (tvorby, editace atd.) zvukových dat a správu jeho vlastních parametrů. Druhé vlákno je vláknem editoru (editor thread) které zajišťuje (grafické) rozhraní pro komunikaci s uživatelem. V okně, potažmo vlákně editoru tedy uživatel provádí změny nastavení parametrů, zatímco vlákno modulu obsluhuje tyto změny, zpracovává vstupní data a upravuje je na základě nastavení parametrů. Implementace vlákna editoru není povinná, většina standardních hostitelských programu dokáže v případě, že toto vlákno implementováno není, nabídnout uživateli odpovídající náhradu umožňující nastavení jednotlivých parametrů. Toto vzájemné oddělení umožňuje jednak nezávislý vývoj uživatelského rozhraní a modulu pro zpracování dat, dále pak může modul VST pracovat i po uzavření či vůbec bez otevření okna editoru. Obě
13
vlákna si mezi sebou mohou vyměňovat informace pomocí speciálních funkcí, které budou popsány v kapitole 5.
4.4
Hostitelský program VST Moduly VST jsou v podstatě sdílené dynamicky připojované knihovny (Dynamic linked library, soubory s příponou .dll), tedy samy o sobě nejsou spustitelnými programy. Ke své činnosti tedy potřebují další hostitelský program (VST Host), kterých je na trhu celá řada, jako již zmiňovaný Cubase firmy Steinberg (nejrozšířenější hostitelský program, podle kterého se poměřuje kompatibilita modulů), nebo Plogue Bidule. Takový program zajišťuje zavádění jednotlivých modulů VST do paměti, jejich vzájemné propojení a nastavení datových toků mezi nimi, nastavení ovládání jednotlivých modulů pomocí externího ovladače (např. prostřednictvím rozhraní MIDI), spouštění grafických uživatelských rozhraní jednotlivých modulů (mají-li takové), nastavení ovladačů zvukové karty a podobně.
4.5 Vývoj modulů VST Nejjednodušším (a pro začínající vývojáře modulů VST v podstatě jediným reálným) způsobem vývoje je použití sady nástrojů pro vývoj modulů VST (Steinberg Virtual Studio Technology Software Developement Kit, VST SDK), kterou nabízí a doporučuje samotná firma Steinberg. Nejnovější verze 2.4 z roku 2006, zahrnující celou řadu tříd (classes) a nástrojů pro usnadnění tvorby modulů VST, je stejně jako verze předchozí napsána v jazyce Visual C++. V současné době existují verze VST SDK i pro jazyky Java (projekt jVSTwRapper), Delphi (přeložil Frederic Vanmol) a .Net (projekt Noise). Ve své práci budu používat jeho překlad do jazyka Delphi, konkrétně jeho rozšíření, šablonu VST Template, kterou vytvořil Tobias Fleischer, protože se mi toto vývojové prostředí zdá ze všech uživatelsky nejpříjemnější a nejpřehlednější.
14
5. Program VSTunel 5.1 Motivace Při práci se sofwarovými syntetizátory, jako je například nástroj Moog Modular V firmy Arturia, jsem brzy narazil na problém, který spočívá ve značné složitosti ovládání grafického uživatelského rozhraní (viz. obrázek). Proto jsem se rozhodl vytvořit program, který by mi používání nástroje ulehčil tak, že by zajišťoval několik z ovládacích funkcí syntetizátoru, ale prostřednictvím vlastního jednoduššího uživatelského rozhraní. K vypracování tohoto programu jsem použil programovacího prostředí Delphi (verze 7) a šablonu VST Template, kterou popíši v kapitole 5.2.
Obrázek 1 - Uživatelské rozhraní virtuálního nástroje VST Moog Modular V
5.2
Šablona VST Template Šablonu tvoří projekt vývojového prostředí Delphi, podporovány jsou verze 6 a 7. Tato sada nástrojů se skládá z programových jednotek DAEffect. pas, DAEffectX.pas, DAudioEffect.pas, DVstTemplate. pas, DVstUtils.pas, DVstFxStore.pas, DVstEditor. pas, DDspUtils.pas a DAudioEffectX.pas, ze kterých bude pro naše účely potřebná zejména DAEffect.pas a DVstTemplate.pas. Základními prvky šablony jsou jednotky (units) uPlugin.pas (implementující vlákno modulu) a uEditor.pas (implementace grafického rozhraní, tj. vlákna editoru).
15
5.2.1 Jednotka uPlugin.pas Jádrem jednotky je třída APlugin, potomek třídy TVSTTemplate. Pracuje se zde s následujícími procedurami: a) Konstruktorem třídy APlugin.Create – v něm je například možno definovat, kolik bude mít modul zvukových vstupů a výstupů (vlastnosti numInputs a numOutputs), parametrů (vlastnost numParameters), nastavit jméno modulu (vlastnosti EffectName, ProductName), nastavit jedinečný čtyřpísmenný identifikátor (vlastnost UniqueID, podle které hostitelská aplikace moduly rozlišuje, je tedy třeba zajistit skutečnou jedinečnost identifikátoru, alespoň v rámci našeho systému) a definovat schopnosti modulu pomocí vlastnosti canDos. Těchto schopností je celá řada, nejdůležitějšími jsou: sendVstEvents a sendVSTMidiEvent (modul může odesílat události VST), receiveVstEvents a receiveVstMidiEvent (modul může události VST přijímat – podpora práce s událostmi MIDI je součástí specifikace technologie VST od verze 2.0 výše). Dále je zde možnost přiradit další schopnosti modulu do pole vlastností Property (například po přiřazení hodnoty isSynth rozpoznává hostitelský program náš modul VST jako nástroj (instrument), jinak je modul rozpoznán jako obecný (send nebo master) efekt). Je také vhodné nastavit ošetření událostí, ke kterým může při běhu modulu dojít (OnEditorIdle, OnParameterChange a další)Po nastavení všech vlastností konstruktor zavolá konstruktor předka a předá mu potřebné parametry. b) Metodou APlugin.initializeParameters – v ní se nastaví vlastnosti všech parametrů, například maximální a minimální hodnoty, názvy jednotek, křivky průběhu a také počáteční hodnoty. Zajímavá je možnost nastavit parametru vlastnost smoothingFactor, která určuje, jak rychle bude parametr reagovat na náhlou změnu své hodnoty. Je-li nastaven na 1, parametr provede změnu okamžitě, v případě nižší hodnoty bude přechod probíhat postupně (s klesající hodnotou pomaleji). Ke čtení, respektive zápisu do parametru se dále v modulu používají procedury getParameterEx, respektive setParameterEx. c) Metodou APlugin.processMIDI – tato se stará o zpracování příchozích zpráv MIDI. Ty jsou proceduře předávány parametrem ev, což je struktura, která obsahuje v položce MidiData údaje o typu zprávy MIDI (status), použitém kanálu (channel) a datové byty (data byte). Dále v položce deltaFrames obsahuje údaj o relativním posunutí zprávy v čase (jednotkou jsou milisekundy). V této proceduře je tak například možné generovat nové zprávy MIDI na základě příchozích a nastavení parametrů. d) Metodou APlugin.editorIdle – skrze tuto proceduru lze přistupovat k oknu editoru (například změnit ovládací prvek, tak aby odpovídal změnám parametrů, ke kterým mohlo dojít). e) Metodou APlugin.processAudio – v této se odehrává nejdůležitější činnost těch modulů, které zpracovávají zvukové vstupy a (nebo) generují zvukové výstupy. Data jsou v něm zpracovávány po kvantech, které odpovídají vstupnímu bufferu (parametr inputs), zpracovány jsou odeslány do výstupního bufferu (parametr outputs). f) Metodou APlugin.parameterChanged – tato procedura (event
16
handler) umožňuje reakci vlákna modulu na změnu některého z parametrů.
5.2.2 Jednotka uEditor.pas Jádrem jednotky je formulář TPluginEditorWindow, který představuje hlavní okno editoru, na němž jsou rozmístěny ovládací prvky. Jednotka obsahuje procedury či funkce vyvolávané změnami v grafickém uživatelském rozhraní. Důležitými procedurami jsou: a) Metoda TPluginEditorWindow.UpdaterTimer – zajišťuje vizuální změnu ovládacích prvků tak, aby odpovídaly aktuálnímu stavu parametrů v závislosti na v nitřních hodinách. Tato změna se z důvodu optimalizace provede pouze byl-li některý z parametrů změněn (tj. je nastaven příznak Effect.editorNeedsUpdate na True). b) Metoda TPluginEditorWindow.OnEditorOpen – obstarává reakci na událost otevření, resp. znovuotevření okna editoru, tj. správné nastavení všech ovládacích prvků.
5.3 Uživatelské rozhraní Při návrhu uživatelského rozhraní (viz. obrázek 2) jsem bral ohled především na situaci, ve které bude program používán, tj. hudební koncert. Hudebník se věnuje přípravě svých nástrojů a použitého vybavení před koncertem, především na zvukové zkoušce. Má předem promyšleno, které zvuky či efekty bude při nadcházejícím koncertě používat, což se pravidelně mění například v závislosti na jeho náladě, koncertním prostředí, nebo podle aktuálních náhodných událostí. V této fázi příprav také mimo jiné provede potřebná základní nastavení programu VSTunel, který má spuštěn na laptopu umístěném bezprostředně ve svém dosahu poblíž hudebního nástroje. Poté co koncert začne, používá program jen tehdy, když potřebuje doladit některý z parametrů používaného zvuku (například zvýšit maximální hlasitost, nebo posunout frekvenční spektrum zvuku pomocí změny nastavení filtru). V takovém okamžiku pomocí touchpadu klikne (jednou či několikrát) na některé z tlačítek, které ovládají změnu potřebných parametrů, nebo posune jeden z posuvných ovladačů (scrollbar). Pro jednoduchost ovládání tedy největší část okna programu – přibližně polovinu – zabírají tyto ovládací prvky: pro každý parametr dvojice tlačítko „>“, sloužící ke zvětšení hodnoty a tlačítko „<“ sloužící ke zmenšení hodnoty, posuvné ovladače pro ovládání jednoho parametru a dvě dvojice tlačítek pro přepínání hodnoty parametru, u kterého se používají pouze dvě hodnoty - vypnuto/zapnuto (například povolení polyfonického výstupu nástroje, tj. možnost hrát více tónů současně). Nepoužívané ovládací prvky může uživatel znepřístupnit (resp. aretovat v nastavené poloze) zaškrtnutím políčka „povolit“ („enable“). Dále jsou zde velké číselné ukazatele aktuálního stavu jednotlivých parametrů, menší ukazatel kroku, o který se hodnota daného parametru jedním stiskem tlačítka zvětší nebo zmenší a také tlačítka pro nastavení tohoto kroku. Ta mohou být malá, změnu těchto parametrů bude uživatel
17
provádět jen výjimečně (při hraní ne). Na vrchním okraji okna jsou také dvě malá tlačítka sloužící k přepnutí jazyka grafického rozhraní programu a také tlačítko „Vypnout!“ („Panic!“), které slouží k hromadnému odeslání zpráv rozhraní MIDI typu „Uvolnění klávesy“ (Note-Off), tedy k rychlému řešení nepříjemné situace uváznutí tónu (stuck tone). U samotného okna editoru je vhodné v prostředí Delphi zrušit zobrazování okrajů (vlastnost BorderStyle nastavit na bsNone), protože hostitelské programy grafická rozhraní modulů VST umisťují do vlastních rámečků.
Obrázek 2 - Uživatelské rozhraní modulu VSTunel
18
5.4
Konstrukce modulu VSTunel Konstrukce modulu vychází z šablony VST Template. Skládá se ze tří jednotek: hlavní jednotkou je knihovna (library) VSTunel, která zjistí ovladačem podporovanou verzi rozhraní VST a vytvoří instanci třídy Aplugin, která představuje hlavní objekt, se kterým modul pracuje. Dále je zde jednotka uPlugin.pas, představující obsluhu hlavních funkcí modulu VSTunel. Tyto funkce jsou dvě: 1) Prostřednictvím programu lze generovat zprávy rozhraní MIDI, které mohou ovládat parametry softwarového syntetizátoru, kterému je program VSTunel připojen na vstup (MIDI In). Jádrem této funkce je reakce na událost stisknutí některého z tlačítek ovládajících změnu parametrů. Tím je vyvolána procedura parameterChanged(Index), kde Index je pořadové číslo změněného parametru. Tato procedura generuje v závislosti na tom, o který parametr se jedná, zprávu rozhraní MIDI (typu „Změna ovládacího prvku“ (Controller Change)), která v sobě nese novou hodnotu parametru. Typickým parametrem takto ovládaným je nastavení hlasitosti nebo filtru, ale za způsob propojení ovládacích zpráv rozhraní MIDI s konkrétními parametry je vždy zodpovědný samotný softwarový syntetizátor. Důležitým parametrem těchto zpráv je pořadové číslo ovladače (Controller number), které je uloženo v prvním datovém bytu zprávy. Může nabývat hodnoty 0 – 127, některé z těchto hodnot jsou však standardně přiřazeny určitým parametrům (například parametr číslo 0 typicky mění nástrojovou sadu (bank), parametr 1 modulační kolečko (modulation wheel), atd., viz kapitola 8.1). Z tohoto důvodu jsem tyto hodnoty nastavil v rozmezí od 55 do 60, kde jsou hodnoty vyhrazené pro libovolné použití uživatelem a nedojde tak k interferenci s některým standardním ovladačem. 2) Druhou funkcí programu je zpracování příchozích zpráv rozhraní MIDI. Pro nastavení změn tohoto typu slouží posuvné ovladače. Příchozí zpráva rozhraní MIDI je v proceduře processMIDI rozložena na jednotlivé komponenty – stavový byte, datový byte 1 a datový byte 2. V závislosti na nastavení posuvných ovladačů jsou tyto datové položky upraveny a na výstup se generuje nová zpráva rozhraní MIDI s již změněnými parametry. Takto se v programu ovládají transpozice a změna úhozové rychlosti.
19
Kromě implementace těchto dvou funkcí bylo nutno převážně z důvodu kompatibility vytvořit některé další funkce a nastavit další parametry, což učinilo modul standardnějším. Některé hostitelské programy totiž nejsou připraveny spolupracovat s moduly, které pracují pouze se zprávami rozhraní MIDI (což je případ mého programu). Například kvůli kompatibilitě s hostitelským programem Cubase jsem určil, že můj modul bude též schopen „zpracovávat“ zvukové vstupy (parametry numInputs a numOutputs jsou nastaveny na 2, tj. modul umožňuje stereo vstup i výstup zvukových dat). Zpracování zvuku provádí procedura processAudio, která ve skutečnosti ovšem pouze předá vstupní data na výstup, nijak je tedy neupravuje. Takto je ale také zaručena kompatibilita i jistá odolnost programu proti neuváženému zacházení uživatele. Nelze totiž s jistotou odhadnout, co by se stalo v případě, že by uživatel připojil zvukový zdroj na vstup modulu, který zpracování zvuku nepodporuje (této situace nelze dosáhnout v novějších hostitelských programech).
5.5
Návod k použití modulu Instalace je velmi jednoduchá, představuje prosté zkopírování programu (tj. souboru VSTunel.dll) do adresáře, ve kterém hostitelský program pro nástroje VST vyhledává moduly VST. V rámci operačního systému Windows XP to bývá často adresář „C:\Program Files\Steinberg\Vstplugins“. Většina hostitelských programů tuto cestu automaticky prohledává při svém spuštění, modul by tedy měl být automaticky rozeznán a zařazen do nabídky hostitelského programu, ale někde je nutné spustit toto prohledání ručně. Podporuje-li použitý hostitelský program ruční směřování datových toků v systému tak, jako je tomu například v programu Plogue Bidule, připojíme na vstup modulu VSTunel výstup portu MIDI In počítače. Naopak na jeho výstup připojíme softwarový syntetizátor (viz. Obrázek 3). Pokud hostitelský program ruční propojování nepodporuje, modul je třeba zapojit jako tzv. Send effect. Modul VSTunel ke svému fungování MIDI vstup nepotřebuje, přijde tak však ale o jednu možnost svého využití (filtrace a zpracování procházejících zpráv MIDI).
20
Obrázek 3 – Příklad typického způsobu zapojení modulu VSTunel v hostitelském programu Plogue Bidule. Modul je umístěn jako prostředník mezi portem rozhraní MIDI a softwarovým syntetizátorem. Bílé křivky znázorňují toky zpráv rozhraní MIDI, modré křivky znázorňují toky zvukových dat. Všimněte si modrých čtverců, které reprezentují audio vstupy a výstupy, které jsou z důvodu kompatibility u modulu VSTunel také implementovány.
Všechny běžné hostitelské programy podporují současné použití více instancí jednoho modulu VST (aniž by se tyto instance navzájem nějak ovlivňovaly), je tedy možné například vytvořit si pro každý použitý virtuální nástroj VST jednu instanci modulu VSTunel a ovládat jej jeho prostřednictvím (paralelní zapojení). Sériové zapojení dvou modulů VSTunel je možné, leč nedává valný smysl. Pokud je zapojení modulu správné, budou přes něj procházet zprávy MIDI. Jejich parametry (transpozici a úhozovou rychlost) může uživatel měnit pomocí posuvných ovladačů. Po přiřazení ovládacích zpráv konkrétním parametrům softwarového syntetizátoru je možno tyto ovládat pomocí tlačítek. V případě náhodného uváznutí noty je možné stisknout tlačítko „Vypnout!“, které se postará o odeslání zpráv MIDI, pomocí kterých ukončí všechny aktuálně znějící tóny.
21
6. Závěr Protože bych se v budoucnu rád věnoval práci na pomezí oborů hudební tvorby a informatiky, je pro mne tato bakalářská práci velkým přínosem. Program VSTunel, který vznikl jako součást této práce, je z hlediska své funkčnosti ojedinělý – myslím, že je tomu tak proto, že si hudebníci v zahraničí mohou dovolit zakoupit hardwarová zařízení, která tutéž funkci splní ještě pohodlněji, a proto žádný podobný program nepotřebují. Kromě toho, že jsem vytvořil program, který mi pomáhá při živé hudební produkci, musel jsem nejprve porozumět principům fungování rozhraní MIDI a konstrukci modulů VST, což se mi bude jistě ještě mnohokrát hodit. Především jsem si však ověřil, že jsem schopen takový modul sám vytvořit. Objevil jsem také velké množství (až na výjimky internetových) kvalitních informačních zdrojů, ke kterým se budu určitě často vracet. Bude-li tuto práci číst někdo, kdo se o danou problematiku začíná zajímat, myslím, že mu docela pomůže se v ní zorientovat (z tohoto důvodu jsem také u většiny odborných termínů, z nichž některé ještě ani nemají ustálené české ekvivalenty, ponechával v závorce kurzívou anglické termíny). Svým způsobem dává tento text čtenáři všechny potřebné informace, které by mohl potřebovat pro případné vytvoření vlastního modulu VST, přestože se netýká zpracování zvuku, což je dnes nejtypičtější forma použití technologie VST, ale „pouze“ využívá rozhraní MIDI. Ze zkušenosti ale vím, že rozhraní MIDI je samo o sobě velmi silným nástrojem a jeho znalost otevírá hudebnímu skladateli nebo interpretovi možnosti v minulosti zcela nevídané. MIDI je v hudebním světě teprve asi 20 let, což je z historického hlediska velmi krátká doba, dá se tedy očekávat, že se jeho použití v budoucnu rozšíří ještě mnohem více, než je tomu dnes. Zvláště ve spojení s technologií virtuálních nástrojů, potažmo nástrojů VST, si dokážu v budoucnu představit vytvoření na jedné straně nástrojů snadno ovladatelných, přenositelných a „inteligentních“, které umožní dosáhnout zajímavých hudebních výsledků i člověku bez zvláštních technických dovedností, na straně druhé pak vznik profesionálních hudebních nástrojů se sofistikovaným ovládáním, díky kterému bude možno pracovat se zvukem zcela novými způsoby. Možná, že právě to bude ten počin naší doby, který budou mít budoucí hudebníci za nejzávažnější.
22
7. Literatura Při tvorbě této práce jsem vycházel především z mnoha desítek internetových stránek, které se věnují rozhraní MIDI, modulům VST a jejich vývoji. Vybírám z nich jen ty nejdůležitější.
7.1
Zdroje pro rozhraní MIDI MIDI Manufacturers Association – základní server pro informace o rozhraní MIDI, dostupný na adrese http://www.midi.org/. Jsou zde zveřejňovány dokumentace k novým verzím standardů a specifikace všech stávajících. Je zde také množství odkazů na firmy vyvíjející programy pro práci s MIDI. MIDI Technical Fanatic’s Brainwashing Center – dostupné na adrese http://www.borg.com/~jglatt/, obsahuje návody, dokumentaci k rozhraní MIDI, užitečné jednoduché programy. Je zde velmi přehledná a detailní specifikace rozhraní MIDI (na adrese http://www.borg.com/~jglatt/tech/midispec.htm).
7.2
Zdroje pro rozhraní VST Steinberg Media Technologies GmbH – sekce Home/Company/3rd Party Developers, dostupná na adrese http://www.steinberg.net/324+M52087573ab0.html, obsahuje sady vývojových nástrojů pro moduly VST (VST SDK) a jejich dokumentaci ke stažení. Je také možno přihlásit se zde k odběru novinek (mailing list) a připojit se tak ke komunitě vývojářů. Díky vstřícnému přístupu firmy Steinberg je možné vyvíjet moduly VST na základě jejich technologie prakticky bez omezení, stačí uvést Steinberg v dokumentaci modulu, který vytváříte. Specializovanou stránkou technické podpory je The Yvan Grabit Developer Resource (na adrese http://ygrabit.steinberg.de/~ygrabit/public_html/index.html), kde jsou zveřejňovány novinky přímo od tvůrce standardu VST. Je zde také možno zaregistrovat si unikátní identifikátor pro svůj modul, aby jej komerčně nepoužil nikdo jiný. Tobybear Productions – dostupné na adrese http://www.tobybear.de/, server tvůrce šablony VST Template, kterou používám při konstrukci svého programu, obsahuje mnoho dalších užitečných programů pro MIDI, ukázky kódu a také velmi kvalitní stránku s odkazy na další užitečné internetové zdroje. Axiworld – server tvůrce překladu vývojového prostředí VST SDK firmy Steinberg z jazyka C++ do jazyka Delphi. Dostupný je na adrese http://www.axiworld.be/. Obsahuje ukázky zdrojových kódů, dokumentaci a množství návodů.
23
7.3
Ostatní zdroje University of California Electronic Music Studio Home Page – stránka prestižní školy v USA, dostupná na adrese http://arts.ucsc.edu/EMS/Music/ obsahující množství dokumentů týkajících se rozmanitých směrů výzkumu elektronické hudby. KVR Audio – dostupné na adrese http://www.kvraudio.com, centrum velké komunity uživatelů a vývojářů hudebních programů. Je zde možné nalézt odkazy na nejrůznější volně šířitelné hudební programy, velmi rozsáhlé fórum, které obsahuje odpovědi na nejrozmanitější problémy, se kterými se může člověk při psaní hudebních programů setkat, rady a postupy. Také je zde vždy aktuální sekce novinek ze světa hudebního software. Computer Music – internetová verze papírového měsíčníku z Velké Británie, dostupná na adrese http://www.computermusic.co.uk/main.asp, obsahuje návody, postupy, recenze nových programů. Projekt vstgui – umístěn na adrese http://sourceforge.net/projects/vstgui/, „open source“ knihovna grafických ovládacích prvků pro uživatelská rozhraní modulů VST (v jazyce C++). Plogue – stránky tvůrce populárního hostitelského programu pro moduly VST, Plogue Bidule (poslední verze 0.91), se nacházejí na adrese http://www.plogue.com/ . DreamFace – český server, dostupný na adrese http://www.dreamface.net/, sdružuje producenty a hudebníky vytvářející hudbu na počítačích. Obsahuje mnoho jednoduchých návodů a postupů. Electronic Musician – server, dostupný na adrese http://www.emusician.com/, obsahuje množství návodů k použití hudebních programů, recenze novinek Velmi kvalitním zdrojem informací technického zaměření je také Wikipedia (http://www.wikipedia.org/ ).
24
8. Přílohy 8.1
Standardní přiřazení ovládaných parametrů Zprávy rozhraní MIDI typu „Změna ovládacího prvku“ (Controller change) mají standardně přiřazeny parametry, které ovládají. Není-li parametr v seznamu, standardně není přirazen. 0 Výběr banku (hrubý) 1 Modulace (hrubá) 2 Dechový ovladač (hrubý) 4 Nožní pedál (hrubý) 5 Čas portamenta (hrubý) 6 Datový vstup (hrubý) 7 Hlasitost (hrubá) 8 Vyvážení (hrubé) 10 Panorama (hrubé) 11 Výraz (hrubý) 12 Ovladač efektu 1 (hrubý) 13 Ovladač efektu 2 (hrubý) 16 Posuvný ovladač pro obecné užití 1 17 Posuvný ovladač pro obecné užití 2 18 Posuvný ovladač pro obecné užití 3 19 Posuvný ovladač pro obecné užití 4 32 Výběr banku (jemný) 33 Modulace (jemná) 36 Dechový ovladač (jemný) 37 Nožní pedál (jemný) 38 Čas portamenta (jemný) 39 Datový vstup (jemný) 40 Hlasitost (jemná) 41 Vyvážení (jemné) 42 Panorama (jemné) 43 Výraz (jemný) 44 Ovladač efektu 1 (jemný) 45 Ovladač efektu 2 (jemný) 64 Aretace pedálu sustain (zap/vyp) 65 Portamento (on/off) 66 Pedál pro sustenuto (on/off) 67 Soft pedál (on/off) 68 Legato pedál (on/off) 69 Hold 2 (on/off) 70 Variace zvuku 71 Barva zvuku 72 Doba uvolnění zvuku 73 Doba náběhu zvuku 74 Jas zvuku
25
Bank Select (coarse) Modulation Wheel (coarse) Breath controller (coarse) Foot Pedal (coarse) Portamento Time (coarse) Data Entry (coarse) Volume (coarse) Balance (coarse) Pan position (coarse) Expression (coarse) Effect Control 1 (coarse) Effect Control 2 (coarse) General Purpose Slider 1 General Purpose Slider 2 General Purpose Slider 3 General Purpose Slider 4 Bank Select (fine) Modulation Wheel (fine) Breath controller (fine) Foot Pedal (fine) Portamento Time (fine) Data Entry (fine) Volume (fine) Balance (fine) Pan position (fine) Expression (fine) Effect Control 1 (fine) Effect Control 2 (fine) Hold Pedal (on/off) Portamento (on/off) Sustenuto Pedal (on/off) Soft Pedal (on/off) Legato Pedal (on/off) Hold 2 Pedal (on/off) Sound Variation Sound Timbre Sound Release Time Sound Attack Time Sound Brightness
75 76 77 78 79 80 81 82 83 84 91 92 93 94 95 96 97 98
Ovladač zvuku 6 Ovladač zvuku 7 Ovladač zvuku 8 Ovladač zvuku 9 Ovladač zvuku 10 Tlačítko pro obecné použití 1 (zap/vyp) Tlačítko pro obecné použití 2 (zap/vyp) Tlačítko pro obecné použití 3 (zap/vyp) Tlačítko pro obecné použití 4 (zap/vyp) Ovládání portamenta Hloubka efektů 1 Hloubka efektů 2 Hloubka efektů 3 Hloubka efektů 4 Hloubka efektů 5 Tlačítko pro zvětšení hodnoty Tlačítko pro zmenšení hodnoty Neregistrovaný parametr (jemný)
99 Neregistrovaný parametr (hrubý) 100 Registrovaný parametr (jemný) 101 Registrovaný parametr (hrubý) 120 Vypnutí zvuku 121 Vypnutí ovladačů 122 Místní klaviatura (zap/vyp) 123 Uvolnění všech not 124 Vypnutí módu omni 125 Zapnutí módu omni 126 Mono operace 127 Poly operace
26
Sound Control 6 Sound Control 7 Sound Control 8 Sound Control 9 Sound Control 10 General Purpose Button 1 (on/off) General Purpose Button 2 (on/off) General Purpose Button 3 (on/off) General Purpose Button 4 (on/off) Portamento Control Effects Depth 1 Effects Depth 2 Effects Depth 3 Effects Depth 4 Effects Depth 5 Data Button increment Data Button decrement Non-registered Parameter (fine) Non-registered Parameter (coarse) Registered Parameter (fine) Registered Parameter (coarse) All Sound Off All Controllers Off Local Keyboard (on/off) All Notes Off Omni Mode Off Omni Mode On Mono Operation Poly Operation
8.2
Obsah přiloženého média CD-ROM Na nosiči naleznete: 1. Zdrojové kódy programu VSTunel (projekt v prostředí Delphi 7) 2. Zkompilovanou verzi programu - soubor VSTunel.dll. 3. Knihovny CommonVST – součást šablony VSTemplate 4. Text této bakalářské práce v několika formátech. 5. Dokumentaci VST SDK firmy Steinberg – soubor Steinberg VST SDK 2.0 Documentation.pdf 6. Licenční smlouvu pro užití technologie VST firmy Steinberg – soubor VST Licensing Agreement.rtf.
27
VST je registrovaná obchodní známka Steinberg Media Technologies GmbH VST SDK do Delphi přeložil Frederic Vanmol (www.axiworld.be) Šablonu VST Template vytvořil Tobias Fleischer/Tobybear (www.tobybear.de)
Jan Valendin, 2006-05-14