home *** CD-ROM | disk | FTP | other *** search
/ PC World 2000 February / PCWorld_2000-02_cd.bin / Software / Servis / FFE / MOD.SWG / 0034_DMF.pas < prev    next >
Pascal/Delphi Source File  |  1997-03-02  |  11KB  |  282 lines

  1. ─────────────────────────────────────────────────────
  2. DELUSION DIGITAL MUSIC FILEFORMAT  V0.16B1 (25/12/93)
  3. ─────────────────────────────────────────────────────
  4.  
  5. Sorry dudes, some stuff is still in German, but who carez ;-)
  6. Will be converted to English soon.... Ask us for probz
  7.  
  8.  
  9. EXTENSION IS  ".DMF"
  10.  
  11. Header [DDMF]:
  12. ══════════════
  13.              ID                   "DDMF"                   4   BYTES
  14.              VERSION              current is 04            1   BYTE
  15.              TRACKER NAME         ex. "XTRACKER" ;-)       8   BYTES
  16.              SONG NAME            ex. "my first DMF"       30  BYTES
  17.              COMPOSER NAME        ex. "COSMIC"             20  BYTES
  18.              DATE                 ex. "27 12 93"           3   BYTES
  19.                                   Day,Month,Year
  20.  
  21.  
  22. InfoHeader [INFO]:
  23. ══════════════════
  24.              ID                   "INFO"                   4   BYTES
  25.              INFO_SIZE            Jump Bytes to next Block 1   LONGINT
  26.  
  27.  
  28. Composer Message [CMSG]:
  29. ════════════════════════
  30.              ID                   "CMSG"                    4  BYTES
  31.              MSG_SIZE             Jump Bytes to next Block  1  LONGINT
  32.              Filler                                         1  BYTE
  33.              Message              array of char             N  BYTES
  34.  
  35.  
  36. Sequencer [SEQU]:
  37. ═════════════════
  38.              ID                   "SEQU"
  39.              SEQU_SIZE            Jump Bytes to next Block 1   LONGINT
  40.              SEQU LOOP START                               1   WORD
  41.              SEQU LOOP END                                 1   WORD
  42.              SEQUENCER            (SEQU_SIZE/2 WORDS)-1 !!!
  43.  
  44.  
  45. Pattern [PATT]:
  46. ═══════════════
  47.  
  48.              ID                   "PATT"                   4   BYTES
  49.              PATT_SIZE            Jump Bytes to next Block 1   LONGINT
  50.              MAX PATTERN          1-1024                   1   WORD
  51.              MAX TRACKS           Tracks required to play  1   BYTE
  52.                                   this piece of Music =<16
  53.  
  54. For 1 to MAX PATTERN:
  55.  
  56.                TRACK ENTRYS         Tracks (max.32)          1   BYTE
  57.                BEAT                 HI│LOW                   1   BYTE
  58.                                      │  │
  59.                     Ticks per Beat ──┘  └── Beats per Measure
  60.  
  61.                MAX TICK             Ticks the Pattern is     1   WORD
  62.                                     long. (max. 512)
  63.                JMP_SIZE             Bytes to Jump to next    1   LONGINT
  64.                                     Pattern
  65.  
  66.  
  67. Track Datastream: <Global Track> ((<Info byte> <X Data bytes>) * MAX Tracks)
  68.                   <Global Track> ((<Info byte> <X Data bytes>) * MAX Tracks)
  69.                       ...
  70.  
  71. GLOBAL TRACK
  72. ─────────────
  73.  
  74.                 EFFECT               the global effect        1   BYTE
  75.                 DATA                 the data for gl. eff.    1   BYTE
  76.                                      only stored if EFFECT>0
  77.  
  78.  Getrennte allgemeine Spur für:
  79.  
  80.   Speed, Delays, Beat/Tick Change, Flags, General Volume
  81.  
  82.  
  83. INFO BYTE
  84. ──────────
  85.  
  86. XXXXXXXX  = Info Byte
  87. ││││││││
  88. │││││││x not used
  89. ││││││1 Effekt VOLUME / 0 not stored
  90. │││││1 Effekt NOTE / 0 not stored
  91. ││││1 Effekt INSTRUMENT / 0 not stored
  92. │││1 Volume stored / 0 not stored
  93. ││1 Note stored / 0 not stored
  94. │1 Instrument stored / 0 not stored
  95. 1 Counter to next Info Byte / 0 not stored, next Info Byte in 1 Tick
  96.  
  97. Wenn ein Bit im Info gesetzt ist ein Daten Byte für den Eintrag
  98. gespeichert bei Effekten sind 2 Daten Byte (Effekt Nr. und Effekt Daten)
  99. gespeichert.
  100.  
  101. Counter ist ein Zähler in Ticks bis zum nächsten Info Byte wenn Counter Bit
  102. in Info = 0 dann ist für den nächsten Tick wieder ein Info Byte
  103. vorhanden.
  104.  
  105. Effekt Gruppen:
  106.  
  107. INSTRUMENT: Jump Position, Loop Controll, Reverse, Scratch, Filter
  108.  
  109. NOTE: Portamento, Tremolo, Vibrato, Arpeggio
  110.  
  111. VOLUME: Set, Slide, Tremolo, Vibrato, Arpeggio, Stereo
  112.  
  113. Es könnten also maximal 3 Effekte gleichzeitig ausgelöst werden jeder in
  114. einem anderen Bereich. Maximale Grösse eines Track Eintrags sind 11 Byte
  115. (Info=0FEh).
  116.  
  117.  
  118. Def.: Note
  119.  
  120.        0       = Keine Änderung
  121.        1-108   = Note in Halbtonschritten,  C0=1 bis H8=108
  122.                  Dies entspricht einer Midi Note mit 1 addiert
  123.        109-128 = nicht defined
  124.        129-236 = Set Note Buffer
  125.                  Die Note wird in den Note Buffer gespeichert und nicht
  126.                  gespielt, eine spielende Note wird dabei nicht verändert.
  127.                  Das MSBit wird gelöscht die Noten entsprechen dann den
  128.                  Noten 1-108.
  129.  
  130.                  Der Note Buffer wird als 2 Parameter für Note Effekte
  131.                  verwendet z.B. für Tone Portamentos wo die Effekt Daten
  132.                  schon für den Steigungsgrad vergeben sind.
  133.                  Note Buffer könnte man auch dazu verwenden um Noten aus
  134.                  zuklammern, also um auszuprobieren wie sich das Stück
  135.                  ohne diese Note anhört ;-)
  136.  
  137.        237-254 = nicht definiert
  138.        255     = Note Off
  139.  
  140. Def.: Volume
  141.  
  142.        0 = keine Änderung
  143.        1 - 255 = Volume (255=Max Volume, linear Scale)
  144.  
  145.   For 1 to MAX TICKS:
  146.  
  147.     Global Effect Nr.                1 BYTE
  148.     (Effect Data)                    1  "
  149.  
  150.  
  151.     For 1 to MAX TRACKS
  152.  
  153.       PatternEntry:
  154.       ─────────────
  155.       Info Byte                      1 BYTE
  156.       (Counter Byte)                 1  "
  157.       (Instrument Byte)              1  "
  158.       (Note Byte)                    1  "
  159.       (Volume Byte)                  1  "
  160.       (INSTRUMENT Effekt Word)       2  "
  161.       (NOTE Effekt Word)             2  "
  162.       (VOLUME Effekt Word)           2  "
  163.  
  164.     END MAX TRACKS
  165.   END MAX TICKS
  166. END MAX PATTERN
  167.  
  168.  
  169. Instrument [INST]:
  170. ═══════════════════
  171.  
  172. Ist dieser Block nicht vorhanden zeigen die Instrument Nr. im Pattern
  173. direkt auf die Samples im [SMPI] Block.
  174.  
  175.              ID                   "INST"                   4   BYTES
  176.              INSTR_SIZE            Jump Bytes to next Block 1   LONGINT
  177.              MAX INSTR             max. 255                 1   BYTE
  178.  
  179.              NAME                 the Instrumentname       30  BYTES
  180.  
  181.              INSTR TYPE                                     1  BYTE
  182.                    xxxxxxXX   = Instrument Type
  183.                    xxxxxx00   = Sample aus [SMPI] Block
  184.                    xxxxxx01   = Midi Device, Midi Keyboard
  185.                    xxxxxx10   = FM Instrument ;-)))))))
  186.                    xxxxxx11   = Not Defined
  187.                    xxxxxXxx   = 1 = valid Attack Envelop, 0 = not valid
  188.                    xxxxXxxx   = 1 = Sustain ON, 1 = Sustain OFF
  189.                    XXXXxxxx   = not used
  190.  
  191.              RANGE ENTRYS         Anzahl der Range Definition Entrys
  192.                                                             1  BYTE
  193. For 1 to RANGE ENTRYS
  194.              RANGE DEFINITION
  195.              SMPI NR              Nr. des Samples im [SMPI] Block
  196.                                   das für diesen Bereich gespielt
  197.                                   wird                      1  BYTE
  198.              RANGE_Length         Halbtonschritte der dieser Eintrag
  199.                                   gilt                      1  BYTE
  200. END RANGE DEFINTION
  201.  
  202.              ENVELOP              6 Point Envelop noch nicht geanu
  203.                                   definiert ;-)
  204.  
  205.  
  206.  
  207. SampleInfo [SMPI]:
  208. ══════════════════
  209.              ID                   "SMPI"                   4   BYTES
  210.              SMPI_SIZE            Jump Bytes to next Block 1   LONGINT
  211.              MAX SAMPLES          max. 250                 1   BYTE
  212.  
  213. For 1 to MAX SAMPLES:
  214.  
  215.              NAME_LENGTH          length of NameBlock      1   BYTE
  216.              NAME                 the samplename           NAME_LENGTH BYTES
  217.              LENGTH               length of Sample         1   LONGINT
  218.              LOOP_START           start of the loop        1   LONGINT
  219.              LOOP_END             end of the loop          1   LONGINT
  220.              FREQUENCY            frequency for C-3        1   WORD
  221.              VOLUME               Instrument Volume        1   BYTE
  222.                                   0 = don't change current Volume
  223.                                   1 - 255 = Volume (255=Max Volume, linear Scale)
  224.              TYPE                 sample type              1   BYTE
  225.                               xxxxxxx0   = not looped
  226.                               xxxxxxx1   = looped
  227.                               xxxxxx0x   = 8BIT
  228.                               xxxxxx1x   = 16BIT    (not yet supported)
  229.                               xxxxXXxx   = Packe Type
  230.                               xxxx00xx   = Unpacked signed
  231.                               xxxx01xx   = Pack Type 0
  232.                               xxxx10xx   = Pack Type 1
  233.                               xxxx11xx   = Pack Type 2
  234.                               xXXXxxxx   = not defined.
  235.                               0xxxxxxx   = --> stored in dmf
  236.                               1xxxxxxx   = --> stored in bib.
  237.  
  238.              FILLER               not defined ;-)         1   WORD
  239.                                   should be zero
  240.  
  241.              CRC32_ID             checksum do identify    1   DWORD
  242.                                   equal Samples in bib.
  243.  
  244. END MAX SAMPLES
  245.  
  246.  
  247. SampleData [SAMPD]:
  248. ═══════════════════
  249.              ID                   "SMPD"                   4   BYTES
  250.              SMPD_SIZE            Jump Bytes to next Block 1   LONGINT
  251.  
  252.              SAMPLELENTGH         Jump Bytes to next Entry 1   LONGINT
  253.              SAMPLE DATA          Data of Sample         SAMPLELENGTH Bytes
  254.  
  255. Stream:    <DataLength> <Sample Data> <DataLength> <Sample Data>
  256.  
  257.  
  258. [Ende]:      ID                   "ENDE"
  259. ═══════
  260.  
  261. END DDMF
  262.  
  263. ═════════════════════════════════════════════════════════════════════════════
  264.  
  265. Das DMF Format ist somit folgende Blöcke unterteilt:
  266.  
  267. [DDMF] Format Kennzeichnung. The almighty DELUSION DIGITAL MUSIC FORMAT ;-)
  268.  
  269. [INFO] Info wird nur wenn nötig gespeichert. Defintion fehlt...
  270.  
  271. [SEQU] Sequencer, solange wie der Block
  272.  
  273. [PATT] Pattern Data, es ist für jeden Pattern eine beliebige Track Zahl
  274.        möglich sonst werden bei 16 Spuren z.b. in einem Pattern nur 4 benützt
  275.        werden zuviel Overhead gespeichert.
  276.  
  277. [SMPI] Info der Samples.
  278.  
  279. [SMPD] Daten der Samples. Sollte nach dem SMPI Block gespeichert sein.
  280.  
  281. [ENDE] Letzter Block im File ;-)
  282.