MUZ (format pliku)

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 21:47, 26 sie 2011
Mono (Dyskusja | wkład)
(format pre 07 skompilowany)
← Previous diff
Wersja z dnia 01:03, 27 sie 2011
Mono (Dyskusja | wkład)
(Dane patternu)
Next diff →
Linia 115: Linia 115:
Tablica numerów instrumentów zawiera struktury: Tablica numerów instrumentów zawiera struktury:
-* $00 - pozycja patternu, w której należy zmienić numer instrumentu+* $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 * $01..$04 - numery instrumentów dla wszystkich kanałów po kolei
Zmiana numeru instrumentu nie rozpoczyna odgrywania nuty. Zmiana numeru instrumentu nie rozpoczyna odgrywania nuty.

Wersja z dnia 01:03, 27 sie 2011


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

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

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ę:

  • $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

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 i nie umożliwia zapętlania obwiedni.
  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 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.