MUZ (format pliku)
From Atariki
Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.
Format pliku używany przez program Sound Tracker.
Spis treści | 
Wersja pre 07
Format pliku używany przez wersję nieoficjalną.
Postać nieskompresowana
| offset | długość | opis | 
| $0000 | $0006 | identyfikator: 'MUSIC ' | 
| $0006 | ... | dane instrumentów | 
| ... | ... | dane patternów | 
| ... | ... | dane songu | 
Dane instrumentów
Dane instrumentów zaczynają się pojedynczym bajtem określającym ich ilość.
- $00 - ilość instrumentów
 - $01... - definicje kolejnych instrumentów
 
Każdy instrument składa się z następujących pól:
- $00 - nr instrumentu
 - $01 - długość obwiedni częstotliwościowej instrumentu
 - $02 - długość obwiedni głośności instrumentu
 - $03 - zniekształcenie (AUDCx)
 - $04 - ?
 - $05..$40 - kolejne bajty obwiedni częstotliwości (starszy nibble) i głośności (młodszy nibble)
 
Dane patternów
Dane patternów zaczynają się pojedynczym bajtem określającym ich ilość.
- $00 - ilość patternów
 - $01... - definicje kolejnych patternów
 
Każdy pattern zawiera dane na wszystkich 4 kanałów POKEYa naraz i tworzy następującą strukturę:
- $000 - nr patternu
 - $001 - długość patternu
 - $002 - tempo
 - $003 - wartość wpisywana do rejestru kontroli AUDCTL
 - $004..$103 - definicje częstotliwości nut dla 4 kanałów POKEYa kolejno 1, 2, 3, 4, 1, 2, 3, 4, itd. (wartość 0 - brak nuty)
 - $104..$203 - numery instrumentów dla 4 kanałów POKEYa kolejno 1, 2, 3, 4, 1, 2, 3, 4, itd.
 
Dane songu
Opis songu tworzy następującą strukturę:
- $00 - zapętlenie songu
 - $01 - długość songu
 - $02... - kolejne numery patternów
 
Postać skompresowana
| offset | długość | opis | 
| $0000 | ... | dane songu | 
| ... | ... | tablica adresów instrumentów | 
| ... | ... | tablica adresów patternów | 
| ... | ... | dane instrumentów | 
| ... | ... | dane patternów | 
Informacja o zapętleniu songu i jego długości podana jest wewnątrz procedury odtwarzającej mniej więcej w takim miejscu:
ldx songpos lda song,x asl a tay inx cpx #songlen bcc *+4 ldx #songrep
czyli na pozycji $1D i $21 od początku procedury odtwarzającej.
Dane instrumentów
Każdy instrument opisuje struktura:
- $00 - długość obwiedni częstotliwości instrumentu
 - $01 - długość obwiedni głośności instrumentu
 - $02 - zniekształcenie (AUDCx)
 - $03 - ?
 - $04... - kolejne bajty obwiedni częstotliwości (starszy nibble) i głośności (młodszy nibble) zarazem
 
Dane patternu
Każdy pattern opisuje struktura:
- $00 - długość patternu
 - $01 - tempo
 - $02 - wartość wpisywana do rejestru AUDCTL
 - $03 - offset względem początku patternu dla częstotliwości nut
 - $04 - offset względem początku patternu dla numerów instrumentów
 - $05... - tablica informacji o nutach odgrywanych w danej pozycji patternu
 - $xx... - tablica częstotliwości nut odgrywanych w danej pozycji patternu
 - $yy... - tablica numerów instrumentów dla każdej pozycji patternu
 
Tablica informacji o nutach odgrywanych w danej pozycji patternu zawiera bitowo zakodowaną informację o kanałach na których kolejno rozpoczynane jest odgrywanie nut. Starsze nibbles zawierają informacje o parzystych liniach, młodsze o nieparzystych (gdy numery linii liczymy od 0). Każdy nibble koduje numery kanałów następująco:
- bit 7/3 - kanał 1
 - bit 6/2 - kanał 2
 - bit 5/1 - kanał 3
 - bit 4/0 - kanał 4
 
Kanał na którym ma zostać odegrana nuta oznaczany jest bitem zapalonym. Jeśli żaden bit nie jest zapalony oznacza to, że w danej pozycji patternu nie jest rozpoczynane odgrywanie żadnej nuty (co nie oznacza, że nuta zainicjalizowana wcześniej na danym kanale nie kontynuuje wybrzmiewania).
Tablica częstotliwości zawiera tylko wartości częstotliwości (zmniejszone o 8) dla kolejnych odgrywanych nut.
Tablica numerów instrumentów zawiera struktury:
- $00 - pozycja patternu, w której należy zmienić numer instrumentu (#$46 oznacza koniec patternu)
 - $01..$04 - numery instrumentów dla wszystkich kanałów po kolei
 
Zmiana numeru instrumentu nie rozpoczyna odgrywania nuty.
Dane songu
Opis songu tworzą kolejne numery patternów.
Tablice adresów patternów i instrumentów
Każda tablica adresów zawiera adresy zapisane w kolejności LSB, MSB.
Wersja 07
Format pliku używany przez oficjalnie wydaną wersję 07 programu.
Postać nieskompresowana
| offset | długość | opis | 
| $0000 | $0006 | identyfikator: 'Music ' | 
| $0006 | ... | dane instrumentów | 
| ... | ... | dane patternów | 
| ... | ... | dane songu | 
Dane instrumentów
Dane instrumentów zaczynają się pojedynczym bajtem określającym ich ilość.
- $00 - ilość instrumentów
 - $01... - definicje kolejnych instrumentów
 
Każdy instrument składa się z następujących pól:
- $00 - nr instrumentu
 - $01 - długość obwiedni głośności instrumentu
 - $02 - zapętlenie obwiedni głośności instrumentu
 - $03 - znieksztalcenie (AUDCx)
 - $04... - kolejne bajty obwiedni głośności
 - $xx - długość obwiedni częstotliwościowej instrumentu
 - $xx+$01 - zapętlenie obwiedni częstotliwościowej instrumentu
 - $xx+$02 - ?
 - $xx+$03... - kolejne bajty obwiedni częstotliwościowej instrumentu
 
Obwiednia częstotliwościowa przyjmuje 8, jako "wartość zerową".
Dane patternów
Dane patternów zaczynają się pojedynczym bajtem określającym ich ilość.
- $00 - ilość patternów
 - $01... - definicje kolejnych patternów
 
Każdy pattern zawiera dane na wszystkich 4 kanałów POKEYa naraz i tworzy następującą strukturę:
- $00 - nr patternu
 - $01 - długość patternu
 - $02 - tempo
 - $03 - wartość wpisywana do rejestru kontroli AUDCTL
 - $04... - definicje ścieżek dla 4 kanałów POKEYa
 
Każda ścieżka składa się z pól:
- $00 - długość ścieżki
 - $01... - dane ścieżki
 
Ścieżka zawiera następujące polecenia:
- $00..$3f: nuta
 - $40..$5f: instrument (bity 0..4)
 - $80..$ff: odstęp od następnej nuty (bity 0..6)
 
UWAGA! Odstęp od następnej nuty wyznacza ilość pustych linii między kolejnymi nutami.
Przykład 1: Sekwencja $80,$00,$00,$81,$00 oznacza fragment patternu:
C-1 C-1 --- C-1
Przykład 2: Sekwencja $81,$00,$00 oznacza fragment patternu:
--- C-1 --- C-1 ---
Dane songu
Opis songu tworzy następującą strukturę:
- $00 - zapętlenie songu
 - $01 - długość songu
 - $02... - kolejne numery patternów
 
Postać skompresowana
| offset | długość | opis | 
| $0000 | $0004 | tablica zapętleń tracków | 
| $0004 | $0004 | tablica LSB adresów tracków | 
| $0008 | $0004 | tablica MSB adresów tracków | 
| $000C | $0002 | adres tablicy adresów patternów | 
| $000E | $0002 | adres tablicy adresów obwiedni głośności | 
| $0010 | $0002 | adres tablicy adresów obwiedni częstotliwości | 
| $0012 | $0002 | adres tablicy instrumentów | 
| $0014 | ... | definicje tracków | 
| ... | ... | tablica adresów patternów | 
| ... | ... | tablica adresów obwiedni głośności | 
| ... | ... | tablica adresów obwiedni częstotliwości | 
| ... | ... | tablica instrumentów | 
| ... | ... | dane obwiedni głośności | 
| ... | ... | dane obwiedni częstotliwości | 
| ... | ... | dane patternów | 
Track
Rozkazy, które może zawierać track:
- $00..$FC - numer patternu do odegrania,
 - $FD xx - ustawia AUDCTL wartością xx,
 - $FE xx - ustawia tempo,
 - $FF - powoduje zapętlenie tracka.
 
Pattern
Rozkazy, które może zawierać pattern:
- $00..$3F - nuta,
 - $40..$7F - instrument (bity 0..5),
 - $80..$FE - odstęp między nutami (patrz wyżej),
 - $FF - koniec patternu.
 
Instrument
Każdy instrument składa się z 4 pól:
- $00: zapętlenie obwiedni głośności,
 - $01: zapętlenie obwiedni częstotliwości,
 - $02: zniekształcenie (AUDCx),
 - $03: ?.
 
Obwiednia głośności
Rozkazy obwiedni głośności:
- $00..$FE - bajty postaci $xy, gdzie x to kod sterujący, y to głośność,
 - $FF - koniec obwiedni
 
Obwiednia częstotliwości
Rozkazy obwiedni głośności:
- $00..$FE - bajty postaci $xy, gdzie x to kod sterujący, y to odchylenie od częstotliwości bazowej,
 - $FF - koniec obwiedni
 
Odchylenie "zerowe" ma wartość 8.
Tablice adresów patternów, obwiedni głośności i obwiedni częstotliwości
Każda tablica adresów zawiera adresy zapisane w kolejności LSB, MSB.
Różności
- Obecnie znane są 4 rodzaje procedur odgrywających:
 
- Procedura dla wersji pre 07 używana w grze Miecze Valdgira. Wykorzystuje tylko brzmienia jednokanałowe. Obwiednia częstotliwości jest zapętlona, natomiast obwiednia głośności nie.
 - Oryginalna procedura dystrybuowana razem z Sound Trackerem 07. Wykorzystuje jedną tablicę częstotliwości dla kanałów pojedynczych i jedną dla łączonych.
 - Player wykorzystany w grze Miecze Valdgira II. Wykorzystuje tablice częstotliwości tylko dla kanałów pojedynczych - standardową i basową uaktywnianą dla instrumentów o zniekształceniu $C0.
 - Player wykorzystany w grze Świat Olkiego. Wykorzystuje 3 tablice częstotliwości dla kanałów pojedynczych - standardową i dwie basowe dla instrumentów o zniekształceniach $60 i $C0. Dodatkowo włącza filtr górnoprzepustowy w kanale 2 sterowany kanałem 4 (wartość wpisywana do kanału 4 jest o 1 mniejsza niż ta w 2).
 
- Sam format pliku nie był w żaden sposób modyfikowany pod kątem różnych procedur odgrywających.
 
