Format pliku *.MOD


      Na samym wstępie muszę zaznaczyć, że tekst ten będzie dotyczył plików MOD w wersji dla atarowskiego ProTrackera. W owym PTRze nie ma kilku komend, które są uwzględniane np. w blaszakowej wersji. W ogóle wszystkie poniższe informacje pochodzą z jakiegoś (najprawdopodobniej blaszanego), pliku textowego. Autora tegoż textu nie znam gdyż posiadam tylko nędzny wydruk, bez żadnych "creditsów". Jeśli ktoś chce uzyskać więcej informacji nt. pochodzenia wyżej wspomnianego pliczku, proszę się zgłosić do kolegi Warpa, gdyż to właśnie od niego owy wydruczek otrzymałem. Dziękuję za uwagę.

      W atarowskim Protrackerze (a przynajmniej w wersji,którą ja posiadam) mamy możliwość komponowania utworku, korzystając z maxymalnie 31 różnych instrumentów (sampli). Poszczególne wzorce (tak, to właśnie ich numery wrzucamy do okna "Orders") składają się z czterech patternów. Każdy pattern gra na jednym kanale. Pojedynczy pattern składa się z 64 wierszy. W każdym wierszu znajduje się opis granego dźwięku w postaci: nuta + oktawa, komenda + parametr.

BTW: Wiem, że powyższe, to opis jak dla sześcioletniego dzieciaka, ale jakiś wstęp chyba być musi. :)

Budowa pliku MOD

Offset
Długość
Informacje
0
20
tytuł utworku
20
30
info na temat sampla nr 1
50
30
info na temat sampla nr 2
70
30
info na temat sampla nr 3
100
30
info na temat sampla nr 4
130
30
info na temat sampla nr 5
160
30
info na temat sampla nr 6
...
...
...
920
30
info na temat. sampla nr 31
950
2
adres sampli w pliku
952
128
tablica ORDERS
1080
4
identyfikator - czterobajtowy tekst "M.K."
1084
ilość wzorców razy 1024
dane wzorców (patterny)
...
...
dane sampli

Oto co mamy w danych sampla

Offset
Długość
Informacje
0
22
nazwa sampla
22
2
rozmiar sampla
24
1
[bez znaczenia]
25
1
standardowa głośność
26
2
początek pętli
28
2
koniec pętli


"Standardowa głośność" to liczba z zakresu 0-64, przy czym 0=cisza a 64=max. głośność.

Budowa pojedynczego wzorca

      Jak już wiadomo (patrz wywody powyżej) nuty zapisywane są we wzorcach składających się z 4 patternów. Pojedynczy wzorzec ma długość dokładnie 1024 bajtów (64 wiersze * 4 kolumny * 4 bajty). Od razu rzuca się w oczy spore marnotrawstwo, bo np. wzorzec "prawie pusty" ma taką samą długość co wzorzec "wypchany po brzegi".W programach typu TMC,czy też MPT każdy pattern z nutkami, jest upakowany, co pozwala zaoszczędzić wiele cennego miejsca (czyt skrócić plik z muzyką jak się da).

Taka mała uwaga: poszczególne opisy dźwięku (opis dźwięku= nuta + oktawa + instrument + komenda + parametr komendy) zapisywane są w kolejności:

      opis dźwięku z 1 wiersza tracku #1,
      opis dźwięku z 1 wiersza tracku #2,
      opis dźwięku z 1 wiersza tracku #3,
      opis dźwięku z 1 wiersza tracku #4,
      opis dźwięku z 2 wiersza tracku #1,
      opis dźwięku z 2 wiersza tracku #2,
      opis dźwięku z 2 wiersza tracku #3,
      opis dźwięku z 2 wiersza tracku #4,
      ... itd.

a nie w kolejności: dane z tracku #1, dane z tracku #2, #3 oraz #4.

Budowa opisu dźwięku

      Opis dźwięku jest najmniejszą jednostką we wzorcu. Składa się z czterech bajtów określających:

  • kod dźwięku (nuta + oktawa)
  • używany istrument
  • komenda + parametr dla niej
                    bity
         7   6   5   4   3   2   1   0
--------------------------------------
bajt 1               * |           kod
bajt 2                         dźwięku
bajt 3    instrument   |    komenda
bajt 4         parametr komendy
--------------------------------------
Lekko zakręcone? Już piszę co i jak. Kod dźwięku określa nam nutkę oraz oktawę (0, 1, 2, 3) i do jego opisania potrzebujemy 12 bitów. Jest to więc cały bajt drugi oraz cztery młodsze bity z bajtu pierwszego.

Numer instrumentu znajduje się w bajcie trzecim. Do określenia numeru używanego instrumentu potrzeba 5 bitów. Cztery młodsze wpisywane są właśnie do bajtu trzeciego,ale do lewej połówki (zerknij do nieczytelnej tabelki :) Najbardziej znaczący bit piąty numeru instrumentu znajduje się w bajcie pierwszym pod bitem czwartym (patrz znowu w nieczytelną tablę).

Komenda przyjmuje wartości (0-$F), także wygospodarowane są dla niej cztery młodsze bity w bajcie trzecim. Natomiast parametr komendy (wartości 0-$FF) znajduje się w bajcie czwartym.

      Uff. To tyle na ten temat. Będę zadowolony jeśli kogoś tym textem zachęcę do napisania jakiegoś fajnego utila dla MODów.

Ars/AiDS