DBM (format pliku)

Z Wikipedii, wolnej encyklopedii

DBM – format pliku modułów muzycznych używany przez program DIGIBooster Pro. Struktura formatu oparta jest na samoopisujących się blokach, zwanych chunkami, podobnie jak w formatach-kontenerach IFF, czy RIFF. Każdy z bloków rozpoczyna się czterobajtowym identyfikatorem, identyfikator to cztery wielkie litery w kodzie ASCII. Po identyfikatorze następuje 32-bitowa liczba określająca długość zawartości bloku (bez uwzględnienia 8 bajtów zajmowanych przez identyfikator i pole długości). W formacie DBM wszystkie liczby wielobajtowe są zapisane w konwencji big endian (od najstarszego do najmłodszego bajtu). Jeżeli chodzi o teksty zapisane w module (np. jego nazwa, nazwy utworów i instrumentów), nie zakłada się żadnej konkretnej strony kodowej. Najczęściej jest to standardowa dla Amigi strona ECMA Latin-1 czyli ISO-8859-1.

Ogólna budowa modułu[edytuj | edytuj kod]

Moduł w formacie DBM zawiera kilka następujących po sobie bloków o następujących identyfikatorach:

  • NAME – nazwa modułu.
  • INFO – podstawowe informacje o module, takie jak liczba ścieżek dźwiękowych, instrumentów, czy tabel sekwencera.
  • PATT – tabele sekwencera (ang. patterns), a więc zapis muzyczny utworu zawierający nuty, numery instrumentów oraz efekty dźwiękowe i sterujące.
  • SONG – informacje o utworach zapisanych w module oraz kolejność odtwarzania tabel sekwencera. Z reguły moduł zawiera jeden utwór, ale może ich być więcej.
  • INST – informacje o instrumentach, takie jak głośność, panorama stereo, obwiednie, pętle itp.
  • SMPL – z reguły najdłuższy blok, zawiera próbki dźwięku zapisane jako PCM.
  • VENV – blok opcjonalny, zawiera definicje obwiedni głośności instrumentów.
  • PENV – blok opcjonalny, zawiera definicje obwiedni panoramy stereo instrumentów.

Kolejność bloków w module jest dowolna, z zastrzeżeniem, że przed blokiem INFO może występować jedynie blok NAME.

Szczegółowy opis bloków[edytuj | edytuj kod]

Na początku każdego modułu występuje ośmiobajtowy nagłówek, składający się z następujących pól:

Początek Długość Znaczenie
0 4 Identyfikator formatu, ciąg "DBM0".
4 1 Wersja programu, który zapisał moduł. Liczba dwucyfrowa zakodowana w kodzie BCD.
5 1 Rewizja programu, który zapisał moduł. Liczba dwucyfrowa zakodowana w kodzie BCD. Przykładowo, zapis $02 $21 oznacza wersję 2.21 DigiBoostera.
6 2 Zarezerwowane, zawsze 0.

Blok NAME[edytuj | edytuj kod]

Początek Długość Znaczenie
0 4 Identyfikator bloku, ciąg "NAME".
4 4 Długość następujących danych w bajtach. Dla tego bloku zawsze 44.
8 44 Nazwa modułu. Jeżeli jest krótsza, jest uzupełniona bajtami 0. Jeżeli ma dokładnie 44 znaki, nie posiada na końcu bajtu 0.

Blok NAME ma stałą długość 52 bajtów.

Blok INFO[edytuj | edytuj kod]

Początek Długość Znaczenie
0 4 Identyfikator bloku, ciąg "INFO".
4 4 Długość następujących danych w bajtach. Dla tego bloku zawsze 10.
8 2 Liczba instrumentów w module. Maksymalnie 255.
10 2 Liczba próbek dźwiękowych (sampli) w module. Maksymalnie 256.
12 2 Liczba utworów w module. DigiBooster Pro 2.x ogranicza tę liczbę do 5.
14 2 Liczba tablic sekwencera (patternów) w module. Maksymalnie 1024.
16 2 Liczba ścieżek dźwiękowych w module, od 2 do 128 włącznie (zawsze parzysta).

Blok INFO ma stałą długość 18 bajtów.

Blok SONG[edytuj | edytuj kod]

Początek Długość Znaczenie
0 4 Identyfikator bloku, ciąg "SONG".
4 4 Długość następujących danych w bajtach. Zmienna.

Po nagłówku następują zapisane kolejno po sobie definicje utworów modułu. Liczba definicji zgodna jest z liczbą utworów zapisaną w bloku INFO. Pojedyncza definicja ma następującą budowę:

Początek Długość Znaczenie
0 44 Tytuł utworu. Jeżeli krótszy niż 44 znaki uzupełniony bajtami 0. Jeżeli ma dokładnie 44 znaki, nie jest zakończony bajtem 0.
44 2 Długość utworu, czyli liczba kolejno odtwarzanych tabel sekwencera (patternów).
46 zmienna Lista odtwarzania zawierająca numery kolejno odtwarzanych patternów. Numery zaczynają się od 0 i odpowiadają ściśle kolejności zapisania patternów w bloku PATT. Każda pozycja listy jest liczbą 16-bitową bez znaku. Ilość tych liczb odpowiada długości utworu powyżej.

Blok INST[edytuj | edytuj kod]

Początek Długość Znaczenie
0 4 Identyfikator bloku, ciąg "INST".
4 4 Długość następujących danych w bajtach. Zmienna (50 × liczba instrumentów).

Po nagłówku następują zapisane kolejno po sobie definicje instrumentów. Liczba definicji zgodna jest z liczbą instrumentów zapisaną w bloku INFO. Pojedyncza definicja ma długość 50 bajtów i następującą budowę:

Początek Długość Znaczenie
0 30 Nazwa instrumentu. Jeżeli krótsza od 30 znaków, uzupełniona bajtami 0. Jeżeli ma równo 30 znaków, nie posiada kończącego bajtu 0.
30 2 Numer kolejny próbki dźwiękowej używanej przez instrument. Odpowiada kolejności próbek w bloku SMPL, liczonej od 1.
32 2 Domyślna głośność instrumentu, w skali od 0 do 64 włącznie.
34 4 Bazowa częstotliwość próbkowania. Częstotliwość z jaką należy odtwarzać instrument, aby uzyskać nutę C-4.
38 4 Początek pętli – numer (liczony od 0) pierwszej próbki PCM znajdującej się w pętli.
42 4 Liczba próbek PCM w pętli.
46 2 Domyślna panorama stereo od -128 (kanał lewy) do +128 (kanał prawy).
48 2 Rodzaj pętli: 0 = brak pętli, 1 = pętla do przodu, 2 = pętla dwukierunkowa ("ping-pong").

Blok SMPL[edytuj | edytuj kod]

Początek Długość Znaczenie
0 4 Identyfikator bloku, ciąg "SMPL".
4 4 Długość następujących danych w bajtach. Zmienna.

Po nagłówku następują zapisane kolejno po sobie próbki dźwiękowe, każda poprzedzona własnym 8-bajtowym nagłówkiem. Liczba próbek dźwiękowych zgodna jest z liczbą zapisaną w bloku INFO. Pojedyncza próbka jest zapisana następująco:

Początek Długość Znaczenie
0 4 Rodzaj kodowania PCM: 1 = 8-bitowe, 2 = 16-bitowe, 4 = 32-bitowe.
4 4 Liczba próbek PCM.
8 zmienna Próbki PCM zapisane jako liczby całkowite ze znakiem.

Blok PATT[edytuj | edytuj kod]

Początek Długość Znaczenie
0 4 Identyfikator bloku, ciąg "PATT".
4 4 Długość następujących danych w bajtach. Zmienna.

Po nagłówku następują zapisane kolejno po sobie tablice sekwencera (patterny). Liczba tablic zgodna jest z liczbą zapisaną w bloku INFO. Pojedyncza tablica jest zapisana w następujący sposób:

Początek Długość Znaczenie
0 2 Liczba wierszy tablicy (patternu).
2 4 Długość spakowanych danych tablicy w bajtach. Zmienna.
6 zmienna Spakowane dane tablicy (patternu).

Dane tablicy sekwencera (patternu) są spakowane bardzo prostym algorytmem, opierającym się na założeniu, że większość pól tablicy jest pusta (zawiera zera). Zapisywane są wyłącznie niezerowe pola, co pozwala na spore oszczędności. Pierwszym bajtem pola jest zawsze numer ścieżki. Bajt $00 ma znaczenie specjalne i oznacza natychmiastowe przejście do nowego wiersza. W związku z tym, ścieżki numerowane są od 1. Po numerze ścieżki następuje bajt, którego 6 najmłodszych bitów sygnalizuje obecność kolejno (od najmłodszego bitu) nuty, numeru instrumentu, pierwszej komendy, parametru pierwszej komendy, drugiej komendy i parametru tejże. Bit "0" na danej pozycji oznacza, że odpowiednia wartość jest zerem i nie została zapisana. Nuta zapisana jest w jednym bajcie podzielonym na dwa czterobitowe pola. Starsze 4 bity zawierają numer oktawy (od 1 do 8), młodsze zawierają numer półtonu w oktawie (od 0 do 11, z tym, że ósma oktawa jest niepełna, DigiBooster formalnie obsługuje 7 oktaw). Instrumenty numerowane są od 1. Oto przykład początku tablicy:

$00 – przejście do wiersza 1, wiersz 0 jest cały pusty.

$06 $03 $52 $02 – ścieżka 6, nuta i instrument, nuta D-5, instrument 2. W zapisie trackerowym: D-5 02 000 000

$00 – przejście do wiersza 2, zatem wiersz 1 zawiera dane wyłącznie na ścieżce 6.

$03 $31 $36 $0F $70 – ścieżka 3, nuta, komenda 2, parametr 2. Nuta to F#3, komenda F70. W zapisie trackerowym: F#3 00 000 F70.

Jeżeli spakowane dane patternu liczą sobie nieparzystą liczbę bajtów, są uzupełniane bajtem $00, który nie jest wliczany do długości podanej w nagłówku patternu, ale jest wliczany w długość całego bloku PATT. Kolejność ścieżek w danych jednego wiersza jest teoretycznie dowolna, ale zawsze zapisywane są od lewej do prawej. W przypadku, gdy w danym wierszu występują dane w każdej ścieżce, na zakończenie wiersza i tak umieszczony jest kod $00.

Bloki VENV i PENV[edytuj | edytuj kod]

Ze względu na prawie identyczną strukturę obu tych bloków, są one opisane łącznie. Blok VENV zawiera obwiednie głośności dla instrumentów, blok PENV obwiednie panoramy stereo. Oś czasu obwiedni jest wyskalowana w tzw. tickach, których czas trwania zależy od tempa modułu. Dla standardowego tempa 125 bpm jeden tick trwa 0,02 s. Wartości punktów obwiedni (na osi pionowej) są z zakresu od 0 (cisza) do 64 (pełna głośność) dla obwiedni głośności, oraz od -128 (tylko kanał lewy) do +128 (tylko kanał prawy) dla obwiedni panoramy. Każda obwiednia może posiadać pętlę oraz dwa punkty wybrzmiewania (ang. sustain). Opuszczenie pętli lub punktu wybrzmiewania następuje po napotkaniu komendy key off w zapisie muzycznym. A oto budowa wewnętrzna bloków:

Początek Długość Znaczenie
0 4 Identyfikator bloku, ciąg "VENV" lub "PENV"
4 4 Długość następujących danych w bajtach. Zmienna, 136 × liczba obwiedni + 2.
8 2 Liczba obwiedni w bloku.

Po nagłówku zapisane są kolejne obwiednie. Każda obwiednia zajmuje 136 bajtów, sposób zapisu jest następujący:

Początek Długość Znaczenie
0 2 Numer instrumentu (od 1) do którego przypisana jest obwiednia.
2 1 Pole bitowe. Ustawienie poszczególnych bitów ma następujące znaczenie:
  • bit 0 (najmłodszy) – obwiednia jest aktywna,
  • bit 1 – obwiednia posiada pierwszy punkt wybrzmiewania,
  • bit 2 – obwiednia posiada pętlę,
  • bit 3 – obwiednia posiada drugi punkt wybrzmiewania.
3 1 Liczba punktów obwiedni (nie więcej niż 32).
4 1 Numer punktu obwiedni będącego pierwszym punktem wybrzmiewania.
5 1 Numer punktu obwiedni będącego początkiem pętli.
6 1 Numer punktu obwiedni będącego końcem pętli.
7 1 Numer punktu obwiedni będącego drugim punktem wybrzmiewania.
8 2 Pierwszy punkt obwiedni: położenie w czasie od momentu zagrania nuty (w tickach).
10 2 Pierwszy punkt obwiedni: wartość.

Dalej następuje kolejne 31 punktów obwiedni. Tablica punktów obwiedni zawiera zawsze 32 pola, niezależnie od tego ile punktów jest wykorzystanych.

Materiały źródłowe[edytuj | edytuj kod]

  • Instrukcja użytkownika programu DigiBooster Professional 2.21 (dołączona m.in. do wersji demo programu).
  • Kod źródłowy odtwarzacza modułów DBM (dołączony m.in. do wersji demo programu DigiBooster).

Linki zewnętrzne[edytuj | edytuj kod]