Status prac nad biblioteką AMIDILIB

Jest trochę cicho, gdyż jestem zajęty swoim projektem (AMIDILIB), który zacząłem gdzieś w 2007 roku i chciałbym go doprowadzić do stanu używalności. Tak, deweloperka to długa droga z piekła, zwłaszcza bez żadnego budżetu, na platformie, która jest w stanie “nieumarłym” i jeszcze ma czelność nawiedzać żyjących ( i całe szczęście ;> ).
Celem projektu jest umożliwienie odgrywania sekwencji muzycznych z użyciem modułów brzmieniowych MIDI Roland LA/GS/GM z wczesnych lat 80-tych/90-tych (,które brzmią tak lub tak w przypadku modułu SC-55) oraz 16/32 bitowych komputerów Atari (ST/STe/TT/Falcon030/CT60). Coś czego do tej pory nie było (do prostego odtwarzania nie potrzebujemy pełnowymiarowego sekwencera jak Cubase) i na tyle prostego by mogłoby być użyte przez innych deweloperów we własnych odtwarzaczach muzycznych, grach i demach. Wystarczy tylko zainicjalizować bibliotekę, załadować plik i go odtworzyć. Druga rzecz jest taka, że Atari ST i Roland MT-32 dobrze do siebie pasują, pochodzą z tego samego okresu.

Wróciłem do projektu po długim okresie braku aktywności i wygląda na to, że pierwszy cel (dostarczenie funkcji odtwarzania) jest bardzo blisko. Aktualnie pracuję nad czasami delta, mam nadzieję wkrótce je poprawić i wypuścić mały program demonstracyjny. Więc już możecie powoli polować na stare moduły brzmieniowe :).
Procedura odtwarzania została całkowicie przepisana i odgrywa teraz wielościeżkowe pliki MIDI, także pliki MIDI typu 2 (,ale obecnie nie ma logiki do ich odtwarzania – każda ścieżka powinna być traktowana jak plik MIDI typu 0, więc to nie jest jakiś duży problem).
Parser plików MIDI został poprawiony i działa całkiem stabilnie na Falconie 030 i CT60, jest jedynie jeden problem na komputerach ST/STe/Mega STe (zostanie to zinwestygowane, gdy tempo będzie prawidłowo obsługiwane). Parser był testowany z całkiem dużymi plikami MIDI jak np. 640kb z zagnieżdżonymi komunikatami SysEX i zachowywał się całkiem dobrze (niektóre pliki MIDI mają do 30kb, standardowe są do 4kb). Jednakże duże pliki, jak wspomniany wcześniej, ładują się dosyć długo na wolniejszych maszynach. Parser obsługuje też pliki typu KAR (pliki midi do karaoke z tekstami piosenek, jednakże teksty nie są importowane).

Kiedy kod odtwarzania będzie gotowy i stabilny to zamknie kamień pre-alfa projektu. Po tym planuję pić przez dwa miesiące ze szczęścia, przyśpieszyć działanie funkcji odtwarzającej i dodać obsługę innych formatów w szczególności XMI i MUS znanego z gry Doom.

Jako, że ładuję dane MIDI do własnej struktury danych jest dużo rzeczy, które mogą być zrobione jak np. własne zdarzenia z własnym kodem obsługującym. To oznacza, że jest możliwe na przykład wrzucenie: komend do wyzwalania zdarzeń (np. w demie by zsynchronizować wyświetlanie/efekty z muzyką), wysłać nuty do własnych modułów softwarowych jak własny engine ym2149 lub DSP (na Atari Falcon030), wysłać dane przez port rs232 do zewnętrznego kontrolera zarządzającego systemem światełek na Twojej choince lub odpalić zdalnie pożyczone pociski termonuklearne. Jest naprawdę dużo możliwosci. I to wszystko w rytm muzyki! ;)

Poniżej jest mały przykład z końca maja (od tego czasu było dużo zmian). Program ładuje sekwencję z pliku midi do pamięci (na przykładzie jest raczej mały 748 bajtowy plik MIDI typu 1 (wiele ścieżek)), parsuje go i ładuje do własnej struktury danych. Po tym inicjalizujemy naszą funkcję odtwarzania (aktualnie jest podczepiona pod przerwanie timer’a B, ale może to być inne przerwanie).


AMIDILIB development snapshot from nokturnal on Vimeo.


Następnie możemy odgrywać, zatrzymać, zapauzować, odpauzować naszą sekwencję. Sekwencja może być odegrana jednokrotnie lub w pętli.
Program jest demonstrowany na prawdziwym sprzęcie tj. Atari Falcon 030 (akcelerator CT60 / monitor LCD/RGB ) z modułem brzmieniowym Roland CM-500 podłączonym do portu MIDI Atari. Został napisany jak zwykle pod linuxem przy użyciu cross kompilatora gcc 4.5.3 i cross assembler VASM. Jak łatwo usłyszeć czasy delta nie są jeszcze prawidłowo przekładane na czas rzeczywisty (sekwencja jest odgrywana za szybko), ale pracuję nad tym.


O wpisie