Lasermania

Tło historyczne

Trafiłem niedawno na youtubowy kanał Arkadiusza Lubaszki i odżył mój sentyment do "małego" Atari - wszystko za sprawą "Gramy na gazie", gdzie Larek i RetroBorsuk grają w stare gry na "atarynkę". W tym miejscu gorąco polecam miłośnikom Atari ten kanał - bo to, że panowie grają, to jedno, ale jak i co przy tym opowiadają, to ogromna wartość dodana. Można się w ten sposób dowiedzieć mnóstwa rzeczy, których zwyczajnie nie można się było skąd dowiedzieć w czasach świetności maszyn ośmiobitowych.

Do sedna jednak. Po obejrzeniu jednego czy dwóch odcinków "Gramy na gazie" YouTube zaczął mi podpowiadać filmiki z gier, a wśród nich czołówkę z gry Lasermania. Miałem zawsze słabość do muzyki z tej gry, więc sobie - przez sentyment - włączyłem. No i jak to u mnie, nie skończyło się na posłuchaniu - musiałem wpaść na pomysł. Pomysłem tym, jak się może już niektórzy domyślają, było nagranie coverów "laserowych" utworów.

Muzyka bez muzyki

Żeby mieć muzykę "źródłową", wyszukałem w sieci obrazy dyskietek z programem Chaos Music Composer oraz plikiem LASER.CMC. Zamierzałem włączyć program w emulatorze "małego" Atari, nagrać dźwięk i przystąpić do tworzenia coverów. ALE... przecież - skoro zdobyłem plik LASER.CMC - to może skonwertować go na plik .mid i bezpośrednio wrzucić do DAW?

Problem pojawił się od razu - nigdzie nie znalazłem żadnego konwertera, który potrafiłby przerobić pliki .cmc na .mid. Sprawa wydawała się przegrana, kiedy natknąłem się na... specyfikację formatu .cmc. Co może pomyśleć programista, jeśli ma plik, który chce odczytać i opis formatu tego pliku? Oczywiście myśli: sam sobie napiszę konwerter.

No i tak się właśnie stało - odpaliłem wiernego IntelliJa i utworzyłem nowy projekt - CMC2MID. Wprawdzie nie miałem pojęcia, jak utworzyć plik .mid po tym, jak już odczytam dane z pliku .cmc, ale Prawdziwy Programista nie przejmuje się takimi drobiazgami.

Zadanie odczytu danych z pliku Chaos Music Composera było skomplikowane tylko o tyle, że w definicji utworu pojawiają się tam komendy specjalne (w rodzaju: powtórz ten fragment x razy albo skocz n linii naprzód). Nie zajmowałem się za to w ogóle interpretacją definicji instrumentów. Dwa wieczory później dysponowałem już programem, który potrafił "wylistować" zawartość pliku .cmc.

Pozostała jeszcze do zrobienia część tworząca plik MIDI - na szczęście okazało się, że Java ma wbudowaną obsługę tego formatu, więc wystarczyło tylko przenieść zdekodowane informacje o utworze i patternach do nowych struktur i zapisać plik. Trochę zabawy było tutaj ze zmianą organizacji danych - Chaos Music Composer ma budowę "trackerową", że tak to nazwę, w pliku MIDI trzeba było dane przypisać do poszczególnych instrumentów. Koniec końców Studio One zaimportowało ze stworzonego przeze mnie pliku coś, co z grubsza przypominało oryginalny utwór. Pozostała do wykonania część muzyczna.

Walor edukacyjny

Praca nad konwerterem sprawiła mi niespodziewanie dużo frajdy (np. przypomniałem sobie nieco szesnastkowy system liczbowy). Napisanie kilku fragmentów nie było trywialne i trzeba było się nagłówkować nad rozwiązaniem, ale ostatecznie całość elegancko zadziałała. Wprawdzie nie rozwiązałem wszystkich problemów (np. "komendy" skoków są zwyczajnie ignorowane), ale nie było mi to do niczego potrzebne, bo wolałem już przejść do DAW i bawić się muzyką.

Praca nad konwerterem uświadomiła mi jednak, jak bardzo zmieniło się programowanie od czasów ośmiobitowców, przede wszystkim w kontekście "oderwania się" od sprzętu (dacie wiarę, że taki Chaos Music Composer w swoim interfejsie użytkownika - notabene, bardzo prostym i przejrzystym - wyświetlał m. in. adresy w pamięci, gdzie była umieszczana muzyka?

Tak czy owak, zapraszam do przesłuchania efektów - ale to już w osobnym wpisie na profilu Gades.

UZUPEŁNIENIE z 2020-04-19: okazuje się, że konwerter z formatu cmc do MIDI istnieje, co odkryłem zajmując się coverami muzyczek z Atari trochę dogłębniej. Całość została opisana tutaj, zaś jedyna rzecz, jaką trzeba zrobić, to zmienić rozszerzenie .sap na .cmc w pierwszej linii skryptu:

@set cmc=%1.cmc
@set txt=samples\dump\con_%1.txt
@set bz2=samples\dump\con_%1.txt.bz2
@set mid=samples\midi\con_%1.txt.mid

"c:\Program Files\asap\asapscan.exe" -d %cmc% > %txt%
"c:\Program Files\7-zip\7z.exe" a %bz2% %txt%
del %txt%
pokey2midi %bz2% %mid%
copy %cmc% samples\sap\con_%cmc% 

Komentarze

  1. Aha. No tak, oczywiście. Mhm. Zapewne. No to super! Czyli tak ogólnie to wierzę Ci na słowo.:))) Odczucia mam zbliżone do czytania tekstu po chińsku, z tą różnicą, że tu przynajmniej alfabet czytelny.:)

    OdpowiedzUsuń
    Odpowiedzi
    1. Ale że co, ale że co? :) Przecież wszystko ładnie opisane :) Chcesz posłuchać efektów? Post na blogu Gadesa jest już na ukończeniu, muszę tylko dokończyć miks :P

      Usuń
  2. Bardzo fajny projekcik a jest szansa na udostępnienie owego konwerterka ? Pozdrawiam serdecznie Odwieczny Atarowiec

    OdpowiedzUsuń
    Odpowiedzi
    1. Nie widzę problemu - ale to kod javowy, nie szkodzi? Jeśli tak, to poproszę o jakiś kontakt e-mailowy.

      Usuń
  3. nie szkodzi... guma1975@go2.pl dziękuję z góry i pozdrawiam serdecznie!

    OdpowiedzUsuń

Prześlij komentarz