OBSMidiRemote: XML séma létrehozása

A cikkben leírjuk, hogyan tudsz felparaméterezni egy szűz MIDI vezérlőt az OBS használatára.

Minta XML, XSD fájl

Aki már ismeri az XML fájlok csodálatos világát, annak az alábbi 2 link szinte elég is ahhoz, hogy elkészítse a sémát. Az XSD egy leíró, amely meghatározza az XML fájl formáját, lehetséges elemeit és attribútumait.

Az alábbi fájlok adhatnak támpontot a sémák készítésekor:
Minta XML: sample.hu.xml
XSD: ObsMidiRemote_1.xsd
AKAI APC MINI séma fájl
TFStreamBox séma fájl
 

Első lépés: Szerezzünk be minden információt a MIDI eszközről

Szükségünk lesz a gombok címeire, illetve a visszajelzéshez a ledek címeire is. Egy MIDI eszköznél ez egy szám 0-127 -ig, illetve még társulhat hozzá egy csatorna érték 0-16 -ig de ez nem feltétlenül szükséges. Az általunk használt MIDI eszköz az AKAI APC MINI -hez például a neten elérhető egy ilyen leírás:
 

AKAI APC MINI - Midi mapping
AKAI APC MINI - Midi mapping


Látható, hogy minden gombnak van egy értéke, ez a cím. Amikor a gombot lenyomjuk akkor küld egy üzenetet a számítógépnek, amiben szerepel a gomblenyomás ténye, illetve az, hogy melyik gombot nyomtuk le. Ahhoz, hogy hozzá tudjuk rendelni a gomblenyomáshoz funkciót ezeket az érékeket kell ismernünk.

Ha nem találtál ilyen információkat akkor sincs baj, csak egy kicsit tovább fog tartani:
Telepítsd fel a MidiOx nevű programot. Nyisd meg vele a MIDI eszközödet és kezd el szépen egyesével megnyomni és felengedni az összes olyan gombot, amit használni szeretnél az OBS-nél. Valami hasonlót kell látnod:

A pirossal bekeretezett rész egy billentyű lenyomása és felengedése (Note On / Note Off).
A DATA1 a gomb címe, a DATA2 pedig az értéke. Látható még a csatorna, illetve a parancs(event) hex megfelelője a státusz oszlop alatt.
A következőkben megcímezzük a bal felső gombot aminek a címe az 56, vagyis HEX formában a 0x38.
 

Egyszerű funkciógomb paraméterezése

Az alábbi kóddal a stream elindításához / megállításához fogjuk kötni az előbb megtalált gombot. (56 => 0x38)
Minden adatot HEX formában adunk meg.

//Egy MIDI-gomb OBS-funkcióhoz való társítása
<Item bind="stream" type="single">
    <Input type="toggle" cmd="0x90" data1="0x38" data2="0x7F" />
</Item>

Az Input elemmel tudjuk a gombot figyeltetni. Itt meg kell adni a gomb típusát (type=on|off|toggle), a parancsot amit az eszköz küld amikor lenyomjuk a gombot.
toggle=Váltógomb, egy gombbal lehet indítani és leállítani a rákötött funkciót.
on=ha lenyomjuk a gombot akkor csak bekapcsolni lehet vele az adott funkciót
off=csak kikapcsolni lehet vele az adott funkciót. Fel lehet venni több Input elemet is, ha pld 2 gombbal szeretnénk vezérelni. Egyik bekapcsol a másik pedig kikapcsol.

A cmd attribútumba kell eltárolni a parancsot amit az eszköz küld. Jelen esetben ez a NoteOn parancs ami 0x90-nek felel meg.
A data2 attribútumba kell eltárolni az eszköztől jövő data2 értéket, ez NoteOn esetén általában 127, azaz 0x7F, NoteOff esetén pedig 0. Ha -1 et adunk át a data2 értéknek, akkor pedig minden data2 értékre végrehajtja a parancsot, itt most a stream indítást/leállítást.
 

Led bekapcsolása

//Egy MIDI-gomb OBS-funkcióhoz való társítása és a LED kivezérlés
<Item bind="stream" type="single">
    <Input cmd="0x90" data1="0x38" data2="0x7F" type="toggle" />
    <Output type="on"  cmd="0x90" data1="0x38" data2="0x01"/>
    <Output type="off" cmd="0x80" data1="0x38" data2="0x00"/>
    <Output type="active" cmd="0x90" data1="0x38" data2="0x02"/>
</Item>

3 Output típusú elemmel egészítjük ki a minta kódunkat.  Az Output elemekkel tudjuk beállítani, hogy a funkció melyik állapotában milyen színű legyen a ledünk.
A type attribútummal lehet megadni az állapotot, ezért is van több Output elem. A type lehet on|off|active|starting|stopping|muted, ezek az OBS-funkciókkal változhatnak. Pld.: a stream indításánál/leállításánál a type elem nem vehet fel muted értéket, azt kizárólag az audio elemeknél lehet használni.
Az Output elemnek van még cmd paramétere, itt a parancsot kell küldeni. A legtöbb esetben ez ugyan az a parancs amit az Input-nál vettünk fel, azaz a NoteOn.
A Data1 paraméter itt is a cím, de itt a led címe. Általában a gombnak ugyan az a címe, mint a világító lednek. Ha ettől eltérő azt a MIDI eszköz specifikációjában találhatjátok meg. A Data2 paraméter pedig változó érték. Az AKAI APC MINI esetében ezzel a színt és az  esetleges villogás lehet beállítani. Míg 0=kikapcsolva, úgy 1=zöld 2=sárga 3=piros színeknek felelnek meg. az 5,6,7-es értékek pedig ugyan ezen színek villogó változata.

Az első Output sorral meghatározzuk a gombunk színét a bekapcsolt állapot, azaz type=on esetén. Itt a bekapcsolt állapot nem a streamelést jelzi, hanem azt, hogy a gomb használható, de az OBS nem streamel.
A második sorral meghatározzuk, hogy milyen színe legyen a gombnak, ha nem elérhető az adott gomb, azaz ki van kapcsolva.
A harmadik sor pedig az aktív, azaz a streamelés állapotát jelzi.
 

Egyszerre több gomb címzése (lásd jelenetek)
 

//Több MIDI gomb jelenetekhez csatolása
<Item bind="scene" type="range" from-index="0" to-index="4" from-address="56" to-address="0" step="8">
    <Input type="on" cmd="0x90" data1="%ADDRESS" data2="0x7F" />
    <Output type="on"  cmd="0x90" data1="%ADDRESS" data2="0x01"/>
    <Output type="off" cmd="0x80" data1="%ADDRESS8" data2="0x00"/>
    <Output type="active" cmd="0x90" data1="%ADDRESS" data2="0x02"/>
</Item>

Ezzel az Item szekcióval megcímzünk 5 gombot, ami az OBS-ben az első 5 jelenetet tudja majd aktiválni. Az első jelenet az 56-os gomb lesz, a második a 48-as, a harmadik a 40-es és így tovább. Ezzel az APC MINI első oszlopának egy részét címezzük meg.

Látható, hogy az Item type attribútuma "range" értékett kapott; ezzel lehet beállítani, hogy egyszerre több gombot címezzünk.
A from-index és a to-index az elemek OBS-ben lévő azonosítója, ezek mindig 0-tól indulnak. Annyi elem lehetséges, amennyit az OBS-ben fel tudunk venni, ennek a száma ismeretlen. (Pld.: a jelenetek esetén, fel tudunk venni csak 1 jelenetet, de akár 10-et is)

A from-address az eszközön lévő gomb címe, a számolás innét indul és a to-address -ig tart. A step pedig a lépést határozza meg, ebben az esetben minden ciklusban 8-at lépünk. Így tudunk egy körben megcímezni matematikailag nem egymás után következő gombokat.

Az Itemen belül ugyanúgy az Input és Output elemeket használjuk, annyi különbséggel, hogy a címeket a Data1 attribútumba a %ADDRESS kóddal helyettesítjük be.

A "range" típus használható még az alábbi OBS funkciókhoz: scene, scene-item, pscene, pscene-item, audio-item, volume-item, transitions
 

Használható OBS funkciók

Az Item bind paramétere tartalmazza a kívánt OBS funkciót, ezek az alábbiak lehetnek:
(@obsmode paraméter mutatja, hogy melyik OBS módban érhető el (0=Bármelyik, 1=Normál mód, 2=Stúdió mód)

Funkció (bind) Leírás
scene @obsmode=1/2 Jelenet aktiválása
scene-item @obsmode=1 Jeleneten belüli források megjelenítése/elrejtése
@obsmode=2 Csak sátusz kijelzés
pscene @obsmode=2 Előnézeti jelenet kiválasztása
pscene-item @obsmode=2 Aktív előnézeti-jeleneten belüli források megjelenítése/elrejtése
transitions Áttűnés típusok, típus aktiválása
audio-item Hang forrás-elem némítása/engedélyezése
audio-volume Hang forrás-elem hangerejének beállítása
stream Stream indítása/leállítása
record Felvétel indítása/leállítása
replay-buffer Visszajátszás tároló indítás/leállítás
replay-buffer-save Visszajátszás tároló mentése
connection-status OBS és OBSMidiRemote közötti kapcsolat állapota (csak kijelzés)
reload-obs-data Minden adat újratöltése az OBS-ből (csak gomb, nincs ledes állapota)
reload-sheme Sémafájl újratöltése
mode Stúdió mód be vagy kikapcsolása

UPDATE: SLOBS esetén nem használható a stúdió mód váltás, illetve az @obsmode paraméter. Csak a kimeneti jeleneteket lehet vele váltani.

Haladó beállítások

Az XSD fájl és a példa fájlok tartalmaznak minden lehetőséget.
Az Item elemeken használható az obsmode attribútum, ami meghatározza, hogy csak az OBS adott módjában menjenek (0=Minden mód, 1=Normál mód, 2=Stúdió mód)
Ezen felül amit itt nem említettünk külön az a Map elemen belüli Modifier szekció. Lehetőség van módosító gombok felvételére.
Egy módosító gombbal más funkció adható egy már korábban paraméterezett gombnak. Pontosan úgy működik, mint a SHIFT a billentyűzeteden.

A Modifier elembe fel lehet venni egy vagy több módosító gombot, a struktúra megegyezik a bemutatott Item elemekkel.
Az Item elemeken felvehető a modifier attribútum, amellyel meghatározható, hogy mely módosító használatakor aktiválódjon az adott elem. (-1=Bármelyik módosító, nincs rá hatással a módosítógomb lenyomás, 0=Akkor aktív ha nincs lenyomva módosító, 1>= A módosító azonosítója 1 az első 2 a második stb...)


 

Hozzászólás