MSC (format pliku)
From Atariki
(Różnice między wersjami)
Wersja z dnia 14:30, 25 maj 2015 Mono (Dyskusja | wkład) (→Uwagi - tempo) ← Previous diff |
Aktualna wersja Mono (Dyskusja | wkład) (→Instrumenty - dlugosc obwiedni) |
||
Linia 7: | Linia 7: | ||
Plik jest skompresowany za pomocą wariantu prostej kompresji RLE. | 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: | + | 1. Jeśli bajt odczytany z pliku ma wartość $1B (kod [[ATASCII]] znaku ESC), wtedy kolejne dwa bajty oznaczają kolejno: |
* wartość | * wartość | ||
Linia 23: | Linia 23: | ||
<tr><td>$0D00</td><td>$0680</td><td>Song #3.</td></tr> | <tr><td>$0D00</td><td>$0680</td><td>Song #3.</td></tr> | ||
<tr><td>$1380</td><td>$0680</td><td>Song #4.</td></tr> | <tr><td>$1380</td><td>$0680</td><td>Song #4.</td></tr> | ||
- | <tr><td>$1A00</td><td>$1000</td><td>Dane 128 patternów syntetycznych.</td></tr> | + | <tr><td>$1A00</td><td>$1000</td><td>Dane 128 sekwencji syntetycznych.</td></tr> |
- | <tr><td>$2A00</td><td>$0800</td><td>Dane 64 patternów samplowych.</td></tr> | + | <tr><td>$2A00</td><td>$0800</td><td>Dane 64 sekwencji samplowych.</td></tr> |
- | <tr><td>$3200</td><td>$0800</td><td>Dane 32 instrumentów.</td></tr> | + | <tr><td>$3200</td><td>$1000</td><td>Dane 32 instrumentów.</td></tr> |
- | <tr><td>$3A00</td><td>$00??</td><td>Blok inicjalizacyjny playera.</td></tr> | + | <tr><td>$4200</td><td>$005A</td><td>Blok inicjalizacyjny playera.</td></tr> |
</table> | </table> | ||
Linia 58: | Linia 58: | ||
- | == Patterny syntetyczne == | + | == Sekwencje syntetyczne == |
<table border=1> | <table border=1> | ||
<tr><td>offset</td><td>długość</td><td>opis</td></tr> | <tr><td>offset</td><td>długość</td><td>opis</td></tr> | ||
- | <tr><td>$0000</td><td>$0020</td><td>Dane patternu #0.</td></tr> | + | <tr><td>$0000</td><td>$0020</td><td>Dane sekwencji #0.</td></tr> |
- | <tr><td>$0020</td><td>$0020</td><td>Dane patternu #1.</td></tr> | + | <tr><td>$0020</td><td>$0020</td><td>Dane sekwencji #1.</td></tr> |
<tr><td>...</td><td>...</td><td>...</td></tr> | <tr><td>...</td><td>...</td><td>...</td></tr> | ||
- | <tr><td>$0FE0</td><td>$0020</td><td>Dane patternu #127.</td></tr> | + | <tr><td>$0FE0</td><td>$0020</td><td>Dane sekwencji #127.</td></tr> |
</table> | </table> | ||
- | Każdy pattern składa się z 16 par bajtów: | + | Każda sekwencja składa się z 16 par bajtów: |
* nuta - 0=brak | * nuta - 0=brak | ||
Linia 76: | Linia 76: | ||
- | == Patterny samplowe == | + | == Sekwencje samplowe == |
<table border=1> | <table border=1> | ||
<tr><td>offset</td><td>długość</td><td>opis</td></tr> | <tr><td>offset</td><td>długość</td><td>opis</td></tr> | ||
- | <tr><td>$0000</td><td>$0020</td><td>Dane patternu #0.</td></tr> | + | <tr><td>$0000</td><td>$0020</td><td>Dane sekwencji #0.</td></tr> |
- | <tr><td>$0020</td><td>$0020</td><td>Dane patternu #1.</td></tr> | + | <tr><td>$0020</td><td>$0020</td><td>Dane sekwencji #1.</td></tr> |
<tr><td>...</td><td>...</td><td>...</td></tr> | <tr><td>...</td><td>...</td><td>...</td></tr> | ||
- | <tr><td>$07E0</td><td>$0020</td><td>Dane patternu #63.</td></tr> | + | <tr><td>$07E0</td><td>$0020</td><td>Dane sekwencji #63.</td></tr> |
</table> | </table> | ||
- | Każdy pattern składa się z 32 bajtów oznaczających numery sampli. | + | Każda sekwencja składa się z 32 bajtów oznaczających numery sampli. |
Linia 110: | Linia 110: | ||
<tr><td>$0000</td><td>$0001</td><td>Długość obwiedni.</td></tr> | <tr><td>$0000</td><td>$0001</td><td>Długość obwiedni.</td></tr> | ||
<tr><td>$0001</td><td>$0001</td><td>Zapętlenie obwiedni.</td></tr> | <tr><td>$0001</td><td>$0001</td><td>Zapętlenie obwiedni.</td></tr> | ||
- | <tr><td>$0002</td><td>$0004</td><td>4-krokowe arpeggio.</td></tr> | + | <tr><td>$0002</td><td>$0004</td><td>Arpeggio.</td></tr> |
<tr><td>$0006</td><td>$0001</td><td>Vibrato min-max.</td></tr> | <tr><td>$0006</td><td>$0001</td><td>Vibrato min-max.</td></tr> | ||
<tr><td>$0007</td><td>$0001</td><td>Vibrato speed-delay.</td></tr> | <tr><td>$0007</td><td>$0001</td><td>Vibrato speed-delay.</td></tr> | ||
Linia 118: | Linia 118: | ||
<tr><td>$000B</td><td>$0001</td><td>Sound control.</td></tr> | <tr><td>$000B</td><td>$0001</td><td>Sound control.</td></tr> | ||
<tr><td>$000C</td><td>$0001</td><td>Transpose off.</td></tr> | <tr><td>$000C</td><td>$0001</td><td>Transpose off.</td></tr> | ||
- | <tr><td>$000D</td><td>$00F3</td><td>Definicja obwiedni.</td></tr> | + | <tr><td>$000D</td><td>$0073</td><td>Definicja obwiedni.</td></tr> |
</table> | </table> | ||
- | |||
== Blok inicjalizacyjny playera == | == Blok inicjalizacyjny playera == | ||
Linia 131: | Linia 130: | ||
<tr><td>$0003</td><td>$0003</td><td>JMP $70C4 - procedura wywoływana na VBLK ($4C $C4 $70)</td></tr> | <tr><td>$0003</td><td>$0003</td><td>JMP $70C4 - procedura wywoływana na VBLK ($4C $C4 $70)</td></tr> | ||
<tr><td>$0006</td><td>$0003</td><td>JMP $75A4 - procedura odtwarzająca sample ($4C $A4 $75)</td></tr> | <tr><td>$0006</td><td>$0003</td><td>JMP $75A4 - procedura odtwarzająca sample ($4C $A4 $75)</td></tr> | ||
- | <tr><td>$0009</td><td>$0001</td><td>STOP - flaga zatrzymania odtwarzania</td></tr> | + | <tr><td>$0009</td><td>$0001</td><td>STOP - flaga zatrzymania procedury odtwarzania sampli</td></tr> |
- | <tr><td>$000A</td><td>$0004</td><td><b>AUDCTL dla songów (wartości dla zegara bazowego 15/64 kHz)</b></td></tr> | + | <tr><td>$000A</td><td>$0004</td><td><b>AUDCTL dla songów (opcja "15kHz" z menu "Songs")</b></td></tr> |
- | <tr><td>$000E</td><td>$0004</td><td><b>Znaczniki użycia sampli dla songów</b></td></tr> | + | <tr><td>$000E</td><td>$0004</td><td><b>Znaczniki użycia sampli dla songów (opcja "Digis" z menu "Songs")</b></td></tr> |
<tr><td>$0012</td><td>$0001</td><td><b>Tempo</b></td></tr> | <tr><td>$0012</td><td>$0001</td><td><b>Tempo</b></td></tr> | ||
<tr><td>$0013</td><td>$0004</td><td>AUDC dla songów (wartości chwilowe do odczytu podczas działania playera)</td></tr> | <tr><td>$0013</td><td>$0004</td><td>AUDC dla songów (wartości chwilowe do odczytu podczas działania playera)</td></tr> | ||
Linia 146: | Linia 145: | ||
Blok inicjalizacyjny playera jest po prostu zrzutem fragmentu pamięci i w zasadzie istotne dla poprawnego odtwarzania są jedynie pozycje wytłuszczone. | Blok inicjalizacyjny playera jest po prostu zrzutem fragmentu pamięci i w zasadzie istotne dla poprawnego odtwarzania są jedynie pozycje wytłuszczone. | ||
- | Tablice dla sampli duplikują częściowo zawartość pliku [[DRP (format pliku)|DRP]]. | + | Tablice adresów sampli duplikują częściowo zawartość pliku [[DRP (format pliku)|DRP]]. |
= Uwagi = | = Uwagi = | ||
* Jeśli moduł używa sampli, wtedy stanowi on parę z plikiem zestawu sampli [[DRP (format pliku)|DRP]]. | * Jeśli moduł używa sampli, wtedy stanowi on parę z plikiem zestawu sampli [[DRP (format pliku)|DRP]]. | ||
- | * Muzyka odtwarzana jest co ramkę, lecz należy mieć na uwadze, że tylko patterny samplowe odtwarzane są z zadanym tempem - patterny syntetyczne odtwarzane są co dwie ramki (!). | + | * 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. | ||
[[Kategoria: Formaty plików]] | [[Kategoria: Formaty plików]] |
Aktualna wersja
Format modułu muzycznego obsługiwany przez program Black Magic Composer.
Spis treści |
[Edytuj]
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.
[Edytuj]
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. |
[Edytuj]
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.
[Edytuj]
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
[Edytuj]
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.
[Edytuj]
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. |
[Edytuj]
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.
[Edytuj]
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.