Elkezdtem írni egy basic programot, ami midi fájlból átalakítja a zenét basic programmá:
[ Guests cannot view attachments ]
Leginkább arra jó, hogy midi fájlban lehessen zenét szerkeszteni a DATA sorok írkálása helyett basic programokba. Egyelőre a három hangcsatornát kezeli, mindegyik csatornához szigorúan külön midi sáv kell szerkesztéskor. Induláskor bekéri a midi file nevét (kiterjesztést nem kell megadni), és megkérdezi, hány sávot akarunk a fájlból a basic programba betenni. A basic programot tokenizálatlan formában menti a file: eszközre, az eredeti fájlnévvel, .bas kiterjesztéssel.
Az első sávtól kezdve folyamatosan nézi végig a sávokat, és amit tud, átkonvertál basic DATA sorokba róla. (Természetesen lejátszó részt is ment hozzá, ami beolvassa a dara sorokat.) A midi sávokon, úgy láttam, 90h jelzi azt, ahol maguk a hangok kezdődnek, ezt az értéket keresi a program. Közben kiderült, néhány fájlban ez az érték 91h vagy 92h, ezeket is keresi, az utóbbit csak a 3. csatornához (3. midi sávon) egyelőre. (Nem tudom, mitől függ, hogy 90h, 91h vagy 92h jelzi-e a hangok kezdetét...)
A midi fájl tempóját nem veszi figyelembe, fix értékeket lő be az egyes hanghosszúságokhoz, egyszerűen elosztja 5-tel a midi fájlban megadott hanghossz értéket, ez lesz a duration. (Ezen még lehetne fejleszteni, de aki zenét konvertál, úgyis beállíthatja magának, milyen duration hosszúságokra konvertáljon.) Gyorsabb zenénél, különösen több csatornánál a lejátszás basicben lelassulhat, akadozhat.
A netről leszedhető midi fájlok konvertálására nem igazán alkalmas. Az olyan fájlokra van kihegyezve, amelyek 4 bájton tárolják a hang magasságát és hosszát, ezek után 2 darab 0 értékű bájt jön, majd újra 4 bájtos hangok és így tovább. Amikor 4 helyett 5 bájton van tárolva a hang, mert hosszabb, azt is kezeli, de a két bájton megadott hosszúságot nem jól konvertálja, mert fogalmam sincs, a két bájtból hogyan lehetne kiszámolni a tényleges hanghosszt. A szüneteket is valamennyire kezeli, amikor a 4 vagy 5 bájt után a két 0 értékű bájt közül a második értéke nem 0, de nagyobb szünetek megfekszik a gyomrát. Azt sem kezeli, ha szünettel kezdődik egy sáv (ez nem tudom, mennyire más felépítésű, mint az átlag). Ezeket majd még lehetne javítani.
A basic korlátai miatt mind a három csatornán egyszerre csak egyforma hosszú hang szólhat, programozásilag nem igazán lehet máshogy megoldani, így a 3 csatornához egyetlen hanghosszt rak hozzá. Így kizárólag olyan többszólamú midi konvertálására alkalmas, ahol a sávokon párhuzamosan egyforma hosszúságú hangok (vagy szünetek, ezt nem teszteltem műköik-e) szólnak.
A szüneteket 126-os pitch magasságú hanggá konvertálja, ez olyan magas, hogy nem hallatszik, bár nem a legjobb. Viszont ha még más módon meg kéne adni a hangerőt is, az lassíthatja, akadozóvá teheti a lejátszást.
Amit eddig a Cakewalkkal írtam a programhoz, azt megette.
Az innen letölthető kb. 20 egyszólamú midi közül 4-et átkonvertált és szólt is rendesen. (Azt hiszem, a matáv, pumukli, verve, macskajaj címűeket.)
Néhány midibe kiszedett játékzenét is sikerült valamennyire megetetni vele, így basicben is hallgathatók úgy, ahogy:
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]