SEQ
From Atariki
(Różnice między wersjami)
Wersja z dnia 22:18, 18 gru 2017 0xF (Dyskusja | wkład) ← Previous diff |
Aktualna wersja 0xF (Dyskusja | wkład) |
||
Linia 8: | Linia 8: | ||
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.