1 /* 2 3 dls.h 4 5 Description: 6 7 Interface defines and structures for the Instrument Collection Form 8 RIFF DLS. 9 10 Written by Sonic Foundry 1996. Released for public use. 11 12 */ 13 14 #ifndef _INC_DLS 15 #define _INC_DLS 16 17 /* 18 19 Layout of an instrument collection: 20 21 22 RIFF [] 'DLS ' [colh,INSTLIST,WAVEPOOL,INFOLIST] 23 24 INSTLIST 25 LIST [] 'lins' 26 LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST] 27 LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST] 28 LIST [] 'ins ' [insh,RGNLIST,ARTLIST,INFOLIST] 29 30 RGNLIST 31 LIST [] 'lrgn' 32 LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] 33 LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] 34 LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] 35 36 ARTLIST 37 LIST [] 'lart' 38 'art1' level 1 Articulation connection graph 39 'art2' level 2 Articulation connection graph 40 '3rd1' Possible 3rd party articulation structure 1 41 '3rd2' Possible 3rd party articulation structure 2 .... and so on 42 43 WAVEPOOL 44 ptbl [] [pool table] 45 LIST [] 'wvpl' 46 [path], 47 [path], 48 LIST [] 'wave',RIFFWAVE 49 LIST [] 'wave',RIFFWAVE 50 LIST [] 'wave',RIFFWAVE 51 LIST [] 'wave',RIFFWAVE 52 LIST [] 'wave',RIFFWAVE 53 54 INFOLIST 55 LIST [] 'INFO' 56 'icmt' 'One of those crazy comments.' 57 'icop' 'Copyright (C) 1996 Sonic Foundry' 58 59 */ 60 61 62 /* 63 FOURCC's used in the DLS file 64 */ 65 /* shree */ 66 //#define FAR 67 68 /* shree 69 70 #define FOURCC_DLS mmioFOURCC('D','L','S',' ') 71 #define FOURCC_COLH mmioFOURCC('c','o','l','h') 72 #define FOURCC_WVPL mmioFOURCC('w','v','p','l') 73 #define FOURCC_PTBL mmioFOURCC('p','t','b','l') 74 #define FOURCC_PATH mmioFOURCC('p','a','t','h') 75 #define FOURCC_wave mmioFOURCC('w','a','v','e') 76 #define FOURCC_LINS mmioFOURCC('l','i','n','s') 77 #define FOURCC_INS mmioFOURCC('i','n','s',' ') 78 #define FOURCC_INSH mmioFOURCC('i','n','s','h') 79 #define FOURCC_LRGN mmioFOURCC('l','r','g','n') 80 #define FOURCC_RGN mmioFOURCC('r','g','n',' ') 81 #define FOURCC_RGNH mmioFOURCC('r','g','n','h') 82 #define FOURCC_LART mmioFOURCC('l','a','r','t') 83 #define FOURCC_ART1 mmioFOURCC('a','r','t','1') 84 #define FOURCC_WLNK mmioFOURCC('w','l','n','k') 85 #define FOURCC_WSMP mmioFOURCC('w','s','m','p') 86 #define FOURCC_VERS mmioFOURCC('v','e','r','s') 87 */ 88 /* 89 Articulation connection graph definitions 90 */ 91 92 /* Generic Sources */ 93 #define CONN_SRC_NONE 0x0000 94 #define CONN_SRC_LFO 0x0001 95 #define CONN_SRC_KEYONVELOCITY 0x0002 96 #define CONN_SRC_KEYNUMBER 0x0003 97 #define CONN_SRC_EG1 0x0004 98 #define CONN_SRC_EG2 0x0005 99 #define CONN_SRC_PITCHWHEEL 0x0006 100 101 /* Midi Controllers 0-127 */ 102 #define CONN_SRC_CC1 0x0081 103 #define CONN_SRC_CC7 0x0087 104 #define CONN_SRC_CC10 0x008a 105 #define CONN_SRC_CC11 0x008b 106 107 /* Registered Parameter Numbers */ 108 #define CONN_SRC_RPN0 0x0100 109 #define CONN_SRC_RPN1 0x0101 110 #define CONN_SRC_RPN2 0x0102 111 112 /* Generic Destinations */ 113 #define CONN_DST_NONE 0x0000 114 #define CONN_DST_ATTENUATION 0x0001 115 #define CONN_DST_RESERVED 0x0002 116 #define CONN_DST_PITCH 0x0003 117 #define CONN_DST_PAN 0x0004 118 119 /* LFO Destinations */ 120 #define CONN_DST_LFO_FREQUENCY 0x0104 121 #define CONN_DST_LFO_STARTDELAY 0x0105 122 123 /* EG1 Destinations */ 124 #define CONN_DST_EG1_ATTACKTIME 0x0206 125 #define CONN_DST_EG1_DECAYTIME 0x0207 126 #define CONN_DST_EG1_RESERVED 0x0208 127 #define CONN_DST_EG1_RELEASETIME 0x0209 128 #define CONN_DST_EG1_SUSTAINLEVEL 0x020a 129 130 /* EG2 Destinations */ 131 #define CONN_DST_EG2_ATTACKTIME 0x030a 132 #define CONN_DST_EG2_DECAYTIME 0x030b 133 #define CONN_DST_EG2_RESERVED 0x030c 134 #define CONN_DST_EG2_RELEASETIME 0x030d 135 #define CONN_DST_EG2_SUSTAINLEVEL 0x030e 136 137 #define CONN_TRN_NONE 0x0000 138 #define CONN_TRN_CONCAVE 0x0001 139 140 typedef struct _DLSVERSION { 141 DWORD dwVersionMS; 142 DWORD dwVersionLS; 143 }DLSVERSION, FAR *LPDLSVERSION; 144 145 146 typedef struct _CONNECTION { 147 USHORT usSource; 148 USHORT usControl; 149 USHORT usDestination; 150 USHORT usTransform; 151 LONG lScale; 152 }CONNECTION, FAR *LPCONNECTION; 153 154 155 /* Level 1 Articulation Data */ 156 157 typedef struct _CONNECTIONLIST { 158 ULONG cbSize; /* size of the connection list structure */ 159 ULONG cConnections; /* count of connections in the list */ 160 } CONNECTIONLIST, FAR *LPCONNECTIONLIST; 161 162 163 164 /* 165 Generic type defines for regions and instruments 166 */ 167 168 typedef struct _RGNRANGE { 169 USHORT usLow; 170 USHORT usHigh; 171 }RGNRANGE, FAR * LPRGNRANGE; 172 173 #define F_INSTRUMENT_DRUMS 0x80000000 174 175 typedef struct _MIDILOCALE { 176 ULONG ulBank; 177 ULONG ulInstrument; 178 }MIDILOCALE, FAR *LPMIDILOCALE; 179 180 /* 181 Header structures found in an DLS file for collection, instruments, and 182 regions. 183 */ 184 185 #define F_RGN_OPTION_SELFNONEXCLUSIVE 0x0001 186 187 typedef struct _RGNHEADER { 188 RGNRANGE RangeKey; /* Key range */ 189 RGNRANGE RangeVelocity; /* Velocity Range */ 190 USHORT fusOptions; /* Synthesis options for this range */ 191 USHORT usKeyGroup; /* Key grouping for non simultaneous play 192 0 = no group, 1 up is group 193 for Level 1 only groups 1-15 are allowed */ 194 }RGNHEADER, FAR *LPRGNHEADER; 195 196 typedef struct _INSTHEADER { 197 ULONG cRegions; /* Count of regions in this instrument */ 198 MIDILOCALE Locale; /* Intended MIDI locale of this instrument */ 199 }INSTHEADER, FAR *LPINSTHEADER; 200 201 typedef struct _DLSHEADER { 202 ULONG cInstruments; /* Count of instruments in the collection */ 203 }DLSHEADER, FAR *LPDLSHEADER; 204 205 /* 206 definitions for the Wave link structure 207 */ 208 209 /***** For level 1 only WAVELINK_CHANNEL_MONO is valid **** 210 ulChannel allows for up to 32 channels of audio with each bit position 211 specifiying a channel of playback */ 212 213 #define WAVELINK_CHANNEL_LEFT 0x0001 214 #define WAVELINK_CHANNEL_RIGHT 0x0002 215 216 #define F_WAVELINK_PHASE_MASTER 0x0001 217 218 typedef struct _WAVELINK { /* any paths or links are stored right after struct */ 219 USHORT fusOptions; /* options flags for this wave */ 220 USHORT usPhaseGroup; /* Phase grouping for locking channels */ 221 ULONG ulChannel; /* channel placement */ 222 ULONG ulTableIndex; /* index into the wave pool table, 0 based */ 223 }WAVELINK, FAR *LPWAVELINK; 224 225 #define POOL_CUE_NULL 0xffffffff 226 227 typedef struct _POOLCUE { 228 // ULONG ulEntryIndex; /* Index entry in the list */ 229 ULONG ulOffset; /* Offset to the entry in the list */ 230 }POOLCUE, FAR *LPPOOLCUE; 231 232 typedef struct _POOLTABLE { 233 ULONG cbSize; /* size of the pool table structure */ 234 ULONG cCues; /* count of cues in the list */ 235 } POOLTABLE, FAR *LPPOOLTABLE; 236 237 /* 238 Structures for the "wsmp" chunk 239 */ 240 241 #define F_WSMP_NO_TRUNCATION 0x0001 242 #define F_WSMP_NO_COMPRESSION 0x0002 243 244 245 typedef struct _rwsmp { 246 ULONG cbSize; 247 USHORT usUnityNote; /* MIDI Unity Playback Note */ 248 SHORT sFineTune; /* Fine Tune in log tuning */ 249 LONG lAttenuation; /* Overall Attenuation to be applied to data */ 250 ULONG fulOptions; /* Flag options */ 251 ULONG cSampleLoops; /* Count of Sample loops, 0 loops is one shot */ 252 } WSMPL, FAR *LPWSMPL; 253 254 255 /* This loop type is a normal forward playing loop which is continually 256 played until the envelope reaches an off threshold in the release 257 portion of the volume envelope */ 258 259 #define WLOOP_TYPE_FORWARD 0 260 261 typedef struct _rloop { 262 ULONG cbSize; 263 ULONG ulType; /* Loop Type */ 264 ULONG ulStart; /* Start of loop in samples */ 265 ULONG ulLength; /* Length of loop in samples */ 266 } WLOOP, FAR *LPWLOOP; 267 268 #endif /* _INC_DLS */ 269