/**************************************************************************** * * 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 #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