MSC (format pliku)

Z Atariki mirror
Przejdź do nawigacjiPrzejdź do wyszukiwania

Ten artykuł wymaga poszerzenia lub poprawek.
Zajrzyj na stronę dyskusji, by dowiedzieć się, czego brakuje, i - jeśli jesteś w stanie - uzupełnij braki.
Po naprawieniu mankamentów szablon Szablon:SDP można usunąć z treści hasła.Format modułu muzycznego obsługiwany przez program Black Magic Composer.

Budowa pliku

Plik jest skompresowany za pomocą wariantu prostej kompresji RLE.

1. Jeśli bajt odczytany z pliku ma wartość $1B (kod ATASCII znaku ESC), wtedy kolejne dwa bajty oznaczają kolejno:

  • wartość
  • ilość powtórzeń

2. Każdy inny bajt odczytany z pliku kopiowany jest do pamięci.

Dane

offset długość opis
$0000 $0680 Song #1.
$0680 $0680 Song #2.
$0D00 $0680 Song #3.
$1380 $0680 Song #4.
$1A00 $1000 Dane 128 sekwencji syntetycznych.
$2A00 $0800 Dane 64 sekwencji samplowych.
$3200 $1000 Dane 32 instrumentów.
$4200 $005A Blok inicjalizacyjny playera.


Song

offset długość opis
$0000 $0080 Numery sekwencji syntetycznych dla tracku #1.
$0080 $0080 Transpozycje nut sekwencji syntetycznych dla tracku #1.
$0100 $0080 Numery bazowe instrumentów sekwencji syntetycznych dla tracku #1.
$0180 $0080 Numery sekwencji syntetycznych dla tracku #2.
$0200 $0080 Transpozycje nut sekwencji syntetycznych dla tracku #2.
$0280 $0080 Numery bazowe instrumentów sekwencji syntetycznych dla tracku #2.
$0300 $0080 Numery sekwencji syntetycznych dla tracku #3.
$0380 $0080 Transpozycje nut sekwencji syntetycznych dla tracku #3.
$0400 $0080 Numery bazowe instrumentów sekwencji syntetycznych dla tracku #3.
$0480 $0080 Numery sekwencji syntetycznych dla tracku #4.
$0500 $0080 Transpozycje nut sekwencji syntetycznych dla tracku #4.
$0580 $0080 Numery bazowe instrumentów sekwencji syntetycznych dla tracku #4.
$0600 $0080 Numery sekwencji samplowych.
  • $7E - koniec songu.
  • $7F - zapętlenie songu.


Sekwencje syntetyczne

offset długość opis
$0000 $0020 Dane sekwencji #0.
$0020 $0020 Dane sekwencji #1.
... ... ...
$0FE0 $0020 Dane sekwencji #127.

Każda sekwencja składa się z 16 par bajtów:

  • nuta - 0=brak
  • instrument


Sekwencje samplowe

offset długość opis
$0000 $0020 Dane sekwencji #0.
$0020 $0020 Dane sekwencji #1.
... ... ...
$07E0 $0020 Dane sekwencji #63.

Każda sekwencja składa się z 32 bajtów oznaczających numery sampli.


Instrumenty

offset długość opis
$0000 $0080 Dane instrumentu #0.
$0080 $0080 Dane instrumentu #1.
... ... ...
$0F80 $0080 Dane instrumentu #31.

Każdy instrument zdefiniowany jest następująco:

offset długość opis
$0000 $0001 Długość obwiedni.
$0001 $0001 Zapętlenie obwiedni.
$0002 $0004 Arpeggio.
$0006 $0001 Vibrato min-max.
$0007 $0001 Vibrato speed-delay.
$0008 $0001 Glide.
$0009 $0001 Detune.
$000A $0001 16-bit on/off.
$000B $0001 Sound control.
$000C $0001 Transpose off.
$000D $0073 Definicja obwiedni.

Blok inicjalizacyjny playera

offset długość opis
$0000 $0003 JMP $7050 - inicjalizacja playera ($4C $50 $70)
$0003 $0003 JMP $70C4 - procedura wywoływana na VBLK ($4C $C4 $70)
$0006 $0003 JMP $75A4 - procedura odtwarzająca sample ($4C $A4 $75)
$0009 $0001 STOP - flaga zatrzymania procedury odtwarzania sampli
$000A $0004 AUDCTL dla songów (opcja "15kHz" z menu "Songs")
$000E $0004 Znaczniki użycia sampli dla songów (opcja "Digis" z menu "Songs")
$0012 $0001 Tempo
$0013 $0004 AUDC dla songów (wartości chwilowe do odczytu podczas działania playera)
$0017 $0001 Pozycja w songu dla kanałów syntetycznych (wartość chwilowa)
$0018 $0001 Pozycja w songu dla kanału sampli (wartość chwilowa)
$0019 $0020 Adresy początków sampli (LSB-MSB)
$0039 $0020 Adresy końców sampli (LSB-MSB)
$0059 $0001 TAY - pierwszy opkod procedury inicjalizującej player ($A8)

Blok inicjalizacyjny playera jest po prostu zrzutem fragmentu pamięci i w zasadzie istotne dla poprawnego odtwarzania są jedynie pozycje wytłuszczone.

Tablice adresów sampli duplikują częściowo zawartość pliku DRP.

Uwagi

  • Jeśli moduł używa sampli, wtedy stanowi on parę z plikiem zestawu sampli DRP.
  • Muzyka odtwarzana jest co ramkę, lecz należy mieć na uwadze, że tylko sekwencje samplowe odtwarzane są z zadanym tempem - sekwencje syntetyczne odtwarzane są co dwie ramki (!) tak więc faktyczne tempo ma dwukrotnie większą wartość.
  • Program lokuje dane modułu począwszy od adresu $2DF7, player zaś znajduje się zawsze w $6FF7.