SEQ
From Atariki
(Różnice między wersjami)
Wersja z dnia 22:16, 18 gru 2017 0xF (Dyskusja | wkład) ← Previous diff |
Aktualna wersja 0xF (Dyskusja | wkład) |
||
Linia 3: | Linia 3: | ||
* bajty 0-2: sygnatura $b3 $a5 $b1 ("SEQ" w inwersie w [[Kody ekranowe|kodach ekranowych]]) | * bajty 0-2: sygnatura $b3 $a5 $b1 ("SEQ" w inwersie w [[Kody ekranowe|kodach ekranowych]]) | ||
* bajt 3: tempo=1500/BPM, np. bajt 10 oznacza 150 BPM | * bajt 3: tempo=1500/BPM, np. bajt 10 oznacza 150 BPM | ||
- | * bajt 4: długość patternu: $80=128 pozycji (4/4), $60=96 pozycji (3/4) | + | * bajt 4: długość patternu w bajtach: $80 = 64 pozycje (4/4), $60 = 48 pozycji (3/4) |
* bajty 5-40: tytuł utworu w kodach ekranowych (36 znaków) | * bajty 5-40: tytuł utworu w kodach ekranowych (36 znaków) | ||
* bajty 41-???: skompresowany utwór | * bajty 41-???: skompresowany utwór | ||
Algorytm kompresji: | Algorytm kompresji: | ||
- | * bajt $e8: kolejny bajt zawiera liczbę powtórzeń bajtu 0 | + | * bajt $e8: kolejny bajt zawiera liczbę powtórzeń bajtu 0 (0 oznacza 256 powtórzeń, a nie zero) |
- | * bajt $f0: kolejny bajt zawiera liczbę powtórzeń bajtu $ff | + | * bajt $f0: kolejny bajt zawiera liczbę powtórzeń bajtu $ff (0 oznacza 256 powtórzeń, a nie zero) |
* pozostałe bajty są nieskompresowane | * pozostałe bajty są nieskompresowane | ||
Aktualna wersja
Format programu MIDI Sequencer.
- bajty 0-2: sygnatura $b3 $a5 $b1 ("SEQ" w inwersie w kodach ekranowych)
- bajt 3: tempo=1500/BPM, np. bajt 10 oznacza 150 BPM
- bajt 4: długość patternu w bajtach: $80 = 64 pozycje (4/4), $60 = 48 pozycji (3/4)
- bajty 5-40: tytuł utworu w kodach ekranowych (36 znaków)
- bajty 41-???: skompresowany utwór
Algorytm kompresji:
- bajt $e8: kolejny bajt zawiera liczbę powtórzeń bajtu 0 (0 oznacza 256 powtórzeń, a nie zero)
- bajt $f0: kolejny bajt zawiera liczbę powtórzeń bajtu $ff (0 oznacza 256 powtórzeń, a nie zero)
- pozostałe bajty są nieskompresowane
W wyniku dekompresji powinniśmy otrzymać 25600 bajtów:
- bajty 0-2559: song, po 16 bajtów na linię songu
- bajty 2560-5119: nagłówki patternów, po 16 bajtów na pattern
- bajty 5120-25599: patterny, po 128 bajtów na pattern
Song: Bajt $00-$9f oznacza dany pattern, $ff oznacza brak patternu.
Nagłówki patternów:
- bajt 0: kanał MIDI (0-15)
- bajt 1: program MIDI
- bajty 2-15: nazwa patternu w kodach ekranowych
Patterny: Każda pozycja jest opisana parą bajtów: nuta, głośność wg standardu MIDI. $ff,$ff to odstęp.