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