[Back to SOUND SWAG index] [Back to Main SWAG index] [Original]

        MOD File DEMO

     ST> I do, however, have the MOD File structures in a Text File.
     ST> NetMail if you want them.

     EW> Hey..  Could you post them here if their not too long?
     EW> All I have For MOD Files is a Program (so so) that plays them
     EW> through the PCSpeaker, and it's *ALL* in Asm, and I'd love
     EW> to be able to convert at least the File reading to pascal,

     The MOD File Format is not overly Complicated in itself, but the music
     encoded therein is very intricate, since the notes use non-standard
     notations For the frequency, and the effects For each note are very
     involved.  I can, however, post a good skeleton For the File structure,
     but if you want the effects commands, we'll have to go to NetMail,
     since it would not be in Pascal.

    Type SongNameT = String[20]; {This is the first structure in the File, the
                                  full name of the song in the File}
         SampleT = Record        {This structure is Repeated 31 times, and
                                  describes each instrument}
            Name     : String[22];
            Len      : Word;     {Length of the sample wave pattern, which is
                                  Near the end of the File.  This number is
                                  the number of Words, use MUL 2 For Bytes}
            FineTune : Byte;     {0-7 = 0 to +7, 8-F = -8 to -1 offset from
                                  normal played notes.  Useful For off-key
                                  instruments}
            Volume   : Byte;     {0-64 Normal volume of instrument}
            RepeatAt : Word;     {offset in Words of the start of the pattern
                                  Repeat For long notes.}
            RepeatLn : Word;     {Length in Words of the Repeated part of the
                                  sample pattern}
            end;

         VoiceT = Record  {This structure is not in the MOD File itself, but
                           should help in organizing all of the voice's
                           Charicteristics}
            Sample  : Byte; {0-31    Which instrument sample to play}
            note    : Word; {12 bits Which note. Non-standard strange numbers}
            Effect  : Byte; {0-F     Effect to use on note}
            EffectC : Byte; {00-FF   Control Variable to effect}
            end;

         SongDataT = Record {This Record, at offset 950, contains inFormation
                             about the song music itself}
            SongLength : Byte; {1-128 Number of patterns (not wave) of
                                sets of musical notes}
            Fill1      : Byte; {Set to 127}
            Patterns   : Array[0..127] of Byte; {0-63 Outline of song}
                         {Tells which score to play where.  Number of
                          patterns is the highest number here}
            Initials   : String[4];             {"M.K.","FLT4", or "FLT8"}
            end;

         PatternDataT = Array[1..4] of Byte; {This structure is Repeated
                           four times For each note in the score (4 voices,
                           4 Bytes each}

         {After this the wave patterns For the samples are placed}

    Var Voice  : Array[1.. 4] of VoiceT;  {Four voices}
        Sample : Array[1..31] of SampleT; {31 samples}

    Procedure ParseData (Patt : PatternDataT, VoiceNum : Byte);
    {Stuffs voice With pattern data beFore playing}
    begin
      Voice[VoiceNum].Sample  := (Patt[1] mod 16) shl 4 + (Patt[3] mod 16);
      Voice[VoiceNum].note    := (Patt[2] shl 4) + (Patt[2] div 16);
      Voice[VoiceNum].Effect  := (Patt[3] div 16;
      Voice[VoiceNum].EffectC := Patt[4];
      end;

    Anyway, this should help explain how to do something With the File.
    if you need inFormation on what the numbers For the notes are or how
    to interprit the effects, send NetMail.

[Back to SOUND SWAG index] [Back to Main SWAG index] [Original]