MSC (format pliku)
Przejdź do nawigacji
Przejdź do wyszukiwania
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.