We just reached 30,000 articles on this wiki! 🥳
If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!

Format:GDM

From The Cutting Room Floor
Jump to navigation Jump to search

The Bells, Whistles, and Sound Boards (BWSB) Sound File GDM (.GDM) is a tracker based file created in 1991 which may or may have not been used in any games for DOS systems made in C, QBasic/QuickBasic/PAS.

Format

File Header

(Source: BWSB Source Code from 1995 (GDMTYPE.H))
typedef struct
{
  char ID[4];                          // ID: 'GDMþ'
  char SongTitle[32];                  // Music's title
  char SongMusician[32];               // Name of music's composer
  char DOSEOF[3];                      // 10, 13, 26
  char ID2[4];                         // ID: 'GDMF'
  unsigned char FormMajorVer;          // Format major version
  unsigned char FormMinorVer;          // Format minor version
  unsigned int TrackID;                // Composing Tracker ID code
  unsigned char TrackMajorVer;         // Tracker's major version
  unsigned char TrackMinorVer;         // Tracker's minor version
  unsigned char PanMap[32];            // 0-Left to 15-Right, 255-N/U
  unsigned char MastVol;               // Range: 0..64
  unsigned char Tempo;                 // Initial music tempo (6)
  unsigned char BPM;                   // Initial music BPM (125)
  unsigned int FormOrigin;             // Original format ID:
   // 1-MOD, 2-MTM, 3-S3M, 4-669, 5-FAR, 6-ULT, 7-STM, 8-MED
   // (versions of 2GDM prior to v1.15 won't set this correctly)

  unsigned long OrdOffset;
  unsigned char NOO;                   // Number of orders in module
  unsigned long PatOffset;
  unsigned char NOP;                   // Number of patterns in module
  unsigned long SamHeadOffset;
  unsigned long SamOffset;
  unsigned char NOS;                   // Number of samples in module
  unsigned long MTOffset;
  unsigned long MTLength;
  unsigned long SSOffset;
  unsigned int SSLength;
  unsigned long TGOffset;
  unsigned int TGLength;
} GDMHeader;

Wave (SAM) File Format

(Source: BWSB Source Code (GDMHEAD.H))
typedef struct
{
  char SamName[32];
  char FileName[12];
  char EmsHandle;
  long Length;
  long LoopBegin;
  long LoopEnd;
  char Flags;
  int  C4Hertz;
  char Volume;
  char Pan;
  int Segment;
} SamHeader;

typedef struct
{
  char SamName[32];               // 32
  char FileName[12];              // 44
  char EmsHandle;                 // 45
  long Length;                    // 49
  long LoopBegin;                 // 53
  long LoopEnd;                   // 57
  char Flags;                     // 58
  int C4Hertz;                    // 60
  char Volume;                    // 61
  char Pan;                       // 62
} SamHeader2;

GDM Channel Header

(Source: BWSB Source Code (CHANTYPE.H))
typedef struct
{
  unsigned char MixFlags;              // Mixing flags
  unsigned int MixLBeg;                // Offset of loop beginning
  unsigned int MixLEnd;                // Offset of loop ending
  unsigned int MixFinetune;            // Finetune (C-4 Hertz)
  unsigned long MixRate;               // Sample rate/period of sound
  unsigned int MixSeg;                 // Segment of sound
  unsigned int MixOff;                 // Offset of next byte to mix
  unsigned char MixVolume;             // Volume of channel
  unsigned int MixInc;                 // Incrementation for each sample. MSB.LSB
  unsigned char MixIncRemain;          // Remainder from last increment.
  unsigned char MusSample;             // Currently played sample number
  unsigned char MusNote;               // Currently played note
  unsigned char MusOctave;             // Currently played octave
  unsigned char MusEffect1;            // Music Effect Number (1)**
  unsigned int MusEffDat1;             // Music Effect Data   (1)**
  unsigned char MusEffect2;            // Music Effect Number (2)*
  unsigned int MusEffDat2;             // Music Effect Data   (2)*
  unsigned char MusEffect3;            // Music Effect Number (3)
  unsigned int MusEffDat3;             // Music Effect Data   (3)
  unsigned char MusEffect4;            // Music Effect Number (4)
  unsigned int MusEffDat4;             // Music Effect Data   (4)
  unsigned char VUMeter;               // Volume Meter value
  unsigned int MusVolRate;             // Old Vol Slide Speed
  unsigned int MusPortaRate;           // Old Porta to Note Speed
  unsigned char MusVibWave;            // Vibrato Waveform Select
  unsigned char MusVibPosition;        // Vibrato Table Position
  unsigned char MusVibSpeed;           // Vibrato Speed (x0h)
  unsigned char MusVibDepth;           // Vibrato Depth (0yh)
  unsigned char MusTrmWave;            // Tremolo Waveform Select
  unsigned char MusTrmPosition;        // Tremolo Table Position
  unsigned char MusTrmSpeed;           // Tremolo Speed
  unsigned char MusTrmDepth;           // Tremolo Depth
  unsigned char MusRetrigSpeed;        // Retrigger speed
  unsigned char MusRetrigSlide;        // Retrigger volume slide
  unsigned char MusGlissFunk;          // Funk It (Invert Loop) Speed
  unsigned char MusFunkOffset;         // Funk It position
  unsigned int MusWaveStart;           // Funk It funk pointer (offset into sample)
  unsigned char MixPanning;            // Pan position
  unsigned char MixHandle;             // EMS Handle this sample resides on
  unsigned char MixMonoVol;            // Mono volume value
  unsigned char MixLftVol;             // Left speaker mixing volume
  unsigned char MixRgtVol;             // Right speaker mixing volume
  unsigned long GUSAddress;            // Address of start position in GUS memory
  unsigned char MusArpeggio;           // Old Arpeggio speed
  unsigned char MusPortaUD;            // Old Porta Up/Down speed
  char Reserved[64];                   // For future expansion
} ChannelType;

SDK Information

The BWSB Usage Kit comes with Include Files, Source Code and in UTILS an Application named "2GDM.EXE" which converts .MOD and .S3M Files which use PCM8 Samples to .GDM Files.

Open With...

BWSB v1.21GNU SDK OpenMPT