MUZ (format pliku)
From Atariki
Wersja z dnia 20:06, 26 sie 2011 Mono (Dyskusja | wkład) (zmiana poziomu naglowka) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (→Dane patternów) |
||
Linia 26: | Linia 26: | ||
Każdy instrument składa się z następujących pól: | Każdy instrument składa się z następujących pól: | ||
* $00 - nr instrumentu | * $00 - nr instrumentu | ||
- | * $01 - długość obwiedni głośności instrumentu | + | * $01 - długość obwiedni częstotliwościowej instrumentu |
- | * $02 - długość obwiedni częstotliwościowej instrumentu | + | * $02 - długość obwiedni głośności instrumentu |
- | * $03 - znieksztalcenie (AUDCx) | + | * $03 - zniekształcenie (AUDCx) |
* $04 - ? | * $04 - ? | ||
- | * $05..$40 - kolejne bajty obwiedni głośności (starszy nibble) i częstotliwości (młodszy nibble) | + | * $05..$40 - kolejne bajty obwiedni częstotliwości (starszy nibble) i głośności (młodszy nibble) |
=== Dane patternów === | === Dane patternów === | ||
Linia 41: | Linia 41: | ||
Każdy pattern zawiera dane na wszystkich 4 kanałów POKEYa naraz i tworzy następującą strukturę: | Każdy pattern zawiera dane na wszystkich 4 kanałów POKEYa naraz i tworzy następującą strukturę: | ||
- | * $001 - nr patternu | + | * $000 - nr patternu |
- | * $002 - długość patternu | + | * $001 - długość patternu |
- | * $003 - tempo | + | * $002 - tempo |
- | * $004 - wartość wpisywana do rejestru kontroli AUDCTL | + | * $003 - 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) | + | * $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) |
- | * $105..$204 - numery instrumentów dla 4 kanałów POKEYa kolejno 1, 2, 3, 4, 1, 2, 3, 4, itd. | + | * $104..$203 - numery instrumentów dla 4 kanałów POKEYa kolejno 1, 2, 3, 4, 1, 2, 3, 4, itd. |
=== Dane songu === | === Dane songu === | ||
Linia 55: | Linia 55: | ||
* $01 - długość songu | * $01 - długość songu | ||
* $02... - kolejne numery patternów | * $02... - kolejne numery patternów | ||
+ | |||
+ | == Postać skompresowana == | ||
+ | |||
+ | <table border=1> | ||
+ | <tr><td>offset</td><td>długość</td><td>opis</td></tr> | ||
+ | <tr><td>$0000</td><td>...</td><td>dane songu</td></tr> | ||
+ | <tr><td>...</td><td>...</td><td>tablica adresów instrumentów</td></tr> | ||
+ | <tr><td>...</td><td>...</td><td>tablica adresów patternów</td></tr> | ||
+ | <tr><td>...</td><td>...</td><td>dane instrumentów</td></tr> | ||
+ | <tr><td>...</td><td>...</td><td>dane patternów</td></tr> | ||
+ | </table> | ||
+ | |||
+ | 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 = | = Wersja 07 = | ||
Linia 99: | Linia 168: | ||
Każdy pattern zawiera dane na wszystkich 4 kanałów POKEYa naraz i tworzy następującą strukturę: | Każdy pattern zawiera dane na wszystkich 4 kanałów POKEYa naraz i tworzy następującą strukturę: | ||
- | * $01 - nr patternu | + | * $00 - nr patternu |
- | * $02 - długość patternu | + | * $01 - długość patternu |
- | * $03 - tempo | + | * $02 - tempo |
- | * $04 - wartość wpisywana do rejestru kontroli AUDCTL | + | * $03 - wartość wpisywana do rejestru kontroli AUDCTL |
- | * $05... - definicje ścieżek dla 4 kanałów POKEYa | + | * $04... - definicje ścieżek dla 4 kanałów POKEYa |
Każda ścieżka składa się z pól: | Każda ścieżka składa się z pól: | ||
Linia 203: | Linia 272: | ||
= Różności = | = Różności = | ||
- | Obecnie znane są 3 rodzaje procedur odgrywających: | + | * Obecnie znane są 4 rodzaje procedur odgrywających: |
- | + | <ol start="0"> | |
- | 1. Oryginalna procedura dystrybuowana razem z [[Sound Tracker]]em 07. Wykorzystuje jedną tablicę częstotliwości dla kanałów pojedynczych i jedną dla łączonych. | + | <li>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.</li> |
- | + | <li>Oryginalna procedura dystrybuowana razem z [[Sound Tracker]]em 07. Wykorzystuje jedną tablicę częstotliwości dla kanałów pojedynczych i jedną dla łączonych.</li> | |
- | 2. 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. | + | <li>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.</li> |
- | + | <li>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).</li> | |
- | 3. 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). | + | </ol> |
- | + | * Sam format pliku nie był w żaden sposób modyfikowany pod kątem różnych procedur odgrywających. | |
- | Sam format pliku nie był w żaden sposób modyfikowany pod kątem różnych procedur odgrywających. | + | |
[[Kategoria: Atari 8-bit]] | [[Kategoria: Atari 8-bit]] | ||
[[Kategoria: Formaty plików]] | [[Kategoria: Formaty plików]] |
Aktualna wersja
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.