## Popularne formaty muzyczne

Na wstępie muszę zaznaczyć, iż artykuł ten powstał na prośbę Vaska, który stwierdził: "byłoby to szalenie interesujące". Format MPT'ka żywcem zerżnąłem z pliku o nazwie "Protokół MPT" Mayoneza, TMC'ka natomiast z instrukcji. Format CMC musiałem rozpracować sam, dlatego nie jestem jego w 100% pewien. Dowiedziałem się ostatnio, że był on zawarty w którymś numerze "Tajemnic Atari", dlatego jeżeli ktoś ma jakieś wątpliwości, to odsyłam go do tej literatury (?).

Ponieważ i tak wszyscy używają playerów Jaskiera, z punktu widzenia użytkownika istotne są tylko dane adresowe, a te są pewne.

Charlie

Stosowane oznaczenia:

- M - młodsza połówka bajtu,
- S - starsza połówka bajtu.

#### Format modułu CMC v2.0: plik binarny

Adres względem początku w pamięci:
>$000 | nagłówek (`cmc data file`)
>$013 | tempo utworu (max. 99)
>$014 | młodsze bajty adresów patternów | Jeżeli pattern jest pusty, to ma adres $FFFF
>$054 | starsze bajty adresów patternów
>$094 | parametry instrumentów (26ins. * 6 bajtów) Poszczególne bajty oznaczją:
| 1) | M | - | rodzaj akcentu,
| S | - | transpozycja akcentu;
2) | M | - | rodzaj dźwięku CMC,
S | - | r. zniekształcenia Atari
| ustawione bity 3/4 oznaczają:
3-ci | - | dźwięk wznoszący się,
4-ty | - | dźwięk opadający;
3) | M | - | transpozycja dźwięków wibrujących i dwukanałowych,
| S | - | transpozycja podstawowego dźwięku;
4) |  | czas wybrzmiewania dźwięku ($00 oznacza dźwięk ciągły)
5-6) |  | tablica akcentów (15 bitów, najmłodszy bit 6-go bajtu nie jest wykorzystywany);
>$130 | dane głośności instrumentów (26ins. * 8 bajtów); Głośność jest zapisana w kolejności M/S, dlatego S 8-go bajtu nie jest wykorzystywana (S=0);
>$200 | dane tracku 1; Poszczególne wartości oznaczają:
| $00-$3f | - | nr pat. do zagrania,
$8f | - | komenda "stop" ()
$9f | - | komenda "jump" (J:)
$af | - | komenda "up" (:)
$bf | - | komenda "down" (:)
$cf | - | komenda "tempo" (T:)
$df | - | komenda "repeat" (R:)
$ef | - | komenda "back" ()
$fe | - | puste pola w 3 trackach,
$ff | - | puste pole
| W edytorze mamy do dyspozycji 84 pola w każdym tracku. W rzeczywistości jest ich 85, ale w tym ostatnim znajduje się komenda "back" playera.
>$255 | dane tracku 2; Znajdują się tutaj numery pat. do zagrania, tudzież argumenty komend tracku 1; Puste pole - $ff.
>$2AA | dane tracku 3; Znajdują się tutaj numery pat. do zagrania, tudzież drugi argument dla komendy "repeat"; Puste pole - $ff.
>$2FF | bajt niewykorzystany = $ff
>$300 | dane patternów. Poszczególne wartości oznaczają:
| $00-$19 | - | nr instrumentu
$40-$7e | - | nr dźwięku do zagrania,
$80-$bd | - | puste pola w patternie ($7f + ilość pól),
$ff | - | koniec patternu.

#### Format modułu MPT v2.4: plik binarny.

Adres względem początku w pamięci:

>$000 | adresy instrumentów (słowa) (puste ma adres $0000)
>$040 | adresy patternów (słowa) (pusty ma adres $0000)
>$0C0 | tablica częstotliwości #1
>$100 | tablica częstotliwości #2
>$140 | tablica częstotliwości #3
>$180 | tablica częstotliwości #4
>$1C0 | młodsze bajty adresów tracków
>$1C4 | starsze bajty adresów tracków
>$1C8 | długość patternów (S=1-4/M=0)
>$1C9 | tempo utworu ($01-$1f)
>$1CA | dane tracku #1; dane tracku #2; dane tracku #3; dane tracku #4; dane instrumentów; dane patternów;
Dane tracków
| numer patternu, transpozycja numer patternu, transpozycja ...
Dane instrumentów
| aa, bb, aa, bb, aa, bb, ... (16 par aa, bb) aa - głośnośc i barwa dzwięku bb - numery akcentów (M) numery parametrów akcentów * 2 (S)
następne bajty danych instrumentu:
8 bajtów | - | parametry sterujące ins.
8 bajtów | - | parametry akcentów
Dane patternów
$01-$3E | - | zagraj nutę o numerze
$40-$5F | - | zmień brzmienie (-$40)
$80-$B5 | - | ustaw ilość pustych pozycji pomiędzy nutami (-$80)
$C0-$CF | - | ustaw głośność (-$C0)
$Ex | - | koniec patternu
$FE | - | wstaw puste pozycje (na początku lub końcu patternu) ($80 = jedna pusta pozycja)
x | - | dowolna cyfra $0-$F

#### Format modułu sampli MPT: Plik nie jest binarny!

Adres od początku pliku:
>$00 | starsze bajty adresów początku sampli
>$10 | młodsze bajty adresów końca sampli
Adresy są zwiększone o $9000.
Dalej dane sampli (S/M).

#### Format modułu TMC v. 1.00: plik binarny

>$000 | bajty informacyjne;
>$01D | zawsze spacja ($20);
>$01E | tempo, jest to wartość o jeden mniejsza niż w CMC lub MPT;
>$01F | częstotliwość odtwarzenia na ramkę;
>$020 | młodsze bajty adresów instr.
>$060 | starsze bajty adresów instr. (pusty ma adres $0000);
>$0A0 | młodsze bajty adresów patternów
>$120 | starsze bajty adresów patternów
>$1A0 | dane songu; dane instrumentów; dane patternów;
Dane songu
| Każda pozycja w songu zajmuje 16b.: t8, p8, t7, p7, ..., t2, p2, t1, p1 gdzie:
tx | - | transpozycja tracku x,
px | - | nr patterbu do odegrania na tracku x;
Dane instrumentów
| - 21 razy trójka bajtów:
1) | S | - | zniekształcenie dźwięku,
| M | - | głośność obwiedni podstawowej;
2) | S | - | typ akcentu,
| M | - | głośność obwiedni dodatkowej;
3) |  | parametr akcentu;
- 8 bajtów transpozycji - 9 bajtówparametrów dźwięku.
W sumie 80 bajtów.
Dane patternów
| Poszczególne bajty oznaczają:
$00 | - | zmiana głośności dźwięku, następująca za nim wartość jest negacją (`EOR #$FF`) głośności używanej w TMC,
$01-$3f | - | graj nutę o tym numerze i ustalonym wcześniej instrumencie. Następuje po tym bajt głośności.
$40 | - | nowy parametr, jeżeli ten bajt ma ustawiony najwyższy bit, to następuje jeszcze za nim bajt zmiany głośności.
$41-$7f | - | graj nutę o numerze zANDowanym liczbą $3f i ustalonym instrumencie. Następuje za tym bajt parametru z ustawionym najwyższym bitem oraz bajt głośności.
$80-$bf | - | zmiana aktualnego instrumentu. Używana przed rozkazem grania nuty tylko przy faktycznej zmianie instrumentu w patternie.
$c0-$ff | - | linie puste w patternie: $c0 to 1 linia pusta, $ff to puste 64 linie, czyli innymi słowy koniec danych patternu, gdyż dowolnie, na której pozycji dotychczas się znajdowaliśmy dodanie do niej 64 powoduje wyjście poza długość patternu. Każdy pattern kończy się tym bajtem, nawet jeżeli na ostatniej pozycji coś się znajduje. Pattern pusty składa się tylko z tego bajtu. Pattern najdłuższy łacznie z tym bajtem ma 257 bajtów długości.