Mercurial > SDL_sound_CoreAudio
comparison decoders/timidity/dls1.h @ 455:cbc2a4ffeeec
* Added support for loading DLS format instruments:
Timidity_LoadDLS(), Timidity_FreeDLS(), Timidity_LoadDLSSong()
* Added Timidity_Init_NoConfig()
author | hercules |
---|---|
date | Fri, 26 Sep 2003 20:51:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
454:6bd7ca7d218b | 455:cbc2a4ffeeec |
---|---|
1 /*==========================================================================; | |
2 // | |
3 // dls1.h | |
4 // | |
5 // | |
6 // Description: | |
7 // | |
8 // Interface defines and structures for the Instrument Collection Form | |
9 // RIFF DLS. | |
10 // | |
11 // | |
12 // Written by Sonic Foundry 1996. Released for public use. | |
13 // | |
14 //=========================================================================*/ | |
15 | |
16 #ifndef _INC_DLS1 | |
17 #define _INC_DLS1 | |
18 | |
19 /*////////////////////////////////////////////////////////////////////////// | |
20 // | |
21 // | |
22 // Layout of an instrument collection: | |
23 // | |
24 // | |
25 // RIFF [] 'DLS ' [dlid,colh,INSTLIST,WAVEPOOL,INFOLIST] | |
26 // | |
27 // INSTLIST | |
28 // LIST [] 'lins' | |
29 // LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST] | |
30 // LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST] | |
31 // LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST] | |
32 // | |
33 // RGNLIST | |
34 // LIST [] 'lrgn' | |
35 // LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] | |
36 // LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] | |
37 // LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST] | |
38 // | |
39 // ARTLIST | |
40 // LIST [] 'lart' | |
41 // 'art1' level 1 Articulation connection graph | |
42 // 'art2' level 2 Articulation connection graph | |
43 // '3rd1' Possible 3rd party articulation structure 1 | |
44 // '3rd2' Possible 3rd party articulation structure 2 .... and so on | |
45 // | |
46 // WAVEPOOL | |
47 // ptbl [] [pool table] | |
48 // LIST [] 'wvpl' | |
49 // [path], | |
50 // [path], | |
51 // LIST [] 'wave' [dlid,RIFFWAVE] | |
52 // LIST [] 'wave' [dlid,RIFFWAVE] | |
53 // LIST [] 'wave' [dlid,RIFFWAVE] | |
54 // LIST [] 'wave' [dlid,RIFFWAVE] | |
55 // LIST [] 'wave' [dlid,RIFFWAVE] | |
56 // | |
57 // INFOLIST | |
58 // LIST [] 'INFO' | |
59 // 'icmt' 'One of those crazy comments.' | |
60 // 'icop' 'Copyright (C) 1996 Sonic Foundry' | |
61 // | |
62 /////////////////////////////////////////////////////////////////////////*/ | |
63 | |
64 | |
65 /*///////////////////////////////////////////////////////////////////////// | |
66 // FOURCC's used in the DLS file | |
67 /////////////////////////////////////////////////////////////////////////*/ | |
68 | |
69 #define FOURCC_DLS mmioFOURCC('D','L','S',' ') | |
70 #define FOURCC_DLID mmioFOURCC('d','l','i','d') | |
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 /* Generic Destinations */ | |
108 #define CONN_DST_NONE 0x0000 | |
109 #define CONN_DST_ATTENUATION 0x0001 | |
110 #define CONN_DST_PITCH 0x0003 | |
111 #define CONN_DST_PAN 0x0004 | |
112 | |
113 /* LFO Destinations */ | |
114 #define CONN_DST_LFO_FREQUENCY 0x0104 | |
115 #define CONN_DST_LFO_STARTDELAY 0x0105 | |
116 | |
117 /* EG1 Destinations */ | |
118 #define CONN_DST_EG1_ATTACKTIME 0x0206 | |
119 #define CONN_DST_EG1_DECAYTIME 0x0207 | |
120 #define CONN_DST_EG1_RELEASETIME 0x0209 | |
121 #define CONN_DST_EG1_SUSTAINLEVEL 0x020a | |
122 | |
123 /* EG2 Destinations */ | |
124 #define CONN_DST_EG2_ATTACKTIME 0x030a | |
125 #define CONN_DST_EG2_DECAYTIME 0x030b | |
126 #define CONN_DST_EG2_RELEASETIME 0x030d | |
127 #define CONN_DST_EG2_SUSTAINLEVEL 0x030e | |
128 | |
129 #define CONN_TRN_NONE 0x0000 | |
130 #define CONN_TRN_CONCAVE 0x0001 | |
131 | |
132 typedef struct _DLSID { | |
133 ULONG ulData1; | |
134 USHORT usData2; | |
135 USHORT usData3; | |
136 BYTE abData4[8]; | |
137 } DLSID, FAR *LPDLSID; | |
138 | |
139 typedef struct _DLSVERSION { | |
140 DWORD dwVersionMS; | |
141 DWORD dwVersionLS; | |
142 } DLSVERSION, FAR *LPDLSVERSION; | |
143 | |
144 | |
145 typedef struct _CONNECTION { | |
146 USHORT usSource; | |
147 USHORT usControl; | |
148 USHORT usDestination; | |
149 USHORT usTransform; | |
150 LONG lScale; | |
151 } CONNECTION, FAR *LPCONNECTION; | |
152 | |
153 | |
154 /* Level 1 Articulation Data */ | |
155 | |
156 typedef struct _CONNECTIONLIST { | |
157 ULONG cbSize; /* size of the connection list structure */ | |
158 ULONG cConnections; /* count of connections in the list */ | |
159 } CONNECTIONLIST, FAR *LPCONNECTIONLIST; | |
160 | |
161 | |
162 | |
163 /*///////////////////////////////////////////////////////////////////////// | |
164 // Generic type defines for regions and instruments | |
165 /////////////////////////////////////////////////////////////////////////*/ | |
166 | |
167 typedef struct _RGNRANGE { | |
168 USHORT usLow; | |
169 USHORT usHigh; | |
170 } RGNRANGE, FAR * LPRGNRANGE; | |
171 | |
172 #define F_INSTRUMENT_DRUMS 0x80000000 | |
173 | |
174 typedef struct _MIDILOCALE { | |
175 ULONG ulBank; | |
176 ULONG ulInstrument; | |
177 } MIDILOCALE, FAR *LPMIDILOCALE; | |
178 | |
179 /*///////////////////////////////////////////////////////////////////////// | |
180 // Header structures found in an DLS file for collection, instruments, and | |
181 // regions. | |
182 /////////////////////////////////////////////////////////////////////////*/ | |
183 | |
184 #define F_RGN_OPTION_SELFNONEXCLUSIVE 0x0001 | |
185 | |
186 typedef struct _RGNHEADER { | |
187 RGNRANGE RangeKey; /* Key range */ | |
188 RGNRANGE RangeVelocity; /* Velocity Range */ | |
189 USHORT fusOptions; /* Synthesis options for this range */ | |
190 USHORT usKeyGroup; /* Key grouping for non simultaneous play */ | |
191 /* 0 = no group, 1 up is group */ | |
192 /* for Level 1 only groups 1-15 are allowed */ | |
193 } RGNHEADER, FAR *LPRGNHEADER; | |
194 | |
195 typedef struct _INSTHEADER { | |
196 ULONG cRegions; /* Count of regions in this instrument */ | |
197 MIDILOCALE Locale; /* Intended MIDI locale of this instrument */ | |
198 } INSTHEADER, FAR *LPINSTHEADER; | |
199 | |
200 typedef struct _DLSHEADER { | |
201 ULONG cInstruments; /* Count of instruments in the collection */ | |
202 } DLSHEADER, FAR *LPDLSHEADER; | |
203 | |
204 /*//////////////////////////////////////////////////////////////////////////// | |
205 // definitions for the Wave link structure | |
206 ////////////////////////////////////////////////////////////////////////////*/ | |
207 | |
208 /* **** For level 1 only WAVELINK_CHANNEL_MONO is valid **** */ | |
209 /* ulChannel allows for up to 32 channels of audio with each bit position */ | |
210 /* specifiying a channel of playback */ | |
211 | |
212 #define WAVELINK_CHANNEL_LEFT 0x0001l | |
213 #define WAVELINK_CHANNEL_RIGHT 0x0002l | |
214 | |
215 #define F_WAVELINK_PHASE_MASTER 0x0001 | |
216 | |
217 typedef struct _WAVELINK { /* any paths or links are stored right after struct */ | |
218 USHORT fusOptions; /* options flags for this wave */ | |
219 USHORT usPhaseGroup; /* Phase grouping for locking channels */ | |
220 ULONG ulChannel; /* channel placement */ | |
221 ULONG ulTableIndex; /* index into the wave pool table, 0 based */ | |
222 } WAVELINK, FAR *LPWAVELINK; | |
223 | |
224 #define POOL_CUE_NULL 0xffffffffl | |
225 | |
226 typedef struct _POOLCUE { | |
227 ULONG ulOffset; /* Offset to the entry in the list */ | |
228 } POOLCUE, FAR *LPPOOLCUE; | |
229 | |
230 typedef struct _POOLTABLE { | |
231 ULONG cbSize; /* size of the pool table structure */ | |
232 ULONG cCues; /* count of cues in the list */ | |
233 } POOLTABLE, FAR *LPPOOLTABLE; | |
234 | |
235 /*//////////////////////////////////////////////////////////////////////////// | |
236 // Structures for the "wsmp" chunk | |
237 ////////////////////////////////////////////////////////////////////////////*/ | |
238 | |
239 #define F_WSMP_NO_TRUNCATION 0x0001l | |
240 #define F_WSMP_NO_COMPRESSION 0x0002l | |
241 | |
242 | |
243 typedef struct _rwsmp { | |
244 ULONG cbSize; | |
245 USHORT usUnityNote; /* MIDI Unity Playback Note */ | |
246 SHORT sFineTune; /* Fine Tune in log tuning */ | |
247 LONG lAttenuation; /* Overall Attenuation to be applied to data */ | |
248 ULONG fulOptions; /* Flag options */ | |
249 ULONG cSampleLoops; /* Count of Sample loops, 0 loops is one shot */ | |
250 } WSMPL, FAR *LPWSMPL; | |
251 | |
252 | |
253 /* This loop type is a normal forward playing loop which is continually */ | |
254 /* played until the envelope reaches an off threshold in the release */ | |
255 /* portion of the volume envelope */ | |
256 | |
257 #define WLOOP_TYPE_FORWARD 0 | |
258 | |
259 typedef struct _rloop { | |
260 ULONG cbSize; | |
261 ULONG ulType; /* Loop Type */ | |
262 ULONG ulStart; /* Start of loop in samples */ | |
263 ULONG ulLength; /* Length of loop in samples */ | |
264 } WLOOP, FAR *LPWLOOP; | |
265 | |
266 #endif /*_INC_DLS1 */ |