Enterprise MIDI

From Enterprise Wiki
Jump to: navigation, search

Click here for English version.

Az alapok

A midi (kiterjesztése: *.mid) elsősorban szintetizátorok számára kidolgozott fájlformátum, de ma már számos más eszközzel, például PC-vel is lehet midi formátumú zenéket hallgatni és szerkeszteni. Nem tartalmaz a midi fájl hangmintát, hanem csak "kottát", és a kottához meg van adva, hogy az egyes szólamok milyen hangszereken szólaljanak meg. Ezek a hangszerhangok már előre be vannak építve az operációs rendszerbe (már Win95-ben is volt midi) vagy a szintetizátorba. A midiben akár 16 szólam (midi sáv) is szólhat egyszerre, és egy midi sávon belül is szólhat egyszerre több hang, akkordok. Megkülönböztetett midi sáv a 10-es számú, ahol dobhangok szólaltathatók meg. A célunk midi fájlok megszólaltatása az EP Dave hangchipjén keresztül, illetve EP-n megszólaló zene készítése PC-s midi szerkesztővel. Mivel a Dave összesen 3+1 csatornát tud használni, a netről letölthető midi fájlok közül szinte mindet át kell alakítani, hogy EP-n elfogadható hangzást kapjunk.

A midihez hardver is létezik EP-hoz, de nincs belőle túl sok példány. Egyelőre az EP128Emu emulátorral lehet egy midit lejátszó/szerkesztő PC-s programot összekötni, így szólaltathatjuk meg a midit az EP hangzásaival. Amire ehhez szükség van:

  • Midi port telepítése, például a loopMIDI. Linuxon használható a Midi Through port, illetve a szerkesztő programok (pl. Qtractor) is létrehozhatnak portot, amellyel az emulátor közvetlenül összeköthető. Hardveres MIDI billentyűzet használatára is lehetőség van, ilyenkor a loopMIDI-re nincs szükség
  • Az EP128Emu olyan verziójára, amely támogatja a midi bemenetet. (A legfrissebb emulátor a sourceforge oldaláról letölthető, ezt az itt található újabb béta verzióval kell frissíteni, tehát csak kibontani, és a fájljaival felülírni a már telepített emulátor fájljait.)

Ha ez megvan, az emulátorban az Options -> Sound -> Configure menüpontjában be kell állítani a midi bemenetet (loopMIDI port (I MMSystem) felirata van) Mindezek után indítsunk el egy midi lejátszót, szerkesztőt vagy virtuális billentyűzetet a PC-n, ahol kimenetnek a loopMIDI OUT-ot állítjuk be. Indítsuk el az emulátort, töltsük be a midiplay nevű alkalmazást rajta. Ezek után a midi lejátszó hangjai az EP-n fognak szólni, a DAVE képességeit használva.

A hang késésének és az időzítési hibáknak a minimalizálása céljából érdemes az alapértelmezett Latency beállítást (70 ms) csökkenteni, és alacsony szintű audio API-t (ALSA vagy WASAPI) használó kimeneti eszközt választani, különösen MIDI billetyűzet használatakor. Szintén célszerű kerülni a nagy CPU igényű vagy várakozást igénylő OpenGL video módokat (pl. "resample to monitor refresh rate").

A midiplay nevű EP-s alkalmazáshoz több fájl is tartozik, pl. envelope.txt, lásd lejjebb.

A midiplay EP-s alkalmazás használata emulátoron

Ezzel az alkalmazással tehát megszólaltatható a midi fájl EP-s hangszerelésben. Ha midi szerkesztőt használunk (pl. Cakewalk, Sonar, egyebek), közben az emulátoron keresztül is hallható ügyködésünk. Lehetőség van készre szerkesztett midi fájlt EP-n betölthető és lejátszható fájllá konvertálni (midiconv, lásd lejjebb). A midiplay induláskor automatikusan megnézi, az alapértelmezett mappában van-e mididata.bin nevű konvertált fájl (amelynek a maximális mérete 1040 bájt fejléc + 8192 bájt burkológörbe + 31743 bájt MIDI adat), és ha igen, azt játssza le, végtelenségig ismételve a lejátszást. Ha nincs ilyen fájl, akkor várja a program, milyen hangokat küldünk neki a loopMIDIn keresztül. A program futása közben a képernyő teljesen sötét, a mididisp.com változat azonban egyszerű megjelenítést is tartalmaz. Célszerű turbósított (pl. 10 MHz-es) konfiguráción futtatni, de működik 4 MHz-en is.

Indítás után használható gombok:

F1: a program újraindítása, újraolvassa az envelope.txt-t és (ha van) a mididata.bin-t

F4: minden hang kikapcsolása, hasznos "beragadt" hang esetén. A 123-as MIDI vezérlő is használható hasonló célra

F6: teljes MIDI reset, minden hang kikapcsolása mellett a vezérlőket, hajlítást és hangszereket is alaphelyzetbe állítja, fájl lejátszás esetén a fájl pozíciót is. A vezérlők és a hajlítás alaphelyzetbe állíthatók a 121-es vezérlővel is

F8: kilépés


Melyik MIDI csatorna (1-16) melyik Dave csatorna lesz? A midi csatornákat a lejátszó "logikai" csatornákként kezeli. Tehát mind a tizenhatnak külön tárolja a teljes állapotát:

  • a 128 billentyűt, hogy éppen melyik van lenyomva, és ha igen, akkor a hozzá rendelt DAVE csatornát
  • a programot (hangszert)
  • 4 vezérlőt (7, 10, 76, 77)
  • a hajlítást (csak a felső 8 bitet veszi figyelembe, a tartomány fix +/- 2 félhang)

Ez az információ független a DAVE csatornáitól, hogy egy MIDI hang melyik DAVE csatornára kerül, azt az alábbi algoritmus dönti el:

  • a dob csatorna (10) esetén feltétel nélkül a 3-as DAVE csatornára, az esetleges korábbi hangot azonnal megszakítva
  • egyébként a 0-2. csatorna közül ha az egyik jobb választás a másik kettőnél a burkológörbe fázis alapján (off > release > attack/decay > sustain), akkor arra
  • ha így nem sikerült dönteni, és aktív hangot kell megszakítani mert már mind a 3 zenei csatorna foglalt, akkor a régebbi (illetve release módban a régebben lecsengő) hang helyére kerül
  • ha ez is egyenlő, akkor egy fix sorrend alapján:
    • 1-es MIDI csatorna: 0 > 2 > 1
    • 2-es MIDI csatorna: 2 > 0 > 1
    • 3-es MIDI csatorna: 0 > 2 > 1
    • 4-es MIDI csatorna: 2 > 0 > 1
    • ...stb.

Ezért az 1-es DAVE csatornát csak akkor használja, ha 3 zenei hang aktív egyszerre. Pontosan kettőnél pedig biztosan a 0.-t és 2.-t. Bármelyik logikai MIDI csatornán lehet tetszőleges számú hang, de összesen mindig legfeljebb 3 + 1 dob.

A bal és jobb csatorna hangereje a következő módon számítható közelítően:

Bal = ENV_L * ((VELOCITY + AFTERTOUCH + 1) / 128) * ((VOLUME + 1) / 128) * cos(PAN * (PI / 2) / 127.5) * sqrt(2)
Jobb = ENV_R * ((VELOCITY + AFTERTOUCH + 1) / 128) * ((VOLUME + 1) / 128) * sin(PAN * (PI / 2) / 127.5) * sqrt(2)

Ahol ENV_L = bal burkológörbe, ENV_R = jobb burkológörbe, VELOCITY = billentyű leütés erőssége, AFTERTOUCH = extra nyomás erősség, VOLUME = hangerő (7-es vezérlő), PAN = sztereó pozíció (10-es vezérlő). Ha a burkológörbét 1-nél nagyobb értékkel kellene szorozni, akkor a szorzó 1-re korlátozott. Tehát a sztereó pozíció állítása csak akkor működik helyesen, ha a VELOCITY és VOLUME együttesen legalább 3 dB hangerőcsökkenést eredményez. A hangerő szorzás ténylegesen csak 1/128 felbontású. Az AFTERTOUCH paramétert az Axh és Dxh MIDI események állítják, az előbbi billentyűnként külön, az utóbbi az adott csatornán minden aktív hangnál egyszerre. Új hangnál (9xh esemény) mindig nulla a kezdeti értéke.

A MIDI fájl speciális beállításai

A midiplay lejátszó tehát az egyes midi sávokat bizonyos logika alapján párosítja a Dave csatornákhoz. Azonban mi is meghatározhatjuk, hogy egy adott sáv egy adott Dave csatornának feleljen meg. Így a dinamikus foglaláson kívül fix csatornafoglalást is be lehet állítani. Sőt, erre a legtöbb esetben szükség is van, ha ki akarjuk használni a Dave képességeit, és a netről letöltött midi fájlt EP-n is értelmes hangzásúra akarjuk konvertálni.

Ehhez a midi fájlban a különböző vezérlőkben különböző, Dave specifikus beállításokat hajthatunk végre. (A vezérlők a midi szerkesztő programokban általában a Controllers menüpontban érhetők el.)

A MIDI vezérlők használata

71-es (Harmonic Content) és 76-os vezérlő: STYLE paraméter / 4

A Style paraméter ugyanaz, mint amit basic-ben kell megadni a STYLE után, csak 4-gyel el kell osztani. Tehát pl. ha 16 (alacsony torzítás), akkor 16/4=4-et kell megadni. Ha 144-et (gyűrűmoduláció+alacsony torzítás), akkor 144/4=36-ot kell megadni:

- 16 -> 4 (alacsony torzítás)

- 32 -> 8 (közepes torzítás)

- 48 -> 12 (magas torzítás)

- 64 -> 16 (felüláteresztő szűrő, 0. és 1. ill. 1. és 2. csatorna között)

- 128 -> 32 (gyűrűmoduláció a 0. és 2. ill. 1. és 3. csatorna között)

Négyszögjel 4 bites torzításánál 2 hozzáadása módosítja a frekvencia korrekciót, az alapértelmezett 15 helyett 5 hosszúságú mintát (magasabb hangot) eredményez.

70-es (Sound Variation) és 77-es vezérlő: csatorna vezérlés, csak a 2..4 biteknek van hatása:

- 0 = dinamikus foglalás

- 4 = fix 0. csatorna (csak egy szólamú)

- 8 = fix 1. csatorna

- 12 = fix 2. csatorna

- 16, 24 = 0-s csatorna, legfeljebb 3 hang időosztásos rendszerben (ez több ugyanilyen módú MIDI csatorna között is lehetséges)

- 20, 28 = 1-es csatorna, itt is legfeljebb 3 hang váltakozhat hasonló módon

A DAVE csatornák fix hozzárendelése nem kizárólagos, ezeket a dinamkius foglalású MIDI csatornák továbbra is használhatják.

Az ENVELOPE.TXT használata

A midi fájlok különféle hangszerek hangját szólaltatják meg. Az envelope.txt ezekhez a hangszerekhez társít hangzást (burkológörbét), ezt felhasználva fog megszólalni a Dave képességeit használva EP-n. Csak valós idejű bemenetnél (MIDI port) és fejléc nélküli mididata.bin lejátszásánál van szükség a használatára, az újabb formátumú konvertált fájlok tartalmazzák a hangszereket is.

Egy "hangszer" definíciója így néz ki:

HANGSZER[D][P][:+CSATORNA,+MAGASSÁG][,HANGSZER2...] {
 [L|R|S] IDŐTARTAM, BAL, JOBB, HAJLÍTÁS, TORZÍTÁS;
  ...
}

Több hangszer is használhatja ugyanazt a burkológörbét, több számot megadva vesszővel elválasztva. A hangszer száma vagy 0 és 127 közötti a normál csatornákhoz, vagy -1 és -127 közötti a dobokhoz. Ezt opcionálisan követheti 'P' karakter (lásd lent), illetve kettősponttal elválasztva megadható még két további paraméter, ilyenkor a hangszer használatakor a hangjegyről másolat készül a MIDI csatorna számának és a hangmagasságnak a módosításával. Például 1:2,12-nél az 1-es hangszer a kettővel nagyobb számú MIDI csatornán is megszólaltat egy oktávval magasabb hangot.

A hangszer száma utáni 'D' karakter kényszeríti a burkológörbe teljes lefutását a billentyű korai elengedésekor is, doboknál és 'R' szegmenst tartalmazó burkológörbéknél ez az alapértelmezés, így ott értelmetlen a használata, 'L' vagy 'S' esetén pedig hibát eredményez. A 'P' a hangok sztereó pozícióját változtatja a hangmagasságtól függően, dobnál nincs hatása. Alapértelmezés szerint a 48..79 tartományba eső hangok kerülnek 1..125 pozícióra, ez a 10-es vezérlővel módosítható. A 9-es hangszernél (Glockenspiel) az effektus alapértelmezés szerint bekapcsolt állapotú és a 'P' tiltja.

Az időtartam (ami video megszakítás egységekben adható meg, 0 esetén a paraméterek változása azonnali) előtt az 'S' karakter azt jelenti, hogy az adott szegmens kezdete "sustain" pozíció, ahonnan a lejátszó csak a billentyű elengedésekor lép tovább. Ennek doboknál nincs értelme. A burkológörbe egy szakasza ismételhető is az 'L' karakter használatával, amely önmagában a burkológörbe további részét végteleníti elengedési fázis hozzáadása nélkül. Az 'R' hatása hasonló az 'S'-hez, de azzal ellentétben a burkológörbe mindig lefut a végéig, 'S'-nél viszont az azzal megadott pont elérése előtt azonnal megszakad. Az 'L' és 'R' együttes használatakor az ezek közötti szakasz ismétlődik (az L-es szegmens elejétől az R-es előtti végéig), elengedéskor pedig az ismétlődés megszűnik és a burkológörbe lefut a végéig.

Az EXOS-tól eltérően a hangerők abszolút értékek 0 és 63 között, azt adják meg, hogy mi lesz az új hangerő a következő szegmens elején, amit lineáris interpolációval ér el. Lehetőség van azonban exponenciális burkológörbék definiálására is, ha a hangerő érték előtt '*' karakter található, akkor a megadott szám / 128-al szorzódik a hangerő minden megszakításnál. Tehát például *96 esetén 0.75 a szorzó, *128-nál nem változik a hangerő, stb. A hajlítás egy -2048 és +2047 közötti egész, 64 felel meg egy zenei félhangnak. Itt is lineáris interpoláció történik, és a megadott értéket a következő szegmens elejére éri el. Dobokat nem lehet hajlítani.

A torzítás (STYLE) a többi paraméterrel ellentétben nem interpolálható, hanem az értéke azonnal módosul, erre figyelni kell ha változik a hang közben.

Szóközök, Tab karakterek és új sorok tetszőlegesen használhatók, a program ezeket figyelmen kívül hagyja. '#' karakter esetén a sor további részét megjegyzésnek tekinti és szintén figyelmen kívül hagyja.


A lejátszó program a lefordított (bináris) burkológörbe adatot automatikusan menti egy envelope.bin nevű fájlba. Ennek a formátuma:

  • 256 bájt a normál hangszerek másolását definiálja, csatorna és magasság eltolás felváltva (csak az alsó 4 illetve 7 biten), FFFFh esetén ez a funkció tiltott
  • a következő 256 bájt ugyanez a dobokhoz, azonos formátumban
  • 256 bájt burkológörbe kezdő pozíció a normál hangszerekhez: alsó, felső bájt felváltva, a burkológörbe adat kezdetéhez képesti eltolás / 2, vagy 8080h ha a hangszer nem definiált. A felső 4 bit speciális funkciót tölt be, ezért a címezhető burkológörbe adat maximális mérete 8192 bájt. Az alapértelmezés 2000h, amit az 'S' használata nem változtat.
    • 15. bit: tiltja a hangszert
    • 14. bit: hangmagasságtól függő sztereó pozíció (P)
    • 13. bit: ismétlődő szakasz (L) hiányát jelzi
    • 12. bit: elengedéskor kényszeríti a teljes burkológörbe lefutását (R)
  • 256 bájt burkológörbe pozíció a dobokhoz
  • legfeljebb 8192 bájt burkológörbe adat, minden 50 Hz-es megszakítás 4 bájt:
    • bal hangerő, 0 és 63 között. A 6. bit beállítása ismétlődő szakasz kezdetét (L) jelzi, a 8. pedig a végét ami már nem ismétlődik. A két bit együttesen beállítva az aktuális minta tartását, majd elengedési szakaszt jelez (csak R, vagy S). Speciális eset ha a bal hangerő 7. bitje beállított, a jobb hangerő pedig FFh, ez a burkológörbe végét és a hang kikapcsolását jelenti
    • jobb hangerő 0 és 63 között, vagy 255 a burkológörbe végén
    • hajlítás alsó 8 bit, a felbontása egy félhang 1/64-ed része. Doboknál nem használt
    • torzítás, és (csak normál hangszereknél) a hajlítás felső 4 bitje előjelesen. Dob esetén a teljes bájt torzítást definiál

A MIDI fájl konvertálása EP-n lejátszható formátumúra

Ha készre szerkesztettünk egy midi fájlt, ami már jól szól a Dave hangzásokkal, átkonvertálhatjuk, hogy EP-be betöltve lehessen hallgatni. A midiconv (régebbi verzió 1, 2, 3) egy parancssoros alkalmazás. A parancssort Windowson a start menüben lehet megtalálni. A dos-os CD paranccsal abba a könyvtárba kell lépni, ahol a midiconv.com van, és így kell használni:

midiconv INFILE.MID OUTFILE.BIN ENVELOPE.BIN|ENVELOPE.TXT|-raw [IRQFREQ] [-optsort] [-renumber] [-quantN] [-biasN] [-render] [-1..-9]
midiconv ENVELOPE.TXT ENVELOPE.BIN -env [-1..-9]

A második paranccsal szöveges formátumú hangszer definíciók konvertálhatók binárisra. MIDI konvertáláskor az alábbi paraméterek használhatók:

  • IRQFREQ (alapértelmezés szerint 50.0363 Hz): a feltételezett megszakítás frekvencia lejátszáskor, ez jelenleg csak az 50 Hz-es video megszakítás lehet, de eltérő érték megadásával gyorsítható vagy lassítható a zene. Ha az eredeti tempó 125 vagy 150 BPM, vagy más érték ahol a negyedhangok időtartama 20 ms pontos többszöröse, akkor célszerűbb lehet 50-re állítani
  • -optsort: az azonos időpontú hangjegyek sorrendjét optimalizálja a MIDI adat méretének a csökkentésére, egyébként a rendezés a csatorna szám szerint történik
  • -renumber: átszámozza a hangszereket 0-tól kezdődően, a dobok számozását nem változtatja
  • -quantN: ha N nem 0 (1 és 9 közötti egész szám lehet), akkor automatikusan módosítja a zene tempóját, hogy egy negyedhang időtartama N megszakítás pontos egész számú többszöröse legyen
  • -biasN: az események időpontjának a konvertálásakor a kerekítésre van hatása, N 0 és 99 közötti egész (az alapértelmezés 25), 0 lefelé kerekít, 99 felfelé, 50 a legközelebbi egész számú megszakításra
  • -N: tömörítés engedélyezése, N (0 és 9 között) a mértékét állítja, 0 tiltja a tömörítést, nagyobb érték kisebb file méretet eredményezhet, de növelheti is azt
  • -render: a midiplay emulációjával DAVE regiszter adatot generál (16 bájt / megszakítás)

A parancs kiadása után azonnal megjelenik az adott mappában a bin fájl, amelyet a midiplay.com EP-s alkalmazással lehet EP-n lejátszani.

A konvertált fájl formátuma:

  • 16 bájt EXOS fejléc:
    • 00h, 6Dh
    • 2 bájt fájl méret a fejléc nélkül (az alsó bájt az első), későbbi tömörített formátumnál ez a tömörített adat teljes mérete
    • 2 bájt tömörítetlen burkológörbe adat méret
    • 2 bájt tömörítetlen MIDI adat méret
    • 1 bájt fenntartva későbbi verziók számára, mindig 00h
    • 1 bájt tömörítés típusa (0: nincs, 2: epcompress -m2, más formátumot a lejátszó jelenleg nem támogat). Tömörített fájl csak a midi_asm.com vagy mididisp.com programmal játszható le, és az epcompress módosított verziójával (midipack) csomagolható ki
    • 2 bájt tömörített burkológörbe adat méret, tömörítés nélkül 0
    • 4 bájt fenntartva későbbi verziók számára, mindig 00h
  • burkológörbe adat (envelope.bin) a fent leírt formátumban
  • MIDI adat, ennek a formátuma hasonló a szabványos MIDI-hez, de csak csatornaüzeneteket tartalmaz egy sávon, fejléc nélkül, és az események közötti időtartam EP megszakítás egységekben adható meg. Ez az adat például az első csatornán a 440 Hz-es "A" hangot szólaltatja meg egy másodpercig maximális hangerővel a 11-es hangszeren:
    • 00 C0 0B 00 90 45 7F 32 45 00

A program a -raw paraméter használatakor egyszerű fejléc nélküli formátumra konvertál, amely csak a MIDI adatot tartalmazza, ennek a használatakor nincs szükség a parancssorban az envelope.bin megadására.

Egyéb

A midi hangszerek neve és sorszáma

A midi dobok neve és sorszáma