TMC (format pliku)

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 19:09, 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 18: Linia 18:
=== Dane songu === === 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.+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 === === Dane instrumentów ===
Linia 30: Linia 30:
* 8 bajtów transpozycji, * 8 bajtów transpozycji,
* 9 bajtów parametrów dźwięku. * 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 === === Dane paternów ===
Linia 39: Linia 71:
* $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; * $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; * $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]] [[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:

offsetdługośćopis
$0000$001etytuł utworu (ostatni bajt musi być spacją)
$001e$0001szybkość odtwarzania (ilość ramek na linię paternu)
$001f$0001ilość wywołań playera na ramkę
$0020$0040młodsze bajty adresów instrumentów
$0060$0040starsze bajty adresów instrumentów (adres równy 0 oznacza instrument pusty)
$00a0$0080młodsze bajty adresów paternów
$0120$0080starsze 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;

Linki

Personal tools