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 głośności instrumentu
- $02 - długość obwiedni częstotliwościowej instrumentu
- $03 - znieksztalcenie (AUDCx)
- $04 - ?
- $05..$40 - kolejne bajty obwiedni głośności (starszy nibble) i częstotliwoś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ę:
- $001 - nr patternu
- $002 - długość patternu
- $003 - tempo
- $004 - wartość wpisywana do rejestru kontroli AUDCTL
- $005..$104 - definicje częstotliwości nut dla 4 kanałów POKEYa kolejno 1, 2, 3, 4, 1, 2, 3, 4, itd. (wartość 0 - brak nuty)
- $105..$204 - 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 scc 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 głośności i częstotliwości zarazem
Obwiednie są zapisane razem. Młodsze nibbles oznaczają kolejne wartości obwiedni głośności, starsze nibbles - obwiedni częstotliwości.
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 żadna 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 częstotliwości 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ę:
- $01 - nr patternu
- $02 - długość patternu
- $03 - tempo
- $04 - wartość wpisywana do rejestru kontroli AUDCTL
- $05... - 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 i nie umożliwia zapętlania obwiedni.
- 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 4 sterowany kanałem 2 (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.