/* dls.h Description: Interface defines and structures for the Instrument Collection Form RIFF DLS. Written by Sonic Foundry 1996. Released for public use. */ #ifndef _INC_DLS #define _INC_DLS /* Layout of an instrument collection: RIFF [] 'DLS ' [colh,INSTLIST,WAVEPOOL,INFOLIST] INSTLIST LIST [] 'lins' LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST] LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST] LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST] RGNLIST LIST [] 'lrgn' LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] ARTLIST LIST [] 'lart' 'art1' level 1 Articulation connection graph 'art2' level 2 Articulation connection graph '3rd1' Possible 3rd party articulation structure 1 '3rd2' Possible 3rd party articulation structure 2 .... and so on WAVEPOOL ptbl [] [pool table] LIST [] 'wvpl' [path], [path], LIST [] 'wave',RIFFWAVE LIST [] 'wave',RIFFWAVE LIST [] 'wave',RIFFWAVE LIST [] 'wave',RIFFWAVE LIST [] 'wave',RIFFWAVE INFOLIST LIST [] 'INFO' 'icmt' 'One of those crazy comments.' 'icop' 'Copyright (C) 1996 Sonic Foundry' */ /* FOURCC's used in the DLS file */ /* shree */ //#define FAR /* shree #define FOURCC_DLS mmioFOURCC('D','L','S',' ') #define FOURCC_COLH mmioFOURCC('c','o','l','h') #define FOURCC_WVPL mmioFOURCC('w','v','p','l') #define FOURCC_PTBL mmioFOURCC('p','t','b','l') #define FOURCC_PATH mmioFOURCC('p','a','t','h') #define FOURCC_wave mmioFOURCC('w','a','v','e') #define FOURCC_LINS mmioFOURCC('l','i','n','s') #define FOURCC_INS mmioFOURCC('i','n','s',' ') #define FOURCC_INSH mmioFOURCC('i','n','s','h') #define FOURCC_LRGN mmioFOURCC('l','r','g','n') #define FOURCC_RGN mmioFOURCC('r','g','n',' ') #define FOURCC_RGNH mmioFOURCC('r','g','n','h') #define FOURCC_LART mmioFOURCC('l','a','r','t') #define FOURCC_ART1 mmioFOURCC('a','r','t','1') #define FOURCC_WLNK mmioFOURCC('w','l','n','k') #define FOURCC_WSMP mmioFOURCC('w','s','m','p') #define FOURCC_VERS mmioFOURCC('v','e','r','s') */ /* Articulation connection graph definitions */ /* Generic Sources */ #define CONN_SRC_NONE 0x0000 #define CONN_SRC_LFO 0x0001 #define CONN_SRC_KEYONVELOCITY 0x0002 #define CONN_SRC_KEYNUMBER 0x0003 #define CONN_SRC_EG1 0x0004 #define CONN_SRC_EG2 0x0005 #define CONN_SRC_PITCHWHEEL 0x0006 /* Midi Controllers 0-127 */ #define CONN_SRC_CC1 0x0081 #define CONN_SRC_CC7 0x0087 #define CONN_SRC_CC10 0x008a #define CONN_SRC_CC11 0x008b /* Registered Parameter Numbers */ #define CONN_SRC_RPN0 0x0100 #define CONN_SRC_RPN1 0x0101 #define CONN_SRC_RPN2 0x0102 /* Generic Destinations */ #define CONN_DST_NONE 0x0000 #define CONN_DST_ATTENUATION 0x0001 #define CONN_DST_RESERVED 0x0002 #define CONN_DST_PITCH 0x0003 #define CONN_DST_PAN 0x0004 /* LFO Destinations */ #define CONN_DST_LFO_FREQUENCY 0x0104 #define CONN_DST_LFO_STARTDELAY 0x0105 /* EG1 Destinations */ #define CONN_DST_EG1_ATTACKTIME 0x0206 #define CONN_DST_EG1_DECAYTIME 0x0207 #define CONN_DST_EG1_RESERVED 0x0208 #define CONN_DST_EG1_RELEASETIME 0x0209 #define CONN_DST_EG1_SUSTAINLEVEL 0x020a /* EG2 Destinations */ #define CONN_DST_EG2_ATTACKTIME 0x030a #define CONN_DST_EG2_DECAYTIME 0x030b #define CONN_DST_EG2_RESERVED 0x030c #define CONN_DST_EG2_RELEASETIME 0x030d #define CONN_DST_EG2_SUSTAINLEVEL 0x030e #define CONN_TRN_NONE 0x0000 #define CONN_TRN_CONCAVE 0x0001 typedef struct _DLSVERSION { DWORD dwVersionMS; DWORD dwVersionLS; }DLSVERSION, FAR *LPDLSVERSION; typedef struct _CONNECTION { USHORT usSource; USHORT usControl; USHORT usDestination; USHORT usTransform; LONG lScale; }CONNECTION, FAR *LPCONNECTION; /* Level 1 Articulation Data */ typedef struct _CONNECTIONLIST { ULONG cbSize; /* size of the connection list structure */ ULONG cConnections; /* count of connections in the list */ } CONNECTIONLIST, FAR *LPCONNECTIONLIST; /* Generic type defines for regions and instruments */ typedef struct _RGNRANGE { USHORT usLow; USHORT usHigh; }RGNRANGE, FAR * LPRGNRANGE; #define F_INSTRUMENT_DRUMS 0x80000000 typedef struct _MIDILOCALE { ULONG ulBank; ULONG ulInstrument; }MIDILOCALE, FAR *LPMIDILOCALE; /* Header structures found in an DLS file for collection, instruments, and regions. */ #define F_RGN_OPTION_SELFNONEXCLUSIVE 0x0001 typedef struct _RGNHEADER { RGNRANGE RangeKey; /* Key range */ RGNRANGE RangeVelocity; /* Velocity Range */ USHORT fusOptions; /* Synthesis options for this range */ USHORT usKeyGroup; /* Key grouping for non simultaneous play 0 = no group, 1 up is group for Level 1 only groups 1-15 are allowed */ }RGNHEADER, FAR *LPRGNHEADER; typedef struct _INSTHEADER { ULONG cRegions; /* Count of regions in this instrument */ MIDILOCALE Locale; /* Intended MIDI locale of this instrument */ }INSTHEADER, FAR *LPINSTHEADER; typedef struct _DLSHEADER { ULONG cInstruments; /* Count of instruments in the collection */ }DLSHEADER, FAR *LPDLSHEADER; /* definitions for the Wave link structure */ /***** For level 1 only WAVELINK_CHANNEL_MONO is valid **** ulChannel allows for up to 32 channels of audio with each bit position specifiying a channel of playback */ #define WAVELINK_CHANNEL_LEFT 0x0001 #define WAVELINK_CHANNEL_RIGHT 0x0002 #define F_WAVELINK_PHASE_MASTER 0x0001 typedef struct _WAVELINK { /* any paths or links are stored right after struct */ USHORT fusOptions; /* options flags for this wave */ USHORT usPhaseGroup; /* Phase grouping for locking channels */ ULONG ulChannel; /* channel placement */ ULONG ulTableIndex; /* index into the wave pool table, 0 based */ }WAVELINK, FAR *LPWAVELINK; #define POOL_CUE_NULL 0xffffffff typedef struct _POOLCUE { // ULONG ulEntryIndex; /* Index entry in the list */ ULONG ulOffset; /* Offset to the entry in the list */ }POOLCUE, FAR *LPPOOLCUE; typedef struct _POOLTABLE { ULONG cbSize; /* size of the pool table structure */ ULONG cCues; /* count of cues in the list */ } POOLTABLE, FAR *LPPOOLTABLE; /* Structures for the "wsmp" chunk */ #define F_WSMP_NO_TRUNCATION 0x0001 #define F_WSMP_NO_COMPRESSION 0x0002 typedef struct _rwsmp { ULONG cbSize; USHORT usUnityNote; /* MIDI Unity Playback Note */ SHORT sFineTune; /* Fine Tune in log tuning */ LONG lAttenuation; /* Overall Attenuation to be applied to data */ ULONG fulOptions; /* Flag options */ ULONG cSampleLoops; /* Count of Sample loops, 0 loops is one shot */ } WSMPL, FAR *LPWSMPL; /* This loop type is a normal forward playing loop which is continually played until the envelope reaches an off threshold in the release portion of the volume envelope */ #define WLOOP_TYPE_FORWARD 0 typedef struct _rloop { ULONG cbSize; ULONG ulType; /* Loop Type */ ULONG ulStart; /* Start of loop in samples */ ULONG ulLength; /* Length of loop in samples */ } WLOOP, FAR *LPWLOOP; #endif /* _INC_DLS */