Seri(ál)ová MIDI komunikace XXIV - Práce se SysEx daty v XG - kontinuální nastavení parametrů
V minulém dílu seriálu jsme si ukázali pár konkrétních statických nastavení typů efektů v režimu XG. Dnes pokročíme od statického nastavení ke kontinuální změně nějakého parametru efektů.
Pro nastavování opět využijeme manuálu zvukové karty Yamaha DB50XG. Budeme nastavovat například úroveň Feedbacku Variation kontroléru efektu Delay L, C, R. Úroveň kontroléru budeme přidávat, takže Delay bude čím dál více patrný.
Předpokládejme, že už máme Variation efekt definován, je zvolen efekt Feedback Variation a v MIDI stopě má tento efekt nastavenou určitou hloubku (nejlépe bude efekt pochopitelně patrný, pokud bude hloubka nastavená na nejvyšší úroveň: 127, resp. 128).
Na straně 39 manuálu DB50XG se dočteme, že efekt Delay L, C, R nabízí 16 parametrů jako všechny Variation efekty. Námi požadovaný parametr Feedback Level je 5 (no. 5). Vrátíme se v manuálu zpět na stranu 28, kde najdeme řádek s označením Variation Parameter 5 ve sloupci Parameter. Zjistíme, že zde jsou hodnoty MSB a LSB. To znamená, že parametr by bylo teoreticky možné nastavovat velice podrobně, nikoliv pouze 128 kroků, které nabízí jedna hodnota parametru. Díky možnosti nastavovat hodnotu LSB a LSM, lze dosáhnout rozlišení až 16 384 kroků. Nicméně v tabulce na straně 39 ve sloupci Value u Delay L, C, R vidíme, že hodnoty lze nastavovat pouze v rozsahu 0 až 127. Proto nás bude zajímat pouze hodnota MSB. Pokud by se využívaly oba bajty (MSB i LSB), nastavovala by se nejdříve hodnota LSB a poté MSB. Takže nejdříve by se nastavovalo LSB na 000 a MSB na 000; 001; 002, až 127. Pak by se hodnota LSB nastavila na 001 a MSB znovu od 000; 001; 002, atd. Tak by se vytvořila potřebná řada.
Zpět na straně 28 se dozvíme, že adresa pro Variation Parameter 5 LSB má adresu: $02 $01 $4A. V prvním a druhém sloupci vidíme začátek adresy $02 $01, který je společný pro všechny Variation parametry. $4A značí LSB 5. parametru, který nás zajímá.
Vedle sloupce Address je na straně 28 sloupec Size, který značí právě velikost zprávy. Pokud je zde 2, znamená to právě události MSB i LSB. V dalším sloupci, označeném Data, se zobrazuje rozsah. U pátého parametru vidíme rozsah $00 až $7F. Nyní už tedy známe všechny potřebné informace pro sestavení celé SysEx události.
Událost bude začínat $F0 $43 $10 $4C (začátek SysEx události; ID Yamaha; specifické ID nástroje v MIDI systému nastavené na 0; XG zařízení). Následovat bude již dříve zjištěná adresa $02 $01 $4A (Efekt; 1. efekt; Variation parametr 5). Nyní již nastavíme požadovanou hodnotu daného parametru, tedy libovolnou hodnotu v rozsahu $00 až $7F (desítkově tedy 0 až 127). A na závěr pochopitelně musí být informaci o ukončení SysEx události $F7. Celá zpráva tedy vypadá: $F0 $43 $10 $4C $02 $01 $4A $7F $F7. Tím jsme nastavili maximální hodnotu parametru, tedy hodnotu 127.
Nyní, pokud chceme kontinuálně vysílat změnu tohoto parametru, musíme vyslat vždy celou SysEx událost pro danou hodnotu v daný čas. Budeme tedy vysílat následující sekvenci SysEx událostí:
$F0 $43 $10 $4C $02 $01 $4A $00 $F7
$F0 $43 $10 $4C $02 $01 $4A $01 $F7
$F0 $43 $10 $4C $02 $01 $4A $02 $F7
$F0 $43 $10 $4C $02 $01 $4A $03 $F7
$F0 $43 $10 $4C $02 $01 $4A $... $F7
$F0 $43 $10 $4C $02 $01 $4A $0F $F7
$F0 $43 $10 $4C $02 $01 $4A $10 $F7
$F0 $43 $10 $4C $02 $01 $4A $11 $F7
$F0 $43 $10 $4C $02 $01 $4A $... $F7
$F0 $43 $10 $4C $02 $01 $4A $1F $F7
$F0 $43 $10 $4C $02 $01 $4A $20 $F7
$F0 $43 $10 $4C $02 $01 $4A $... $F7
$F0 $43 $10 $4C $02 $01 $4A $7F $F7
Tak postupně vysíláme hodnoty (ve stejných hodnotách jako v příkladu, jen zobrazené desítkově) 000; 001; 003; ...; 015; 016; 017; ...; 031; 032; ...; 127, čímž postupně zvyšujeme Feedback Value efektu Delay L, C, R.
Je jenom potřeba, aby události nebyly vysílané příliš rychle po sobě, aby MIDI jako systém stíhalo všechna data přenášet. Záleží pochopitelně na tempu skladby, nelze jednoduše říci, že se má počkat vždy 2 tiky nebo 20 tiků atd.
V případě, že chceme současně měnit více parametrů jednoho efektu a nebo více efektů, je nutné vždy vyslat pro každou jednu samostatnou událost novou zprávu. Zprávy nelze žádným způsobem sloučit do jedné a nastavovat větší počet událostí současně.
NEZAPOMEŇTE:
Pro vysílání změny hodnoty parametru, je vždy potřeba vyslat celou SysEx událost, nikoliv pouze hodnotu novou změněného parametru.