MUZ (format pliku)

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 18:44, 25 sie 2011
Mono (Dyskusja | wkład)
(Dane patternów)
← Previous diff
Aktualna wersja
Mono (Dyskusja | wkład)
(Dane patternów)
Linia 2: Linia 2:
Format pliku używany przez program [[Sound Tracker]]. Format pliku używany przez program [[Sound Tracker]].
 +
 += Wersja pre 07 =
 +
 +Format pliku używany przez wersję nieoficjalną.
 +
 +== Postać nieskompresowana ==
 +
 +<table border=1>
 +<tr><td>offset</td><td>długość</td><td>opis</td></tr>
 +<tr><td>$0000</td><td>$0006</td><td>identyfikator: 'MUSIC '</td></tr>
 +<tr><td>$0006</td><td>...</td><td>dane instrumentów</td></tr>
 +<tr><td>...</td><td>...</td><td>dane patternów</td></tr>
 +<tr><td>...</td><td>...</td><td>dane songu</td></tr>
 +</table>
 +
 +=== 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 ==
 +
 +<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 =
 +
 +Format pliku używany przez oficjalnie wydaną wersję 07 programu.
== Postać nieskompresowana == == Postać nieskompresowana ==
Linia 42: 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 115: Linia 241:
* $00..$3F - nuta, * $00..$3F - nuta,
* $40..$7F - instrument (bity 0..5), * $40..$7F - instrument (bity 0..5),
-* $80..$FE - puste linie ($80 - 0 linii, $81 - 1 linia... $FE - 127 pustych linii),+* $80..$FE - odstęp między nutami ([[#Dane patternów|patrz wyżej]]),
* $FF - koniec patternu. * $FF - koniec patternu.
Linia 143: Linia 269:
Każda tablica adresów zawiera adresy zapisane w kolejności LSB, MSB. Każda tablica adresów zawiera adresy zapisane w kolejności LSB, MSB.
 +
 += Różności =
 +
 +* Obecnie znane są 4 rodzaje procedur odgrywających:
 +<ol start="0">
 + <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>
 + <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>
 +</ol>
 +* 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

offsetdługośćopis
$0000$0006identyfikator: '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

offsetdł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

offsetdługośćopis
$0000$0006identyfikator: '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

offsetdługośćopis
$0000$0004tablica zapętleń tracków
$0004$0004tablica LSB adresów tracków
$0008$0004tablica MSB adresów tracków
$000C$0002adres tablicy adresów patternów
$000E$0002adres tablicy adresów obwiedni głośności
$0010$0002adres tablicy adresów obwiedni częstotliwości
$0012$0002adres 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:

  1. 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.
  2. Oryginalna procedura dystrybuowana razem z Sound Trackerem 07. Wykorzystuje jedną tablicę częstotliwości dla kanałów pojedynczych i jedną dla łączonych.
  3. 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.
  4. 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.
Personal tools