/* XM.H * * Fasttracker 2 eXtended Module format structures * * $Id: xm.h,v 1.4 1997/01/16 18:41:59 pekangas Exp $ * * Copyright 1996,1997 Housemarque Inc. * * This file is part of the MIDAS Sound System, and may only be * used, modified and distributed under the terms of the MIDAS * Sound System license, LICENSE.TXT. By continuing to use, * modify or distribute this file you indicate that you have * read the license and understand and accept it fully. */ #ifndef __XM_H #define __XM_H /****************************************************************************\ * enum xmFlags * ------------ * Description: Flag bits for different flag bytes and words in the XM * file \****************************************************************************/ enum xmFlags { xmLinearFreq = 1, /* xmHeader: linear frequency table used */ xmEnvelopeOn = 1, /* xmInstSampleHeader: envelope on */ xmEnvelopeSustain = 2, /* envelope sustain on */ xmEnvelopeLoop = 4, /* envelope loop on */ xmSample16bit = 16 /* xmSampleHeader: 16-bit sample */ }; /****************************************************************************\ * struct xmHeader * --------------- * Description: Extended Module file header \****************************************************************************/ typedef struct { char signature[17]; /* "Extended Module: " */ char name[20]; /* module name */ uchar num1A; /* 0x1A */ char trackerName[20]; /* tracker name */ U16 version; /* version number, major-minor */ U32 hdrSize; /* header size */ U16 songLength; /* song length */ U16 restart; /* restart position */ U16 numChans; /* number of channels */ U16 numPatts; /* number of patterns */ U16 numInsts; /* number of instruments */ U16 flags; /* header flags, see enum xmFlags */ U16 speed; /* initial speed */ U16 tempo; /* initial tempo */ uchar orders[256]; /* pattern order table */ } xmHeader; /****************************************************************************\ * struct xmPattern * ---------------- * Description: Fasttracker 2 Extended Module pattern \****************************************************************************/ typedef struct { U32 headerLength; /* pattern header length */ U8 packType; /* packing type (now 0) */ U16 numRows; /* number of rows */ U16 pattDataSize; /* pattern data size */ uchar data[EMPTYARRAY]; /* packed pattern data */ } xmPattern; /****************************************************************************\ * struct xmInstHeader * ------------------- * Description: Fasttracker 2 Extended Module instrument file header \****************************************************************************/ typedef struct { U32 instSize; /* instrument size */ char instName[22]; /* instrument filename */ U8 instType; /* instrument type (now 0) */ U16 numSamples; /* number of samples in instrument */ } xmInstHeader; /****************************************************************************\ * struct xmInstSampleHeader * ------------------------- * Description: Fasttracker 2 Extended Module instrument sample header * (follows instrument header if the instrument has samples. * Only once per instrument!) \****************************************************************************/ typedef struct { U32 headerSize; /* sample header size */ U8 noteSmpNums[96]; /* sample numbers for notes */ U8 volEnvelope[48]; /* volume envelope points */ U8 panEnvelope[48]; /* panning envelope points */ U8 numVolPoints; /* number of volume envelope points */ U8 numPanPoints; /* number of panning env. points */ U8 volSustain; /* volume sustain point */ U8 volLoopStart; /* volume loop start point */ U8 volLoopEnd; /* volume loop end point */ U8 panSustain; /* panning sustain point */ U8 panLoopStart; /* panning loop start point */ U8 panLoopEnd; /* panning loop end point */ U8 volEnvFlags; /* volume envelope flags */ U8 panEnvFlags; /* panning envelope flags */ U8 vibType; /* vibrato type */ U8 vibSweep; /* vibrato sweep */ U8 vibDepth; /* vibrato depth */ U8 vibRate; /* vibrato rate */ U16 volFadeout; /* volume fadeout */ U16 reserved; } xmInstSampleHeader; /****************************************************************************\ * struct xmSampleHeader * --------------------- * Description: Fasttracker 2 Extended Module sample file header \****************************************************************************/ typedef struct { U32 smpLength; /* sample length */ U32 loopStart; /* loop start */ U32 loopLength; /* loop length */ U8 volume; /* volume */ S8 finetune; /* finetune */ U8 flags; /* sample flags, bits 0-1 are loop type: 0 = no loop, 1 = unidir, 2 = bidir loop */ U8 panning; /* sample panning */ S8 relNote; /* relative note number */ U8 reserved; char smpName[22]; /* sample name */ /* Sample data follows, in delta format */ } xmSampleHeader; #endif /* * $Log: xm.h,v $ * Revision 1.4 1997/01/16 18:41:59 pekangas * Changed copyright messages to Housemarque * * Revision 1.3 1996/05/24 17:02:08 pekangas * Fixed to work with Watcom C again - using EMPTYARRAY * * Revision 1.2 1996/05/24 16:20:36 jpaana * Fixed for Linux * * Revision 1.1 1996/05/22 20:49:33 pekangas * Initial revision * */