TMC (format pliku)
From Atariki
Wersja z dnia 18:45, 15 wrz 2006 Epi (Dyskusja | wkład) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (→Dane instrumentów - formatowanie) |
||
Linia 1: | Linia 1: | ||
Format modułu muzycznego używany przez program [[Theta Music Composer]] 1.x. Występuje w postaci plików z rozszerzeniami TMC i TM8 (ośmiokanałowe) lub TM4 (czterokanałowe). | Format modułu muzycznego używany przez program [[Theta Music Composer]] 1.x. Występuje w postaci plików z rozszerzeniami TMC i TM8 (ośmiokanałowe) lub TM4 (czterokanałowe). | ||
- | Plik w tym formacie posiada normalny [[COM#Nag.C5.82.C3.B3wek|nagłówek binarny]], składa się z jednego bloku. | + | Plik w tym formacie zawiera normalny [[Binarny plik DOSu|nagłówek binarny]], składa się z jednego bloku. |
Wewnątrz znajdują się następujące dane: | Wewnątrz znajdują się następujące dane: | ||
<table border=1> | <table border=1> | ||
<tr><td>offset</td><td>długość</td><td>opis</td></tr> | <tr><td>offset</td><td>długość</td><td>opis</td></tr> | ||
<tr><td>$0000</td><td>$001e</td><td>tytuł utworu (ostatni bajt musi być spacją)</td></tr> | <tr><td>$0000</td><td>$001e</td><td>tytuł utworu (ostatni bajt musi być spacją)</td></tr> | ||
- | <tr><td>$001e</td><td>$0001</td><td>szybkość odtwarzania (ilość ramek na linię)</td></tr> | + | <tr><td>$001e</td><td>$0001</td><td>szybkość odtwarzania (ilość [[ramka|ramek]] na linię paternu)</td></tr> |
<tr><td>$001f</td><td>$0001</td><td>ilość wywołań playera na ramkę</td></tr> | <tr><td>$001f</td><td>$0001</td><td>ilość wywołań playera na ramkę</td></tr> | ||
<tr><td>$0020</td><td>$0040</td><td>młodsze bajty adresów instrumentów</td></tr> | <tr><td>$0020</td><td>$0040</td><td>młodsze bajty adresów instrumentów</td></tr> | ||
Linia 12: | Linia 12: | ||
<tr><td>$00a0</td><td>$0080</td><td>młodsze bajty adresów paternów</td></tr> | <tr><td>$00a0</td><td>$0080</td><td>młodsze bajty adresów paternów</td></tr> | ||
<tr><td>$0120</td><td>$0080</td><td>starsze bajty adresów paternów</td></tr> | <tr><td>$0120</td><td>$0080</td><td>starsze bajty adresów paternów</td></tr> | ||
- | <tr><td>$01a0</td><td>...</td><td>dane songu. Każda pozycja zajmuje 16 bajtów. Są to kolejno: transpozycja ścieżki 8, nr paternu na ścieżce 8, transpozycja ścieżki 7, itd.</td></tr> | + | <tr><td>$01a0</td><td>...</td><td>dane songu</td></tr> |
<tr><td>...</td><td>...</td><td>dane instrumentów</td></tr> | <tr><td>...</td><td>...</td><td>dane instrumentów</td></tr> | ||
<tr><td>...</td><td>...</td><td>dane paternów</td></tr> | <tr><td>...</td><td>...</td><td>dane paternów</td></tr> | ||
+ | </table> | ||
- | -- Dane paternów -- | + | === Dane songu === |
+ | Każda pozycja zajmuje 16 bajtów. Są to kolejno: transpozycja ścieżki 8, nr paternu na ścieżce 8, transpozycja ścieżki 7, itd. Koniec danych songu wyznacza pozycja pusta (16 wartości $ff). | ||
- | </table> | + | === Dane instrumentów === |
+ | Każdy instrument to 80 bajtów. Kolejno: | ||
+ | * 21 razy trójka bajtów $ab, $cd, $ef, gdzie: | ||
+ | ** a - zniekształcenie dźwięku, | ||
+ | ** b - głośność obwiedni podstawowej, | ||
+ | ** c - typ akcentu, | ||
+ | ** d - głośność obwiedni dodatkowej, | ||
+ | ** ef - parametr akcentu, | ||
+ | * 8 bajtów transpozycji, | ||
+ | * 9 bajtów parametrów dźwięku. | ||
+ | |||
+ | Typ akcentu: | ||
+ | * 0 -brak akcentu. Częstotliwość zależy tylko od typu dźwięku i nuty. | ||
+ | * 1 -parametr jest bezpośrednio wpisywany do komórki częstotliwości POKEY-a. | ||
+ | * 2 -poprzednia wartość wpisana do POKEY-a, plus parametr, do POKEY-a. | ||
+ | * 3 -oryginalna wartość częstotliwości przed wpisaniem do POKEY-a jest powiększana o parametr. | ||
+ | * 4 -parametr AND $D20A (RANDOM) jest wpisywany do POKEY-a. | ||
+ | * 5 -parametr oznacza numer nuty, której częstotliwość pobierana jest z tablicy częstotliwości i wpisywana do POKEY-a. | ||
+ | * 6 -podobnie jak poprzednio, ale przed wpisaniem do POKEY-a wartość jest powiększona o dotychczasową wartość wpisaną do POKEY-a. | ||
+ | * 7 -parametr jest transpozycją nuty. | ||
+ | * 8-F -akcenty te są identyczne z akcentami 0-7, z tym, że do komórki AUDCTL jest wpisywana zapasowa wartość AUDCTL dźwięku. Normalnie przy akcencie 0 wpisywana jest tam wartość standardowa, a przy pozostałych wartość 0. | ||
+ | |||
+ | Parametry dźwięku: | ||
+ | * barwa filtru -jak łatwo się domyślić używana przy dźwiękach filtrowanych. Częstotliwość transponowana przez tą wartość wpisywana jest do generatora filtrującego (o numerze o 2 większym). | ||
+ | * standardowa wartość AUDCTL dźwięku. | ||
+ | * zapasowa wartość AUDCTL (używana przy akcentach od 8 do F). | ||
+ | * szybkość opadania obwiedni podstawowej. Kiedy player zagra już wszystkie 21 kolumn obwiedni dźwięku, o głośności decyduje już tylko głośność na ostatniej kolumnie i szybkość opadania. Liczona jest ona w ilości wywołań playera. Wartość 10 oznacza zmniejszanie głośności o jeden co $10 wywołań playera. 0 to obwiednia stała. | ||
+ | * szybkość opadania obwiedni dodatkowej. | ||
+ | * starsze 4 bity oznaczają typ dźwięku. Młodsze 4 to parametr. Poszczególne typy dźwięku to: | ||
+ | ** 0 -dźwięk normalny. | ||
+ | ** 1 -wibrato. | ||
+ | ** 2 -płynne wibrato. | ||
+ | ** 3 -wibrato liczone w nutach. | ||
+ | ** 4 -opadanie dźwięku. | ||
+ | ** 5 -opadanie dźwięku liczone w nutach. | ||
+ | ** 6 -stałe podwyższenie wysokości. | ||
+ | ** 7 -dopóki głośność dźwięku na obwiedni podstawowej jest niezerowa, głośność obwiedni dodatkowej jest zwiększana o 1. Jest to inaczej przechodzenie dźwięku do drugiego kanału. | ||
+ | |||
+ | Typy dźwięku od 8 do F różnią się tym, że parametr jest brany z minusem, to znaczy, że zamiast opadania będzie wznoszenie, wibrato będzie przesunięte w fazie, a przechodzenie dźwięku będzie realizowane w odwrotną stronę. | ||
+ | * oczekiwanie na rozpoczęcie danego typu dźwięku. Do tej pory dźwięk brzmi jakby był typu 0. | ||
+ | * najstarsze 2 bity oznaczają tablicę częstotliwości, z której pobierana będzie częstotliwość. W rzeczywistości wartość ta jest dodawana do numeru nuty tak, że dla drugiej tablicy nuta C-1 ma numer $41. Pozostałe 6 bitów podaje zmniejszoną o 1 ilość wywołań playera po której następuje kolejne wywołanie procedury typu dźwięku, zmieniające odpowiednio dźwięk. | ||
+ | * młodsze 4 bity to zmniejszona o jeden ilość wywołań playera, po której odtwarzana jest następna transpozycja. Starsze 3 bity, to zmniejszona o jeden ilość używanych transpozycji. Transpozycje są odtwarzane od tej o numerze 1 aż do tej której numer wybraliśmy, a następnie znowu od tej o numerze 1. Jednakże jeżeli ilość transpozycji zwiększymy o 8, to będą one odtwarzane w kolejności od tej o numerze 1 w dół aż do tej której numer wybraliśmy, a następnie z powrotem w górę do pierwszej i tak w kółko. | ||
+ | |||
+ | === Dane paternów === | ||
+ | Znaczenie poszczególnych wartości: | ||
+ | * $00 - zmiana głośności dźwięku, kolejny bajt jest bitową negacją wartości głośności używanej w programie; | ||
+ | * $01-$3f - graj nutę o danym numerze za pomocą ustalonego wcześniej instrumentu, następuje po tym bajt głośności; | ||
+ | * $40 - nowy parametr, jeżeli ten bajt ma ustawiony najwyższy bit, to następuje za nim bajt zmiany głośności; | ||
+ | * $41-$7f - graj nutę o numerze określonym na sześciu młodszych bitach i ustalonym instrumencie, następuje po tym bajt parametru z ustawionym najstarszym bitem oraz bajt głośności; | ||
+ | * $80-$bf - zmiana bieżącego instrumentu na inny o numerze określonym w sześciu młodszych bitach, używane przed rozkazem grania nuty tylko przy faktycznej zmianie instrumentu w paternie; | ||
+ | * $c0-$ff - linie puste w paternie, ich ilość określa sześć młodszych bitów; każdy patern kończy się bajtem $ff oznaczającym 64 puste linie; | ||
+ | |||
+ | = Linki = | ||
+ | |||
+ | * [[INS (Theta Music Composer)|INS]] | ||
+ | |||
+ | [[Kategoria: Formaty plików]] |
Aktualna wersja
Format modułu muzycznego używany przez program Theta Music Composer 1.x. Występuje w postaci plików z rozszerzeniami TMC i TM8 (ośmiokanałowe) lub TM4 (czterokanałowe).
Plik w tym formacie zawiera normalny nagłówek binarny, składa się z jednego bloku. Wewnątrz znajdują się następujące dane:
offset | długość | opis |
$0000 | $001e | tytuł utworu (ostatni bajt musi być spacją) |
$001e | $0001 | szybkość odtwarzania (ilość ramek na linię paternu) |
$001f | $0001 | ilość wywołań playera na ramkę |
$0020 | $0040 | młodsze bajty adresów instrumentów |
$0060 | $0040 | starsze bajty adresów instrumentów (adres równy 0 oznacza instrument pusty) |
$00a0 | $0080 | młodsze bajty adresów paternów |
$0120 | $0080 | starsze bajty adresów paternów |
$01a0 | ... | dane songu |
... | ... | dane instrumentów |
... | ... | dane paternów |
Spis treści |
Dane songu
Każda pozycja zajmuje 16 bajtów. Są to kolejno: transpozycja ścieżki 8, nr paternu na ścieżce 8, transpozycja ścieżki 7, itd. Koniec danych songu wyznacza pozycja pusta (16 wartości $ff).
Dane instrumentów
Każdy instrument to 80 bajtów. Kolejno:
- 21 razy trójka bajtów $ab, $cd, $ef, gdzie:
- a - zniekształcenie dźwięku,
- b - głośność obwiedni podstawowej,
- c - typ akcentu,
- d - głośność obwiedni dodatkowej,
- ef - parametr akcentu,
- 8 bajtów transpozycji,
- 9 bajtów parametrów dźwięku.
Typ akcentu:
- 0 -brak akcentu. Częstotliwość zależy tylko od typu dźwięku i nuty.
- 1 -parametr jest bezpośrednio wpisywany do komórki częstotliwości POKEY-a.
- 2 -poprzednia wartość wpisana do POKEY-a, plus parametr, do POKEY-a.
- 3 -oryginalna wartość częstotliwości przed wpisaniem do POKEY-a jest powiększana o parametr.
- 4 -parametr AND $D20A (RANDOM) jest wpisywany do POKEY-a.
- 5 -parametr oznacza numer nuty, której częstotliwość pobierana jest z tablicy częstotliwości i wpisywana do POKEY-a.
- 6 -podobnie jak poprzednio, ale przed wpisaniem do POKEY-a wartość jest powiększona o dotychczasową wartość wpisaną do POKEY-a.
- 7 -parametr jest transpozycją nuty.
- 8-F -akcenty te są identyczne z akcentami 0-7, z tym, że do komórki AUDCTL jest wpisywana zapasowa wartość AUDCTL dźwięku. Normalnie przy akcencie 0 wpisywana jest tam wartość standardowa, a przy pozostałych wartość 0.
Parametry dźwięku:
- barwa filtru -jak łatwo się domyślić używana przy dźwiękach filtrowanych. Częstotliwość transponowana przez tą wartość wpisywana jest do generatora filtrującego (o numerze o 2 większym).
- standardowa wartość AUDCTL dźwięku.
- zapasowa wartość AUDCTL (używana przy akcentach od 8 do F).
- szybkość opadania obwiedni podstawowej. Kiedy player zagra już wszystkie 21 kolumn obwiedni dźwięku, o głośności decyduje już tylko głośność na ostatniej kolumnie i szybkość opadania. Liczona jest ona w ilości wywołań playera. Wartość 10 oznacza zmniejszanie głośności o jeden co $10 wywołań playera. 0 to obwiednia stała.
- szybkość opadania obwiedni dodatkowej.
- starsze 4 bity oznaczają typ dźwięku. Młodsze 4 to parametr. Poszczególne typy dźwięku to:
- 0 -dźwięk normalny.
- 1 -wibrato.
- 2 -płynne wibrato.
- 3 -wibrato liczone w nutach.
- 4 -opadanie dźwięku.
- 5 -opadanie dźwięku liczone w nutach.
- 6 -stałe podwyższenie wysokości.
- 7 -dopóki głośność dźwięku na obwiedni podstawowej jest niezerowa, głośność obwiedni dodatkowej jest zwiększana o 1. Jest to inaczej przechodzenie dźwięku do drugiego kanału.
Typy dźwięku od 8 do F różnią się tym, że parametr jest brany z minusem, to znaczy, że zamiast opadania będzie wznoszenie, wibrato będzie przesunięte w fazie, a przechodzenie dźwięku będzie realizowane w odwrotną stronę.
- oczekiwanie na rozpoczęcie danego typu dźwięku. Do tej pory dźwięk brzmi jakby był typu 0.
- najstarsze 2 bity oznaczają tablicę częstotliwości, z której pobierana będzie częstotliwość. W rzeczywistości wartość ta jest dodawana do numeru nuty tak, że dla drugiej tablicy nuta C-1 ma numer $41. Pozostałe 6 bitów podaje zmniejszoną o 1 ilość wywołań playera po której następuje kolejne wywołanie procedury typu dźwięku, zmieniające odpowiednio dźwięk.
- młodsze 4 bity to zmniejszona o jeden ilość wywołań playera, po której odtwarzana jest następna transpozycja. Starsze 3 bity, to zmniejszona o jeden ilość używanych transpozycji. Transpozycje są odtwarzane od tej o numerze 1 aż do tej której numer wybraliśmy, a następnie znowu od tej o numerze 1. Jednakże jeżeli ilość transpozycji zwiększymy o 8, to będą one odtwarzane w kolejności od tej o numerze 1 w dół aż do tej której numer wybraliśmy, a następnie z powrotem w górę do pierwszej i tak w kółko.
Dane paternów
Znaczenie poszczególnych wartości:
- $00 - zmiana głośności dźwięku, kolejny bajt jest bitową negacją wartości głośności używanej w programie;
- $01-$3f - graj nutę o danym numerze za pomocą ustalonego wcześniej instrumentu, następuje po tym bajt głośności;
- $40 - nowy parametr, jeżeli ten bajt ma ustawiony najwyższy bit, to następuje za nim bajt zmiany głośności;
- $41-$7f - graj nutę o numerze określonym na sześciu młodszych bitach i ustalonym instrumencie, następuje po tym bajt parametru z ustawionym najstarszym bitem oraz bajt głośności;
- $80-$bf - zmiana bieżącego instrumentu na inny o numerze określonym w sześciu młodszych bitach, używane przed rozkazem grania nuty tylko przy faktycznej zmianie instrumentu w paternie;
- $c0-$ff - linie puste w paternie, ich ilość określa sześć młodszych bitów; każdy patern kończy się bajtem $ff oznaczającym 64 puste linie;