326 lines
7.1 KiB
C
326 lines
7.1 KiB
C
/****************************************************************************
|
|
*
|
|
* Digital Sound Interface Kit (DSIK)
|
|
* Version 2.00
|
|
*
|
|
* by Carlos Hasan
|
|
*
|
|
* Filename: import.h
|
|
* Version: Revision 1.3
|
|
*
|
|
* Language: WATCOM C
|
|
* Environment: IBM PC (DOS/4GW)
|
|
*
|
|
* Description: External music modules import routines.
|
|
*
|
|
* Revision History:
|
|
* ----------------
|
|
*
|
|
* Revision 1.3 94/11/17 16:58:20 chv
|
|
* Added Composer 669 and Scream Tracker 2.0 import routines
|
|
*
|
|
* Revision 1.2 94/11/08 15:10:42 chv
|
|
* Added Amiga IFF/8SVX sample file import routines
|
|
*
|
|
* Revision 1.1 94/10/26 13:12:43 chv
|
|
* Added Multitracker MTM modules import routines
|
|
*
|
|
* Revision 1.0 94/08/22 16:09:24 chv
|
|
* Initial revision
|
|
*
|
|
****************************************************************************/
|
|
|
|
#ifndef __IMPORT_H
|
|
#define __IMPORT_H
|
|
|
|
#ifndef __AUDIO_H
|
|
#include <audio.h>
|
|
#endif
|
|
|
|
/* supported file formats */
|
|
|
|
#define FORM_DSM 0x00 /* RIFF/DSMF module file */
|
|
#define FORM_MOD 0x01 /* Protracker/Fastracker modules */
|
|
#define FORM_S3M 0x02 /* Scream Tracker 3.0 modules */
|
|
#define FORM_MTM 0x03 /* Multitracker 1.0 modules */
|
|
#define FORM_669 0x04 /* Composer 669 modules */
|
|
#define FORM_STM 0x05 /* Scream Tracker 2.0 modules */
|
|
|
|
#define FORM_WAV 0x80 /* Windows WAVE PCM files */
|
|
#define FORM_VOC 0x81 /* Creative Labs Voice Files */
|
|
#define FORM_IFF 0x82 /* Amiga IFF/8SVX sample files */
|
|
#define FORM_RAW 0x83 /* 8-bit mono RAW sample files */
|
|
|
|
|
|
/* Protracker/Fastracker (MOD) file format */
|
|
|
|
#define MOD_MK 0x2E4B2E4DL
|
|
#define MOD_FLT4 0x34544C46L
|
|
#define MOD_FLT8 0x38544C46L
|
|
#define MOD_6CHN 0x4E484336L
|
|
#define MOD_8CHN 0x4E484338L
|
|
|
|
#pragma pack (1)
|
|
|
|
typedef struct {
|
|
char SampleName[22];
|
|
word Length;
|
|
byte Finetune;
|
|
byte Volume;
|
|
word LoopStart;
|
|
word LoopLength;
|
|
} MODSample;
|
|
|
|
typedef struct {
|
|
char SongName[20];
|
|
MODSample Samples[31];
|
|
byte NumOrders;
|
|
byte ReStart;
|
|
byte Orders[128];
|
|
dword Magic;
|
|
} MODSong;
|
|
|
|
|
|
/* Scream Tracker 3.0 (S3M) file format */
|
|
|
|
#define S3M_SCRM 0x4D524353L
|
|
#define S3M_SCRS 0x53524353L
|
|
|
|
typedef struct {
|
|
byte Type;
|
|
char FileName[13];
|
|
word DataPtr;
|
|
dword Length;
|
|
dword LoopStart;
|
|
dword LoopEnd;
|
|
byte Volume;
|
|
byte LibDisk;
|
|
byte Pack;
|
|
byte Flags;
|
|
dword Rate;
|
|
char Pad0[12];
|
|
char SampleName[28];
|
|
dword Magic;
|
|
} S3MSample;
|
|
|
|
typedef struct {
|
|
char SongName[28];
|
|
byte EofMark;
|
|
byte SongType;
|
|
word Pad0;
|
|
word NumOrders;
|
|
word NumSamples;
|
|
word NumPatterns;
|
|
word Flags;
|
|
word Tracker;
|
|
word FileFormat;
|
|
dword Magic;
|
|
byte GlobalVolume;
|
|
byte Tempo;
|
|
byte BPM;
|
|
byte MasterVolume;
|
|
byte UltraClick;
|
|
byte DefPan;
|
|
byte Pad1[8];
|
|
word Special;
|
|
byte ChanMap[32];
|
|
} S3MSong;
|
|
|
|
|
|
/* Multitracker 1.0 (MTM) file format */
|
|
|
|
#define MTM_MAGIC 0x104D544DL
|
|
#define MTM_MASK 0xF0FFFFFFL
|
|
|
|
typedef struct {
|
|
dword Magic;
|
|
char SongName[20];
|
|
word NumTracks;
|
|
byte LastPattern;
|
|
byte LastOrder;
|
|
word CommentLength;
|
|
byte NumSamples;
|
|
byte Flags;
|
|
byte BeatsPerTrack;
|
|
byte NumChans;
|
|
byte PanPos[32];
|
|
} MTMSong;
|
|
|
|
typedef struct {
|
|
char SampleName[22];
|
|
dword Length;
|
|
dword LoopStart;
|
|
dword LoopEnd;
|
|
byte Finetune;
|
|
byte Volume;
|
|
byte Flags;
|
|
} MTMSample;
|
|
|
|
typedef struct {
|
|
byte Data[192];
|
|
} MTMTrack;
|
|
|
|
|
|
/* Composer 669 file format */
|
|
|
|
#define GG9_MAGIC 0x6669
|
|
|
|
typedef struct {
|
|
word Magic;
|
|
char SongName[108];
|
|
byte NumSamples;
|
|
byte NumPatterns;
|
|
byte ReStart;
|
|
byte Orders[128];
|
|
byte Tempos[128];
|
|
byte Breaks[128];
|
|
} GG9Song;
|
|
|
|
typedef struct {
|
|
char FileName[13];
|
|
dword Length;
|
|
dword LoopStart;
|
|
dword LoopEnd;
|
|
} GG9Sample;
|
|
|
|
|
|
/* Scream Tracker 2.0 (STM) modules */
|
|
|
|
#define STM_TRACKER "!Scream!"
|
|
|
|
typedef struct {
|
|
char FileName[13];
|
|
byte LibDisk;
|
|
word DataPtr;
|
|
word Length;
|
|
word LoopStart;
|
|
word LoopEnd;
|
|
byte Volume;
|
|
byte Pad0;
|
|
word Rate;
|
|
byte Pad1[6];
|
|
} STMSample;
|
|
|
|
typedef struct {
|
|
char SongName[20];
|
|
char Tracker[8];
|
|
byte EofMark;
|
|
byte FileType;
|
|
word TrackerVer;
|
|
byte InitTempo;
|
|
byte NumPatterns;
|
|
byte GlobalVolume;
|
|
byte Pad[13];
|
|
STMSample Samples[31];
|
|
byte Orders[128];
|
|
} STMSong;
|
|
|
|
|
|
/* Creative Labs Voice (VOC) file format */
|
|
|
|
#define VOC_HDR "Creative Voice File\32"
|
|
|
|
#define VOC_TERM 0
|
|
#define VOC_DATA 1
|
|
#define VOC_CONTINUE 2
|
|
#define VOC_SILENCE 3
|
|
#define VOC_MARK 4
|
|
#define VOC_TEXT 5
|
|
#define VOC_REPEAT 6
|
|
#define VOC_ENDREPEAT 7
|
|
#define VOC_EXTINFO 8
|
|
|
|
#define VOC_FMT_8BITS 0
|
|
#define VOC_FMT_4BITS 1
|
|
#define VOC_FMT_26BITS 2
|
|
#define VOC_FMT_2BITS 3
|
|
|
|
#define VOC_MODE_MONO 0
|
|
#define VOC_MODE_STEREO 1
|
|
|
|
typedef struct {
|
|
byte Magic[20];
|
|
word BlockPos;
|
|
word Version;
|
|
word VersionCheck;
|
|
} VocHeader;
|
|
|
|
typedef struct {
|
|
byte Type;
|
|
byte Size[3];
|
|
} VocBlock;
|
|
|
|
typedef struct {
|
|
byte TimeConst;
|
|
byte Format;
|
|
} VocData;
|
|
|
|
typedef struct {
|
|
word TimeConst;
|
|
byte Pack;
|
|
byte Mode;
|
|
} VocExtInfo;
|
|
|
|
|
|
/* Amiga IFF/8SVX file format */
|
|
|
|
#define IFF_FORM 0x4D524F46L
|
|
#define IFF_8SVX 0x58565338L
|
|
#define IFF_VHDR 0x52444856L
|
|
#define IFF_ANNO 0x4F4E4E41L
|
|
#define IFF_NAME 0x454D414EL
|
|
#define IFF_CHAN 0x4E414843L
|
|
#define IFF_BODY 0x59444F42L
|
|
|
|
#define WSWAP(w) ((((w)&0xFF)<<8)|(((w)>>8)&0xFF))
|
|
#define LSWAP(l) ((WSWAP((l)&0xFFFF)<<16)|(WSWAP((l)>>16)))
|
|
|
|
typedef struct {
|
|
dword ID;
|
|
dword Length;
|
|
dword Type;
|
|
} IffHeader;
|
|
|
|
typedef struct {
|
|
dword ID;
|
|
dword Length;
|
|
} IffBlock;
|
|
|
|
typedef struct {
|
|
byte Pad0[12];
|
|
word Rate;
|
|
byte Pad1;
|
|
byte Format;
|
|
byte Pad2[4];
|
|
} IffVHdr;
|
|
|
|
#pragma noalign (IffChan)
|
|
typedef struct {
|
|
dword Channels;
|
|
} IffChan;
|
|
|
|
#pragma pack (4)
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Import routines API prototypes */
|
|
|
|
DSM *dImportModule(char *Filename, int Form);
|
|
Sample *dImportSample(char *Filename, int Form);
|
|
DSM *dImportModuleFile(int Handle, long Length, int Form);
|
|
Sample *dImportSampleFile(int Handle, long Length, int Form);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/* Register calling convention used by the API routines */
|
|
|
|
#pragma aux dImportModule "_*" parm [eax] [edx];
|
|
#pragma aux dImportSample "_*" parm [eax] [edx];
|
|
#pragma aux dImportModuleFile "_*" parm [eax] [edx] [ebx];
|
|
#pragma aux dImportSampleFile "_*" parm [eax] [edx] [ebx];
|
|
|
|
#endif
|