Mercurial > mm7
comparison lib/legacy_dx/dmusicf.h @ 0:9c0607679772
init
author | Ritor1 |
---|---|
date | Sat, 12 Jan 2013 09:45:18 +0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:9c0607679772 |
---|---|
1 /************************************************************************ | |
2 * * | |
3 * dmusicf.h -- This module defines the DirectMusic file formats * | |
4 * * | |
5 * Copyright (c) Microsoft Corporation. All rights reserved. * | |
6 * * | |
7 ************************************************************************/ | |
8 | |
9 #ifndef _DMUSICF_ | |
10 #define _DMUSICF_ | |
11 | |
12 | |
13 #include <windows.h> | |
14 | |
15 #define COM_NO_WINDOWS_H | |
16 #include <objbase.h> | |
17 | |
18 #include <mmsystem.h> | |
19 | |
20 #include <pshpack8.h> | |
21 | |
22 #ifdef __cplusplus | |
23 extern "C" { | |
24 #endif | |
25 | |
26 interface IDirectMusicCollection; | |
27 #ifndef __cplusplus | |
28 typedef interface IDirectMusicCollection IDirectMusicCollection; | |
29 #endif | |
30 | |
31 /* Common chunks */ | |
32 | |
33 #define DMUS_FOURCC_GUID_CHUNK mmioFOURCC('g','u','i','d') | |
34 #define DMUS_FOURCC_INFO_LIST mmioFOURCC('I','N','F','O') | |
35 #define DMUS_FOURCC_UNFO_LIST mmioFOURCC('U','N','F','O') | |
36 #define DMUS_FOURCC_UNAM_CHUNK mmioFOURCC('U','N','A','M') | |
37 #define DMUS_FOURCC_UART_CHUNK mmioFOURCC('U','A','R','T') | |
38 #define DMUS_FOURCC_UCOP_CHUNK mmioFOURCC('U','C','O','P') | |
39 #define DMUS_FOURCC_USBJ_CHUNK mmioFOURCC('U','S','B','J') | |
40 #define DMUS_FOURCC_UCMT_CHUNK mmioFOURCC('U','C','M','T') | |
41 #define DMUS_FOURCC_CATEGORY_CHUNK mmioFOURCC('c','a','t','g') | |
42 #define DMUS_FOURCC_VERSION_CHUNK mmioFOURCC('v','e','r','s') | |
43 | |
44 /* The following structures are used by the Tracks, and are the packed structures */ | |
45 /* that are passed to the Tracks inside the IStream. */ | |
46 | |
47 | |
48 typedef struct _DMUS_IO_SEQ_ITEM | |
49 { | |
50 MUSIC_TIME mtTime; | |
51 MUSIC_TIME mtDuration; | |
52 DWORD dwPChannel; | |
53 short nOffset; | |
54 BYTE bStatus; | |
55 BYTE bByte1; | |
56 BYTE bByte2; | |
57 } DMUS_IO_SEQ_ITEM; | |
58 | |
59 | |
60 typedef struct _DMUS_IO_CURVE_ITEM | |
61 { | |
62 MUSIC_TIME mtStart; | |
63 MUSIC_TIME mtDuration; | |
64 MUSIC_TIME mtResetDuration; | |
65 DWORD dwPChannel; | |
66 short nOffset; | |
67 short nStartValue; | |
68 short nEndValue; | |
69 short nResetValue; | |
70 BYTE bType; | |
71 BYTE bCurveShape; | |
72 BYTE bCCData; | |
73 BYTE bFlags; | |
74 /* Following was added for DirectX8. */ | |
75 WORD wParamType; /* RPN or NRPN parameter number. */ | |
76 WORD wMergeIndex; /* Allows multiple parameters to be merged (pitchbend, volume, and expression.) */ | |
77 } DMUS_IO_CURVE_ITEM; | |
78 | |
79 | |
80 typedef struct _DMUS_IO_TEMPO_ITEM | |
81 { | |
82 MUSIC_TIME lTime; | |
83 double dblTempo; | |
84 } DMUS_IO_TEMPO_ITEM; | |
85 | |
86 | |
87 typedef struct _DMUS_IO_SYSEX_ITEM | |
88 { | |
89 MUSIC_TIME mtTime; | |
90 DWORD dwPChannel; | |
91 DWORD dwSysExLength; | |
92 } DMUS_IO_SYSEX_ITEM; | |
93 | |
94 typedef DMUS_CHORD_KEY DMUS_CHORD_PARAM; /* DMUS_CHORD_KEY defined in dmusici.h */ | |
95 | |
96 typedef struct _DMUS_RHYTHM_PARAM | |
97 { | |
98 DMUS_TIMESIGNATURE TimeSig; | |
99 DWORD dwRhythmPattern; | |
100 } DMUS_RHYTHM_PARAM; | |
101 | |
102 typedef struct _DMUS_TEMPO_PARAM | |
103 { | |
104 MUSIC_TIME mtTime; | |
105 double dblTempo; | |
106 } DMUS_TEMPO_PARAM; | |
107 | |
108 | |
109 typedef struct _DMUS_MUTE_PARAM | |
110 { | |
111 DWORD dwPChannel; | |
112 DWORD dwPChannelMap; | |
113 BOOL fMute; | |
114 } DMUS_MUTE_PARAM; | |
115 | |
116 /* Style chunks */ | |
117 | |
118 #define DMUS_FOURCC_STYLE_FORM mmioFOURCC('D','M','S','T') | |
119 #define DMUS_FOURCC_STYLE_CHUNK mmioFOURCC('s','t','y','h') | |
120 #define DMUS_FOURCC_PART_LIST mmioFOURCC('p','a','r','t') | |
121 #define DMUS_FOURCC_PART_CHUNK mmioFOURCC('p','r','t','h') | |
122 #define DMUS_FOURCC_NOTE_CHUNK mmioFOURCC('n','o','t','e') | |
123 #define DMUS_FOURCC_CURVE_CHUNK mmioFOURCC('c','r','v','e') | |
124 #define DMUS_FOURCC_MARKER_CHUNK mmioFOURCC('m','r','k','r') | |
125 #define DMUS_FOURCC_RESOLUTION_CHUNK mmioFOURCC('r','s','l','n') | |
126 #define DMUS_FOURCC_ANTICIPATION_CHUNK mmioFOURCC('a','n','p','n') | |
127 #define DMUS_FOURCC_PATTERN_LIST mmioFOURCC('p','t','t','n') | |
128 #define DMUS_FOURCC_PATTERN_CHUNK mmioFOURCC('p','t','n','h') | |
129 #define DMUS_FOURCC_RHYTHM_CHUNK mmioFOURCC('r','h','t','m') | |
130 #define DMUS_FOURCC_PARTREF_LIST mmioFOURCC('p','r','e','f') | |
131 #define DMUS_FOURCC_PARTREF_CHUNK mmioFOURCC('p','r','f','c') | |
132 #define DMUS_FOURCC_STYLE_PERS_REF_LIST mmioFOURCC('p','r','r','f') | |
133 #define DMUS_FOURCC_MOTIFSETTINGS_CHUNK mmioFOURCC('m','t','f','s') | |
134 | |
135 /* Flags used by variations: these make up the DWORDs in dwVariationChoices. */ | |
136 | |
137 /* These flags determine the types of chords supported by a given variation in DirectMusic */ | |
138 /* mode. The first seven flags (bits 1-7) are set if the variation supports major chords */ | |
139 /* rooted in scale positions, so, e.g., if bits 1, 2, and 4 are set, the variation */ | |
140 /* supports major chords rooted in the tonic, second, and fourth scale positions. The */ | |
141 /* next seven flags serve the same purpose, but for minor chords, and the following seven */ | |
142 /* flags serve the same purpose for chords that are not major or minor (e.g., SUS 4 */ | |
143 /* chords). Bits 22, 23, and 24 are set if the variation supports chords rooted in the */ | |
144 /* scale, chords rooted sharp of scale tones, and chords rooted flat of scale tones, */ | |
145 /* respectively. For example, to support a C# minor chord in the scale of C Major, */ | |
146 /* bits 8 (for tonic minor) and 24 (for sharp) need to be set. Bits 25, 26, an 27 handle */ | |
147 /* chords that are triads, 6th or 7th chords, and chords with extensions, respectively. */ | |
148 /* bits 28 and 29 handle chords that are followed by tonic and dominant chords, */ | |
149 /* respectively. */ | |
150 #define DMUS_VARIATIONF_MAJOR 0x0000007F /* Seven positions in the scale - major chords. */ | |
151 #define DMUS_VARIATIONF_MINOR 0x00003F80 /* Seven positions in the scale - minor chords. */ | |
152 #define DMUS_VARIATIONF_OTHER 0x001FC000 /* Seven positions in the scale - other chords. */ | |
153 #define DMUS_VARIATIONF_ROOT_SCALE 0x00200000 /* Handles chord roots in the scale. */ | |
154 #define DMUS_VARIATIONF_ROOT_FLAT 0x00400000 /* Handles flat chord roots (based on scale notes). */ | |
155 #define DMUS_VARIATIONF_ROOT_SHARP 0x00800000 /* Handles sharp chord roots (based on scale notes). */ | |
156 #define DMUS_VARIATIONF_TYPE_TRIAD 0x01000000 /* Handles simple chords - triads. */ | |
157 #define DMUS_VARIATIONF_TYPE_6AND7 0x02000000 /* Handles simple chords - 6 and 7. */ | |
158 #define DMUS_VARIATIONF_TYPE_COMPLEX 0x04000000 /* Handles complex chords. */ | |
159 #define DMUS_VARIATIONF_DEST_TO1 0x08000000 /* Handles transitions to 1 chord. */ | |
160 #define DMUS_VARIATIONF_DEST_TO5 0x10000000 /* Handles transitions to 5 chord. */ | |
161 #define DMUS_VARIATIONF_DEST_OTHER 0x40000000 /* Handles transitions to chords other than 1 . */ | |
162 | |
163 /* legacy mask for variation modes */ | |
164 #define DMUS_VARIATIONF_MODES 0xE0000000 | |
165 /* Bits 29 and 31 of the variation flags are the Mode bits. If both are 0, it's IMA. */ | |
166 /* If bit 29 is 1, it's Direct Music. */ | |
167 #define DMUS_VARIATIONF_MODES_EX (0x20000000 | 0x80000000) | |
168 #define DMUS_VARIATIONF_IMA25_MODE 0x00000000 | |
169 #define DMUS_VARIATIONF_DMUS_MODE 0x20000000 | |
170 | |
171 /* Set this if the part uses marker events */ | |
172 #define DMUS_PARTF_USE_MARKERS 0x1 | |
173 /* Set this if the part is allowed to switch only on chord-aligned markers */ | |
174 #define DMUS_PARTF_ALIGN_CHORDS 0x2 | |
175 | |
176 /* These specify if the marker event signals whether to stop a variation or start a | |
177 pattern/variation (or both), and whether new variations must align with a chord */ | |
178 #define DMUS_MARKERF_START 0x1 | |
179 #define DMUS_MARKERF_STOP 0x2 | |
180 #define DMUS_MARKERF_CHORD_ALIGN 0x4 | |
181 | |
182 /* if this flag is set, variation settings in a playing pattern-based track's state data will | |
183 persist in the track after it stops playing */ | |
184 #define DMUS_PATTERNF_PERSIST_CONTROL 0x1 | |
185 | |
186 /* These specify possible values for DMUS_IO_PARTREF.bRandomVariation | |
187 all but DMUS_VARIATIONT_SEQUENTIAL and DMUS_VARIATIONT_RANDOM are DirectX8. */ | |
188 typedef enum enumDMUS_VARIATIONT_TYPES | |
189 { | |
190 DMUS_VARIATIONT_SEQUENTIAL = 0, /* Play sequential starting with variation 1. */ | |
191 DMUS_VARIATIONT_RANDOM = 1, /* Play randomly. */ | |
192 DMUS_VARIATIONT_RANDOM_START = 2, /* Play sequential starting with a random variation. */ | |
193 DMUS_VARIATIONT_NO_REPEAT = 3, /* Play randomly, but don't play the same variation twice. */ | |
194 DMUS_VARIATIONT_RANDOM_ROW = 4 /* Play randomly as a row: don't repeat any variation until all have played. */ | |
195 } DMUS_VARIATIONT_TYPES; | |
196 | |
197 /* These specify possible values for DMUS_IO_PATTERN.wEmbellishment (DirectX8) */ | |
198 typedef enum enumDMUS_EMBELLISHT_TYPES | |
199 { | |
200 DMUS_EMBELLISHT_NORMAL = 0, | |
201 DMUS_EMBELLISHT_FILL = 1, | |
202 DMUS_EMBELLISHT_BREAK = 2, | |
203 DMUS_EMBELLISHT_INTRO = 4, | |
204 DMUS_EMBELLISHT_END = 8, | |
205 DMUS_EMBELLISHT_MOTIF = 16, | |
206 DMUS_EMBELLISHT_ALL = 0xFFFF | |
207 } DMUS_EMBELLISHT_TYPES; | |
208 | |
209 #pragma pack(2) | |
210 | |
211 typedef struct _DMUS_IO_TIMESIG | |
212 { | |
213 /* Time signatures define how many beats per measure, which note receives */ | |
214 /* the beat, and the grid resolution. */ | |
215 BYTE bBeatsPerMeasure; /* beats per measure (top of time sig) */ | |
216 BYTE bBeat; /* what note receives the beat (bottom of time sig.) */ | |
217 /* we can assume that 0 means 256th note */ | |
218 WORD wGridsPerBeat; /* grids per beat */ | |
219 } DMUS_IO_TIMESIG; | |
220 | |
221 typedef struct _DMUS_IO_STYLE | |
222 { | |
223 DMUS_IO_TIMESIG timeSig; /* Styles have a default Time Signature */ | |
224 double dblTempo; | |
225 } DMUS_IO_STYLE; | |
226 | |
227 typedef struct _DMUS_IO_VERSION | |
228 { | |
229 DWORD dwVersionMS; /* Version # high-order 32 bits */ | |
230 DWORD dwVersionLS; /* Version # low-order 32 bits */ | |
231 } DMUS_IO_VERSION; | |
232 | |
233 typedef struct _DMUS_IO_PATTERN | |
234 { | |
235 DMUS_IO_TIMESIG timeSig; /* Patterns can override the Style's Time sig. */ | |
236 BYTE bGrooveBottom; /* bottom of groove range */ | |
237 BYTE bGrooveTop; /* top of groove range */ | |
238 WORD wEmbellishment; /* Fill, Break, Intro, End, Normal, Motif */ | |
239 WORD wNbrMeasures; /* length in measures */ | |
240 BYTE bDestGrooveBottom; /* bottom of groove range for next pattern */ | |
241 BYTE bDestGrooveTop; /* top of groove range for next pattern */ | |
242 DWORD dwFlags; /* various flags */ | |
243 } DMUS_IO_PATTERN; | |
244 | |
245 typedef struct _DMUS_IO_STYLEPART | |
246 { | |
247 DMUS_IO_TIMESIG timeSig; /* can override pattern's */ | |
248 DWORD dwVariationChoices[32]; /* MOAW choice bitfield */ | |
249 GUID guidPartID; /* identifies the part */ | |
250 WORD wNbrMeasures; /* length of the Part */ | |
251 BYTE bPlayModeFlags; /* see PLAYMODE flags */ | |
252 BYTE bInvertUpper; /* inversion upper limit */ | |
253 BYTE bInvertLower; /* inversion lower limit */ | |
254 BYTE bPad[3]; /* for DWORD alignment */ | |
255 DWORD dwFlags; /* various flags */ | |
256 } DMUS_IO_STYLEPART; | |
257 | |
258 typedef struct _DMUS_IO_PARTREF | |
259 { | |
260 GUID guidPartID; /* unique ID for matching up with parts */ | |
261 WORD wLogicalPartID; /* corresponds to port/device/midi channel OBSOLETE */ | |
262 BYTE bVariationLockID; /* parts with the same ID lock variations. */ | |
263 /* high bit is used to identify master Part */ | |
264 BYTE bSubChordLevel; /* tells which sub chord level this part wants */ | |
265 BYTE bPriority; /* 256 priority levels. Parts with lower priority */ | |
266 /* aren't played first when a device runs out of */ | |
267 /* notes */ | |
268 BYTE bRandomVariation; /* when set, matching variations play in random order */ | |
269 /* when clear, matching variations play sequentially */ | |
270 WORD wPad; /* not used */ | |
271 DWORD dwPChannel; /* replaces wLogicalPartID */ | |
272 } DMUS_IO_PARTREF; | |
273 | |
274 typedef struct _DMUS_IO_STYLENOTE | |
275 { | |
276 MUSIC_TIME mtGridStart; /* when this note occurs */ | |
277 DWORD dwVariation; /* variation bits */ | |
278 MUSIC_TIME mtDuration; /* how long this note lasts */ | |
279 short nTimeOffset; /* offset from mtGridStart */ | |
280 WORD wMusicValue; /* Position in scale. */ | |
281 BYTE bVelocity; /* Note velocity. */ | |
282 BYTE bTimeRange; /* Range to randomize start time. */ | |
283 BYTE bDurRange; /* Range to randomize duration. */ | |
284 BYTE bVelRange; /* Range to randomize velocity. */ | |
285 BYTE bInversionID; /* Identifies inversion group to which this note belongs */ | |
286 BYTE bPlayModeFlags; /* Can override part */ | |
287 /* Following exists only under DirectX8 and on */ | |
288 BYTE bNoteFlags; /* values from DMUS_NOTEF_FLAGS */ | |
289 } DMUS_IO_STYLENOTE; | |
290 | |
291 typedef struct _DMUS_IO_STYLECURVE | |
292 { | |
293 MUSIC_TIME mtGridStart; /* when this curve occurs */ | |
294 DWORD dwVariation; /* variation bits */ | |
295 MUSIC_TIME mtDuration; /* how long this curve lasts */ | |
296 MUSIC_TIME mtResetDuration;/* how long after the end of the curve to reset the curve */ | |
297 short nTimeOffset; /* offset from mtGridStart */ | |
298 short nStartValue; /* curve's start value */ | |
299 short nEndValue; /* curve's end value */ | |
300 short nResetValue; /* the value to which to reset the curve */ | |
301 BYTE bEventType; /* type of curve */ | |
302 BYTE bCurveShape; /* shape of curve */ | |
303 BYTE bCCData; /* CC# */ | |
304 BYTE bFlags; /* Bit 1=TRUE means to send nResetValue. Otherwise, don't. | |
305 Other bits are reserved. */ | |
306 /* Following was added for DirectX8. */ | |
307 WORD wParamType; /* RPN or NRPN parameter number. */ | |
308 WORD wMergeIndex; /* Allows multiple parameters to be merged (pitchbend, volume, and expression.) */ | |
309 } DMUS_IO_STYLECURVE; | |
310 | |
311 typedef struct _DMUS_IO_STYLEMARKER | |
312 { | |
313 MUSIC_TIME mtGridStart; /* when this marker occurs */ | |
314 DWORD dwVariation; /* variation bits */ | |
315 WORD wMarkerFlags; /* how the marker is used */ | |
316 } DMUS_IO_STYLEMARKER; | |
317 | |
318 typedef struct _DMUS_IO_STYLERESOLUTION | |
319 { | |
320 DWORD dwVariation; /* variation bits */ | |
321 WORD wMusicValue; /* Position in scale. */ | |
322 BYTE bInversionID; /* Identifies inversion group to which this note belongs */ | |
323 BYTE bPlayModeFlags; /* Can override part */ | |
324 } DMUS_IO_STYLERESOLUTION; | |
325 | |
326 typedef struct _DMUS_IO_STYLE_ANTICIPATION | |
327 { | |
328 MUSIC_TIME mtGridStart; /* when this anticipation occurs */ | |
329 DWORD dwVariation; /* variation bits */ | |
330 short nTimeOffset; /* offset from mtGridStart */ | |
331 BYTE bTimeRange; /* Range to randomize start time. */ | |
332 } DMUS_IO_STYLE_ANTICIPATION; | |
333 | |
334 typedef struct _DMUS_IO_MOTIFSETTINGS | |
335 { | |
336 DWORD dwRepeats; /* Number of repeats. By default, 0. */ | |
337 MUSIC_TIME mtPlayStart; /* Start of playback. By default, 0. */ | |
338 MUSIC_TIME mtLoopStart; /* Start of looping portion. By default, 0. */ | |
339 MUSIC_TIME mtLoopEnd; /* End of loop. Must be greater than mtLoopStart. Or, 0, indicating loop full motif. */ | |
340 DWORD dwResolution; /* Default resolution. */ | |
341 } DMUS_IO_MOTIFSETTINGS; | |
342 | |
343 #pragma pack() | |
344 | |
345 | |
346 /* | |
347 RIFF | |
348 ( | |
349 'DMST' // Style | |
350 <styh-ck> // Style header chunk | |
351 <guid-ck> // Every Style has a GUID | |
352 [<UNFO-list>] // Name, author, copyright info., comments | |
353 [<vers-ck>] // version chunk | |
354 <part-list>... // Array of parts in the Style, used by patterns | |
355 <pttn-list>... // Array of patterns in the Style | |
356 <DMBD-form>... // Array of bands in the Style | |
357 [<prrf-list>]...// Optional array of chord map references in the Style | |
358 ) | |
359 | |
360 // <styh-ck> | |
361 styh | |
362 ( | |
363 <DMUS_IO_STYLE> | |
364 ) | |
365 | |
366 // <guid-ck> | |
367 guid | |
368 ( | |
369 <GUID> | |
370 ) | |
371 | |
372 // <vers-ck> | |
373 vers | |
374 ( | |
375 <DMUS_IO_VERSION> | |
376 ) | |
377 | |
378 // <part-list> | |
379 LIST | |
380 ( | |
381 'part' | |
382 <prth-ck> // Part header chunk | |
383 [<UNFO-list>] // Name, author, copyright info., comments | |
384 [<note-ck>] // Optional chunk containing an array of notes in Part | |
385 [<crve-ck>] // Optional chunk containing an array of curves in Part | |
386 [<mrkr-ck>] // Optional chunk containing an array of markers in Part | |
387 [<rsln-ck>] // Optional chunk containing an array of variation resolutions in Part | |
388 [<anpn-ck>] // Optional chunk containing an array of resolution anticipations in Part | |
389 ) | |
390 | |
391 // <orth-ck> | |
392 prth | |
393 ( | |
394 <DMUS_IO_STYLEPART> | |
395 ) | |
396 | |
397 // <note-ck> | |
398 'note' | |
399 ( | |
400 // sizeof DMUS_IO_STYLENOTE:DWORD | |
401 <DMUS_IO_STYLENOTE>... | |
402 ) | |
403 | |
404 // <crve-ck> | |
405 'crve' | |
406 ( | |
407 // sizeof DMUS_IO_STYLECURVE:DWORD | |
408 <DMUS_IO_STYLECURVE>... | |
409 ) | |
410 | |
411 // <mrkr-ck> | |
412 'mrkr' | |
413 ( | |
414 // sizeof DMUS_IO_STYLEMARKER:DWORD | |
415 <DMUS_IO_STYLEMARKER>... | |
416 ) | |
417 | |
418 // <rsln-ck> | |
419 'rsln' | |
420 ( | |
421 // sizeof DMUS_IO_STYLERESOLUTION:DWORD | |
422 <DMUS_IO_STYLERESOLUTION>... | |
423 ) | |
424 | |
425 // <anpn-ck> | |
426 'anpn' | |
427 ( | |
428 // sizeof DMUS_IO_STYLE_ANTICIPATION:DWORD | |
429 <DMUS_IO_STYLE_ANTICIPATION>... | |
430 ) | |
431 | |
432 // <pttn-list> | |
433 LIST | |
434 ( | |
435 'pttn' | |
436 <ptnh-ck> // Pattern header chunk | |
437 <rhtm-ck> // Chunk containing an array of rhythms for chord matching | |
438 [<UNFO-list>] // Name, author, copyright info., comments | |
439 [<mtfs-ck>] // Motif settings chunk | |
440 [<DMBD-form>] // Optional band to be associated with the pattern (for motifs) | |
441 <pref-list>... // Array of part reference id's | |
442 ) | |
443 | |
444 // <ptnh-ck> | |
445 ptnh | |
446 ( | |
447 <DMUS_IO_PATTERN> | |
448 ) | |
449 | |
450 // <rhtm-ck> | |
451 'rhtm' | |
452 ( | |
453 // DWORD's representing rhythms for chord matching based on number | |
454 // of measures in the pattern | |
455 ) | |
456 | |
457 | |
458 // pref-list | |
459 LIST | |
460 ( | |
461 'pref' | |
462 <prfc-ck> // part ref chunk | |
463 ) | |
464 | |
465 // <prfc-ck> | |
466 prfc | |
467 ( | |
468 <DMUS_IO_PARTREF> | |
469 ) | |
470 | |
471 // <mtfs-ck> | |
472 mtfs | |
473 ( | |
474 <DMUS_IO_MOTIFSETTINGS> | |
475 ) | |
476 | |
477 // <prrf-list> | |
478 LIST | |
479 ( | |
480 'prrf' | |
481 <DMRF-list>... // Array of Chordmap references | |
482 ) | |
483 */ | |
484 | |
485 /* Pattern chunk, for use in Pattern tracks */ | |
486 | |
487 #define DMUS_FOURCC_PATTERN_FORM mmioFOURCC('D','M','P','T') | |
488 | |
489 /* | |
490 RIFF | |
491 ( | |
492 'DMPT' // Pattern | |
493 <styh-ck> // Style header chunk | |
494 <pttn-list> // The pattern, in single pattern format (includes DMUS_FOURCC_PART_LIST chunks) | |
495 ) | |
496 */ | |
497 | |
498 | |
499 /* Chord and command file formats */ | |
500 | |
501 /* These specify possible values for DMUS_IO_COMMAND.bRepeatMode (DirectX8) */ | |
502 typedef enum enumDMUS_PATTERNT_TYPES | |
503 { | |
504 DMUS_PATTERNT_RANDOM = 0, /* Play randomly. (DirectX7 behavior) */ | |
505 DMUS_PATTERNT_REPEAT = 1, /* Repeat last pattern. */ | |
506 DMUS_PATTERNT_SEQUENTIAL = 2, /* Play sequential starting with first matching pattern. */ | |
507 DMUS_PATTERNT_RANDOM_START = 3, /* Play sequential starting with a random pattern. */ | |
508 DMUS_PATTERNT_NO_REPEAT = 4, /* Play randomly, but don't play the same pattern twice. */ | |
509 DMUS_PATTERNT_RANDOM_ROW = 5 /* Play randomly as a row: don't repeat any pattern until all have played. */ | |
510 } DMUS_PATTERNT_TYPES; | |
511 | |
512 | |
513 #define DMUS_FOURCC_CHORDTRACK_LIST mmioFOURCC('c','o','r','d') | |
514 #define DMUS_FOURCC_CHORDTRACKHEADER_CHUNK mmioFOURCC('c','r','d','h') | |
515 #define DMUS_FOURCC_CHORDTRACKBODY_CHUNK mmioFOURCC('c','r','d','b') | |
516 | |
517 #define DMUS_FOURCC_COMMANDTRACK_CHUNK mmioFOURCC('c','m','n','d') | |
518 | |
519 typedef struct _DMUS_IO_CHORD | |
520 { | |
521 WCHAR wszName[16]; /* Name of the chord */ | |
522 MUSIC_TIME mtTime; /* Time of this chord */ | |
523 WORD wMeasure; /* Measure this falls on */ | |
524 BYTE bBeat; /* Beat this falls on */ | |
525 BYTE bFlags; /* Various flags */ | |
526 } DMUS_IO_CHORD; | |
527 | |
528 typedef struct _DMUS_IO_SUBCHORD | |
529 { | |
530 DWORD dwChordPattern; /* Notes in the subchord */ | |
531 DWORD dwScalePattern; /* Notes in the scale */ | |
532 DWORD dwInversionPoints; /* Where inversions can occur */ | |
533 DWORD dwLevels; /* Which levels are supported by this subchord */ | |
534 BYTE bChordRoot; /* Root of the subchord */ | |
535 BYTE bScaleRoot; /* Root of the scale */ | |
536 } DMUS_IO_SUBCHORD; | |
537 | |
538 typedef struct _DMUS_IO_COMMAND | |
539 { | |
540 MUSIC_TIME mtTime; /* Time of this command */ | |
541 WORD wMeasure; /* Measure this falls on */ | |
542 BYTE bBeat; /* Beat this falls on */ | |
543 BYTE bCommand; /* Command type (see #defines below) */ | |
544 BYTE bGrooveLevel; /* Groove level (0 if command is not a groove) */ | |
545 BYTE bGrooveRange; /* Groove range */ | |
546 BYTE bRepeatMode; /* Used to control selection of patterns with same groove level */ | |
547 } DMUS_IO_COMMAND; | |
548 | |
549 | |
550 /* | |
551 | |
552 // <cord-list> | |
553 LIST | |
554 ( | |
555 'cord' | |
556 <crdh-ck> | |
557 <crdb-ck>... // Chord body chunks | |
558 ) | |
559 | |
560 // <crdh-ck> | |
561 crdh | |
562 ( | |
563 // Scale: dword (upper 8 bits for root, lower 24 for scale) | |
564 ) | |
565 | |
566 // <crdb-ck> | |
567 crdb | |
568 ( | |
569 // sizeof DMUS_IO_CHORD:dword | |
570 <DMUS_IO_CHORD> | |
571 // # of DMUS_IO_SUBCHORDS:dword | |
572 // sizeof DMUS_IO_SUBCHORDS:dword | |
573 // a number of <DMUS_IO_SUBCHORD> | |
574 ) | |
575 | |
576 | |
577 // <cmnd-list> | |
578 'cmnd' | |
579 ( | |
580 //sizeof DMUS_IO_COMMAND: DWORD | |
581 <DMUS_IO_COMMAND>... | |
582 ) | |
583 | |
584 */ | |
585 | |
586 /* File io for DirectMusic Tool and ToolGraph objects | |
587 */ | |
588 | |
589 /* RIFF ids: */ | |
590 | |
591 #define DMUS_FOURCC_TOOLGRAPH_FORM mmioFOURCC('D','M','T','G') | |
592 #define DMUS_FOURCC_TOOL_LIST mmioFOURCC('t','o','l','l') | |
593 #define DMUS_FOURCC_TOOL_FORM mmioFOURCC('D','M','T','L') | |
594 #define DMUS_FOURCC_TOOL_CHUNK mmioFOURCC('t','o','l','h') | |
595 | |
596 /* io structures: */ | |
597 | |
598 typedef struct _DMUS_IO_TOOL_HEADER | |
599 { | |
600 GUID guidClassID; /* Class id of tool. */ | |
601 long lIndex; /* Position in graph. */ | |
602 DWORD cPChannels; /* Number of items in channels array. */ | |
603 FOURCC ckid; /* chunk ID of tool's data chunk if 0 fccType valid. */ | |
604 FOURCC fccType; /* list type if NULL ckid valid. */ | |
605 DWORD dwPChannels[1]; /* Array of PChannels, size determined by cPChannels. */ | |
606 } DMUS_IO_TOOL_HEADER; | |
607 | |
608 /* | |
609 RIFF | |
610 ( | |
611 'DMTG' // DirectMusic ToolGraph chunk | |
612 [<guid-ck>] // GUID for ToolGraph | |
613 [<vers-ck>] // Optional version info | |
614 [<UNFO-list>] // Name, author, copyright info., comments | |
615 <toll-list> // List of Tools | |
616 ) | |
617 | |
618 // <guid-ck> | |
619 'guid' | |
620 ( | |
621 <GUID> | |
622 ) | |
623 | |
624 // <vers-ck> | |
625 vers | |
626 ( | |
627 <DMUS_IO_VERSION> | |
628 ) | |
629 | |
630 // <toll-list> | |
631 LIST | |
632 ( | |
633 'toll' // Array of tools | |
634 <DMTL-form>... // Each tool is encapsulated in a RIFF chunk | |
635 ) | |
636 | |
637 // <DMTL-form> Tools are embedded in a graph. Theoretically, they can be saved as individual files too. | |
638 RIFF | |
639 ( | |
640 'DMTL' | |
641 <tolh-ck> | |
642 [<data>] // Tool data. Must be a RIFF readable chunk. | |
643 ) | |
644 | |
645 // <tolh-ck> // Tool header chunk | |
646 ( | |
647 'tolh' | |
648 <DMUS_IO_TOOL_HEADER> // Tool header | |
649 ) | |
650 */ | |
651 | |
652 /* The AudioPath file carries everything for describing a specific audio path, | |
653 including Tool Graph and Buffer Descriptor. | |
654 This can even be used for configuring a complete performance. | |
655 */ | |
656 | |
657 #define DMUS_FOURCC_AUDIOPATH_FORM mmioFOURCC('D','M','A','P') | |
658 | |
659 /* | |
660 RIFF | |
661 ( | |
662 'DMAP' // DirectMusic AudioPath chunk | |
663 [<guid-ck>] // GUID for this Audio Path configuration | |
664 [<vers-ck>] // Optional version info | |
665 [<UNFO-list>] // Name, author, copyright info., comments | |
666 [<DMTG-form>] // Optional ToolGraph | |
667 [<pcsl-list>] // Optional list of port configurations | |
668 [<dbfl-list>]...// Optional array of DirectSound buffer descriptors | |
669 ) | |
670 */ | |
671 | |
672 #define DMUS_FOURCC_PORTCONFIGS_LIST mmioFOURCC('p','c','s','l') | |
673 #define DMUS_FOURCC_PORTCONFIG_LIST mmioFOURCC('p','c','f','l') | |
674 #define DMUS_FOURCC_PORTCONFIG_ITEM mmioFOURCC('p','c','f','h') | |
675 #define DMUS_FOURCC_PORTPARAMS_ITEM mmioFOURCC('p','p','r','h') | |
676 #define DMUS_FOURCC_DSBUFFER_LIST mmioFOURCC('d','b','f','l') | |
677 #define DMUS_FOURCC_DSBUFFATTR_ITEM mmioFOURCC('d','d','a','h') | |
678 #define DMUS_FOURCC_PCHANNELS_LIST mmioFOURCC('p','c','h','l') | |
679 #define DMUS_FOURCC_PCHANNELS_ITEM mmioFOURCC('p','c','h','h') | |
680 | |
681 typedef struct _DMUS_IO_PORTCONFIG_HEADER | |
682 { | |
683 GUID guidPort; /* GUID of requested port. */ | |
684 DWORD dwPChannelBase; /* PChannel that this should start on. */ | |
685 DWORD dwPChannelCount; /* How many channels. */ | |
686 DWORD dwFlags; /* Various flags. */ | |
687 } DMUS_IO_PORTCONFIG_HEADER; | |
688 | |
689 #define DMUS_PORTCONFIGF_DRUMSON10 1 /* This port configured for drums on channel 10. */ | |
690 #define DMUS_PORTCONFIGF_USEDEFAULT 2 /* Use the default port. */ | |
691 | |
692 /* Each portconfig has one or more pchannel to buffer mappings. Each buffer | |
693 is identified by a guid. Each pchannel can map to one or more buffers. | |
694 This is defined with one or more DMUS_IO_PCHANNELTOBUFFER_HEADER | |
695 structures. Each defines a range of PChannels and the set of buffers | |
696 that they connect to. | |
697 */ | |
698 | |
699 typedef struct _DMUS_IO_PCHANNELTOBUFFER_HEADER | |
700 { | |
701 DWORD dwPChannelBase; /* PChannel that this should start on. */ | |
702 DWORD dwPChannelCount; /* How many PChannels. */ | |
703 DWORD dwBufferCount; /* How many buffers do these connect to. */ | |
704 DWORD dwFlags; /* Various flags. Currently reserved for future use. Must be 0. */ | |
705 } DMUS_IO_PCHANNELTOBUFFER_HEADER; | |
706 | |
707 /* Each buffer is represented by an DSBC form. This is wrapped by the | |
708 DMUS_IO_BUFFER_ATTRIBUTES_HEADER which identifies how to use the | |
709 buffer. In particular, it indicates whether this gets dynamically duplicated | |
710 or all references to this should share the same instance. | |
711 To resolve references, the unique GUID of the buffer is also stored | |
712 in this structure. | |
713 */ | |
714 | |
715 typedef struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER | |
716 { | |
717 GUID guidBufferID; /* Each buffer config has a unique ID. */ | |
718 DWORD dwFlags; /* Various flags. */ | |
719 } DMUS_IO_BUFFER_ATTRIBUTES_HEADER; | |
720 | |
721 /* DMUS_IO_BUFFER_ATTRIBUTES_HEADER.dwFlags: */ | |
722 #define DMUS_BUFFERF_SHARED 1 /* Share this with other audio paths, instead of creating unique copies. */ | |
723 #define DMUS_BUFFERF_DEFINED 2 /* Use one of the standard predefined buffers (see GUID_Buffer... in dmusici.h.) */ | |
724 #define DMUS_BUFFERF_MIXIN 8 /* This is a mixin buffer. */ | |
725 | |
726 /* | |
727 | |
728 LIST | |
729 ( | |
730 'pcsl' // Array of port configurations | |
731 <pcfl-list>... // One or more port configurations, each in a list chunk | |
732 ) | |
733 | |
734 LIST | |
735 ( | |
736 'pcfl' // List container for one port configuration. | |
737 <pcfh-ck> // Portconfig header chunk. | |
738 <pprh-ck> // Port params, to be used to create the port. | |
739 [<dbfl-list>]...// Optional array of DirectSound buffer descriptors | |
740 [<pchl-list>] // Optional list of pchannel to buffer assignments | |
741 | |
742 ) | |
743 | |
744 // <pcfh-ck> // Port config header chunk | |
745 ( | |
746 'pcfh' | |
747 <DMUS_IO_PORTCONFIG_HEADER> // Port config header | |
748 ) | |
749 | |
750 // <pprh-ck> // Port params header chunk | |
751 ( | |
752 'pprh' | |
753 <DMUS_PORTPARAMS8> // Port params header | |
754 ) | |
755 | |
756 LIST | |
757 ( | |
758 'pchl' // List container for one or more pchannel to buffer assignments. | |
759 <pchh-ck>... // One or more pchannel to buffer assignment headers and data. | |
760 | |
761 // <pchh-ck> | |
762 ( | |
763 'pchh' | |
764 <DMUS_IO_PCHANNELTOBUFFER_HEADER> // Description of PChannels | |
765 <GUID>... // Array of GUIDs defining the buffers they all connect to. | |
766 ) | |
767 ) | |
768 | |
769 LIST | |
770 ( | |
771 'dbfl' // List container for one buffer and buffer attributes header. | |
772 <ddah-ck> // Buffer attributes header. | |
773 [<DSBC-form>] // Buffer configuration. Not required when header uses a predefined buffer type. | |
774 | |
775 // <ddah-ck> | |
776 ( | |
777 'ddah' | |
778 <DMUS_IO_BUFFER_ATTRIBUTES_HEADER> // Buffer attributes. | |
779 ) | |
780 ) | |
781 */ | |
782 | |
783 /* File io for DirectMusic Band Track object */ | |
784 | |
785 | |
786 /* RIFF ids: */ | |
787 #define DMUS_FOURCC_BANDTRACK_FORM mmioFOURCC('D','M','B','T') | |
788 #define DMUS_FOURCC_BANDTRACK_CHUNK mmioFOURCC('b','d','t','h') | |
789 #define DMUS_FOURCC_BANDS_LIST mmioFOURCC('l','b','d','l') | |
790 #define DMUS_FOURCC_BAND_LIST mmioFOURCC('l','b','n','d') | |
791 #define DMUS_FOURCC_BANDITEM_CHUNK mmioFOURCC('b','d','i','h') | |
792 #define DMUS_FOURCC_BANDITEM_CHUNK2 mmioFOURCC('b','d','2','h') | |
793 | |
794 /* io structures */ | |
795 typedef struct _DMUS_IO_BAND_TRACK_HEADER | |
796 { | |
797 BOOL bAutoDownload; /* Determines if Auto-Download is enabled. */ | |
798 } DMUS_IO_BAND_TRACK_HEADER; | |
799 | |
800 typedef struct _DMUS_IO_BAND_ITEM_HEADER | |
801 { | |
802 MUSIC_TIME lBandTime; /* Position in track list. */ | |
803 } DMUS_IO_BAND_ITEM_HEADER; | |
804 | |
805 typedef struct _DMUS_IO_BAND_ITEM_HEADER2 | |
806 { | |
807 MUSIC_TIME lBandTimeLogical; /* Position in track list. Time in the music with which band change is associated. */ | |
808 MUSIC_TIME lBandTimePhysical; /* Precise time band change will take effect. Should be close to logical time. */ | |
809 } DMUS_IO_BAND_ITEM_HEADER2; | |
810 | |
811 /* | |
812 RIFF | |
813 ( | |
814 'DMBT' // DirectMusic Band Track form-type | |
815 [<bdth-ck>] // Band track header | |
816 [<guid-ck>] // GUID for band track | |
817 [<vers-ck>] // Optional version info | |
818 [<UNFO-list>] // Name, author, copyright info., comments | |
819 <lbdl-list> // List of Band items | |
820 ) | |
821 | |
822 // <bnth-ck> | |
823 'bdth' | |
824 ( | |
825 <DMUS_IO_BAND_TRACK_HEADER> | |
826 ) | |
827 | |
828 // <guid-ck> | |
829 'guid' | |
830 ( | |
831 <GUID> | |
832 ) | |
833 | |
834 // <vers-ck> | |
835 vers | |
836 ( | |
837 <DMUS_IO_VERSION> | |
838 ) | |
839 | |
840 // <lbdl-list> | |
841 LIST | |
842 ( | |
843 'lbdl' | |
844 <lbnd-list>... // Array of bands, each encapsulated in a list chunk | |
845 ) | |
846 | |
847 // <lbnd-list> | |
848 LIST | |
849 ( | |
850 'lbnd' | |
851 <bdih-ck> or <bd2h-ck> // bdih is a legacy format. bd2h is preferred for new content. | |
852 <DMBD-form> // Band | |
853 ) | |
854 | |
855 // <bdih-ck> or <bd2h-ck> // band item header | |
856 ( | |
857 <DMUS_IO_BAND_ITEM_HEADER> or <DMUS_IO_BAND_ITEM_HEADER2> // Band item header | |
858 ) | |
859 */ | |
860 | |
861 | |
862 /* File io for DirectMusic Band object | |
863 */ | |
864 | |
865 /* RIFF ids: */ | |
866 | |
867 #define DMUS_FOURCC_BAND_FORM mmioFOURCC('D','M','B','D') | |
868 #define DMUS_FOURCC_INSTRUMENTS_LIST mmioFOURCC('l','b','i','l') | |
869 #define DMUS_FOURCC_INSTRUMENT_LIST mmioFOURCC('l','b','i','n') | |
870 #define DMUS_FOURCC_INSTRUMENT_CHUNK mmioFOURCC('b','i','n','s') | |
871 | |
872 /* Flags for DMUS_IO_INSTRUMENT | |
873 */ | |
874 #define DMUS_IO_INST_PATCH (1 << 0) /* dwPatch is valid. */ | |
875 #define DMUS_IO_INST_BANKSELECT (1 << 1) /* dwPatch contains a valid Bank Select MSB and LSB part */ | |
876 #define DMUS_IO_INST_ASSIGN_PATCH (1 << 3) /* dwAssignPatch is valid */ | |
877 #define DMUS_IO_INST_NOTERANGES (1 << 4) /* dwNoteRanges is valid */ | |
878 #define DMUS_IO_INST_PAN (1 << 5) /* bPan is valid */ | |
879 #define DMUS_IO_INST_VOLUME (1 << 6 ) /* bVolume is valid */ | |
880 #define DMUS_IO_INST_TRANSPOSE (1 << 7) /* nTranspose is valid */ | |
881 #define DMUS_IO_INST_GM (1 << 8) /* Instrument is from GM collection */ | |
882 #define DMUS_IO_INST_GS (1 << 9) /* Instrument is from GS collection */ | |
883 #define DMUS_IO_INST_XG (1 << 10) /* Instrument is from XG collection */ | |
884 #define DMUS_IO_INST_CHANNEL_PRIORITY (1 << 11) /* dwChannelPriority is valid */ | |
885 #define DMUS_IO_INST_USE_DEFAULT_GM_SET (1 << 12) /* Always use the default GM set for this patch, */ | |
886 /* don't rely on the synth caps stating GM or GS in hardware. */ | |
887 #define DMUS_IO_INST_PITCHBENDRANGE (1 << 13) /* nPitchBendRange is valid */ | |
888 | |
889 /* io structures */ | |
890 typedef struct _DMUS_IO_INSTRUMENT | |
891 { | |
892 DWORD dwPatch; /* MSB, LSB and Program change to define instrument */ | |
893 DWORD dwAssignPatch; /* MSB, LSB and Program change to assign to instrument when downloading */ | |
894 DWORD dwNoteRanges[4]; /* 128 bits; one for each MIDI note instrument needs to able to play */ | |
895 DWORD dwPChannel; /* PChannel instrument plays on */ | |
896 DWORD dwFlags; /* DMUS_IO_INST_ flags */ | |
897 BYTE bPan; /* Pan for instrument */ | |
898 BYTE bVolume; /* Volume for instrument */ | |
899 short nTranspose; /* Number of semitones to transpose notes */ | |
900 DWORD dwChannelPriority; /* Channel priority */ | |
901 short nPitchBendRange; /* Number of semitones shifted by pitch bend */ | |
902 } DMUS_IO_INSTRUMENT; | |
903 | |
904 /* | |
905 // <DMBD-form> bands can be embedded in other forms | |
906 RIFF | |
907 ( | |
908 'DMBD' // DirectMusic Band chunk | |
909 [<guid-ck>] // GUID for band | |
910 [<vers-ck>] // Optional version info | |
911 [<UNFO-list>] // Name, author, copyright info., comments | |
912 <lbil-list> // List of Instruments | |
913 ) | |
914 | |
915 // <guid-ck> | |
916 'guid' | |
917 ( | |
918 <GUID> | |
919 ) | |
920 | |
921 // <vers-ck> | |
922 vers | |
923 ( | |
924 <DMUS_IO_VERSION> | |
925 ) | |
926 | |
927 // <lbil-list> | |
928 LIST | |
929 ( | |
930 'lbil' // Array of instruments | |
931 <lbin-list>... // Each instrument is encapsulated in a list | |
932 ) | |
933 | |
934 // <lbin-list> | |
935 LIST | |
936 ( | |
937 'lbin' | |
938 <bins-ck> | |
939 [<DMRF-list>] // Optional reference to DLS Collection file. | |
940 ) | |
941 | |
942 // <bins-ck> // Instrument chunk | |
943 ( | |
944 'bins' | |
945 <DMUS_IO_INSTRUMENT> // Instrument header | |
946 ) | |
947 */ | |
948 | |
949 /* This RIFF id and io struct have been added to allow wave files (and the wave object) to | |
950 differentiate between streaming and one-shot waves, and to give a prefetch for streaming | |
951 waves */ | |
952 | |
953 #define DMUS_FOURCC_WAVEHEADER_CHUNK mmioFOURCC('w','a','v','h') | |
954 | |
955 typedef struct _DMUS_IO_WAVE_HEADER | |
956 { | |
957 REFERENCE_TIME rtReadAhead; /* How far ahead in the stream wave data will be read (in REFERENCE_TIME). Ignored for one-shot waves. */ | |
958 DWORD dwFlags; /* Various flags, including whether this is a streaming wave and whether it can be invalidated. */ | |
959 } DMUS_IO_WAVE_HEADER; | |
960 | |
961 | |
962 /* File io for Wave track */ | |
963 | |
964 /* RIFF ids: */ | |
965 | |
966 #define DMUS_FOURCC_WAVETRACK_LIST mmioFOURCC('w','a','v','t') | |
967 #define DMUS_FOURCC_WAVETRACK_CHUNK mmioFOURCC('w','a','t','h') | |
968 #define DMUS_FOURCC_WAVEPART_LIST mmioFOURCC('w','a','v','p') | |
969 #define DMUS_FOURCC_WAVEPART_CHUNK mmioFOURCC('w','a','p','h') | |
970 #define DMUS_FOURCC_WAVEITEM_LIST mmioFOURCC('w','a','v','i') | |
971 #define DMUS_FOURCC_WAVE_LIST mmioFOURCC('w','a','v','e') | |
972 #define DMUS_FOURCC_WAVEITEM_CHUNK mmioFOURCC('w','a','i','h') | |
973 | |
974 /* This flag is included in DMUS_IO_WAVE_TRACK_HEADER.dwFlags. If set, the track will get its | |
975 variations from a pattern track, via GetParam(GUID_Variations). */ | |
976 #define DMUS_WAVETRACKF_SYNC_VAR 0x1 | |
977 /* This is also included in DMUS_IO_WAVE_TRACK_HEADER.dwFlags. If set, variation control | |
978 information will persist from one playback instance to the next.*/ | |
979 #define DMUS_WAVETRACKF_PERSIST_CONTROL 0x2 | |
980 | |
981 typedef struct _DMUS_IO_WAVE_TRACK_HEADER | |
982 { | |
983 long lVolume; /* Gain, in 1/100th of dB, to be applied to all waves. Note: All gain values should be negative. */ | |
984 DWORD dwFlags; /* Flags, including whether this track syncs to a pattern track for its variations. */ | |
985 } DMUS_IO_WAVE_TRACK_HEADER; | |
986 | |
987 typedef struct _DMUS_IO_WAVE_PART_HEADER | |
988 { | |
989 long lVolume; /* Gain, in 1/100th of dB, to be applied to all waves in wave part. Note: All gain values should be negative. */ | |
990 DWORD dwVariations; /* Variation mask for which of 32 variations */ | |
991 DWORD dwPChannel; /* PChannel */ | |
992 DWORD dwLockToPart; /* Part ID to lock to. */ | |
993 DWORD dwFlags; /* Flags, including stuff for managing how variations are chosen (in low-order nibble) */ | |
994 DWORD dwIndex; /* Index for distinguishing multiple parts on the same PChannel*/ | |
995 } DMUS_IO_WAVE_PART_HEADER; | |
996 | |
997 typedef struct _DMUS_IO_WAVE_ITEM_HEADER | |
998 { | |
999 long lVolume; /* Gain, in 1/100th of dB. Note: All gain values should be negative. */ | |
1000 long lPitch; /* Pitch offset in 1/100th of a semitone. */ | |
1001 DWORD dwVariations; /* Variation flags for which of 32 variations this wave belongs to. */ | |
1002 REFERENCE_TIME rtTime; /* Start time, in REFERENCE_TIME, if Timer time track, or MUSIC_TIME for music time track. */ | |
1003 REFERENCE_TIME rtStartOffset; /* Distance into wave to start playback, in reference time units. */ | |
1004 REFERENCE_TIME rtReserved; /* Reserved field. */ | |
1005 REFERENCE_TIME rtDuration; /* Duration, in REFERENCE_TIME or MUSIC_TIME, depending on track timing format. */ | |
1006 MUSIC_TIME mtLogicalTime; /* If in music track format, this indicates the musical boundary where this belongs. Otherwise, ignored. */ | |
1007 DWORD dwLoopStart; /* Start point for a looping wave. */ | |
1008 DWORD dwLoopEnd; /* End point for a looping wave. */ | |
1009 DWORD dwFlags; /* Various flags, including whether this is a streaming wave and whether it can be invalidated. */ | |
1010 WORD wVolumeRange; /* Random range for volume. */ | |
1011 WORD wPitchRange; /* Random range for pitch. */ | |
1012 } DMUS_IO_WAVE_ITEM_HEADER; | |
1013 | |
1014 /* | |
1015 LIST | |
1016 { | |
1017 'wavt' // Wave track chunk | |
1018 <wath-ck> // Wave track header | |
1019 <wavp-list>... // Array of Wave Parts | |
1020 } | |
1021 // <wath-ck> | |
1022 'wath' | |
1023 { | |
1024 <DMUS_IO_WAVE_TRACK_HEADER> | |
1025 } | |
1026 | |
1027 // <wavp-list> | |
1028 LIST | |
1029 { | |
1030 'wavp' | |
1031 <waph-ck> // Wave Part Header | |
1032 <wavi-list> // List of wave items | |
1033 } | |
1034 | |
1035 // <waph-ck> | |
1036 'waph' | |
1037 { | |
1038 <DMUS_IO_WAVE_PART_HEADER> | |
1039 } | |
1040 | |
1041 // <wavi-list> | |
1042 LIST | |
1043 { | |
1044 'wavi' | |
1045 <wave-list>... // Array of waves; each wave is encapsulated in a list | |
1046 } | |
1047 | |
1048 // <wave-list> | |
1049 LIST | |
1050 { | |
1051 'wave' | |
1052 <waih-ck> // Wave item header | |
1053 <DMRF-list> // Reference to wave object | |
1054 } | |
1055 | |
1056 // <waih-ck> | |
1057 'waih' | |
1058 { | |
1059 <DMUS_IO_WAVE_ITEM_HEADER> | |
1060 } | |
1061 | |
1062 */ | |
1063 | |
1064 /* File io for DirectMusic Container file. This embeds a set of related files. And, | |
1065 in turn, it can be embedded within a segment or script file. | |
1066 */ | |
1067 | |
1068 #define DMUS_FOURCC_CONTAINER_FORM mmioFOURCC('D','M','C','N') | |
1069 #define DMUS_FOURCC_CONTAINER_CHUNK mmioFOURCC('c','o','n','h') | |
1070 #define DMUS_FOURCC_CONTAINED_ALIAS_CHUNK mmioFOURCC('c','o','b','a') | |
1071 #define DMUS_FOURCC_CONTAINED_OBJECT_CHUNK mmioFOURCC('c','o','b','h') | |
1072 #define DMUS_FOURCC_CONTAINED_OBJECTS_LIST mmioFOURCC('c','o','s','l') | |
1073 #define DMUS_FOURCC_CONTAINED_OBJECT_LIST mmioFOURCC('c','o','b','l') | |
1074 | |
1075 typedef struct _DMUS_IO_CONTAINER_HEADER | |
1076 { | |
1077 DWORD dwFlags; /* Flags. */ | |
1078 } DMUS_IO_CONTAINER_HEADER; | |
1079 | |
1080 #define DMUS_CONTAINER_NOLOADS (1 << 1) /* Contained items are not loaded when the container is loaded. | |
1081 Entries will be created in the loader (via SetObject) but | |
1082 the actual objects will not be created until they are | |
1083 specifically loaded at a later time. */ | |
1084 | |
1085 typedef struct _DMUS_IO_CONTAINED_OBJECT_HEADER | |
1086 { | |
1087 GUID guidClassID; /* Class id of object. */ | |
1088 DWORD dwFlags; /* Flags, for example DMUS_CONTAINED_OBJF_KEEP. */ | |
1089 FOURCC ckid; /* chunk ID of track's data chunk if 0 fccType valid. */ | |
1090 FOURCC fccType; /* list type if NULL ckid valid */ | |
1091 /* Note that LIST:DMRF may be used for ckid and fccType in order to reference an | |
1092 object instead of embedding it within the container. */ | |
1093 } DMUS_IO_CONTAINED_OBJECT_HEADER; | |
1094 | |
1095 #define DMUS_CONTAINED_OBJF_KEEP 1 /* Keep the object cached in the loader after the container is released. */ | |
1096 | |
1097 /* | |
1098 RIFF | |
1099 ( | |
1100 'DMCN' // DirectMusic Container chunk | |
1101 <conh-ck> // Container header chunk | |
1102 [<guid-ck>] // GUID for container | |
1103 [<vers-ck>] // Optional version info | |
1104 [<UNFO-list>] // Name, author, copyright info., comments | |
1105 <cosl-list> // List of objects. | |
1106 ) | |
1107 | |
1108 // <conh-ck> | |
1109 'conh' | |
1110 ( | |
1111 <DMUS_IO_CONTAINER_HEADER> | |
1112 ) | |
1113 | |
1114 // <guid-ck> | |
1115 'guid' | |
1116 ( | |
1117 <GUID> | |
1118 ) | |
1119 | |
1120 // <vers-ck> | |
1121 vers | |
1122 ( | |
1123 <DMUS_IO_VERSION> | |
1124 ) | |
1125 | |
1126 LIST | |
1127 ( | |
1128 'cosl' // Array of embedded objects. | |
1129 <cobl-list>... // Each object is encapsulated in a LIST chunk | |
1130 ) | |
1131 | |
1132 // <cobl-list> // Encapsulates one object | |
1133 LIST | |
1134 ( | |
1135 'cobl' | |
1136 [<coba-ck>] // Alias. An alternative name by which this object is known | |
1137 // within the container. | |
1138 <cobh-ck> // Required header, includes CLASS ID for object. | |
1139 [<data>] or <DMRF> // Object data of the type specified in <cobh-ck>. | |
1140 // If DMRF, it is a reference of where to find the object. | |
1141 // Otherwise, it could be any RIFF readable chunk in the | |
1142 // exact same format as a file. The object will load | |
1143 // itself from this data. | |
1144 ) | |
1145 | |
1146 // <coba-ck> | |
1147 'coba' | |
1148 ( | |
1149 // Alias, stored as NULL terminated string of WCHARs | |
1150 ) | |
1151 | |
1152 // <cobh-ck> | |
1153 'cobh' | |
1154 ( | |
1155 <DMUS_IO_CONTAINED_OBJECT_HEADER> | |
1156 ) | |
1157 */ | |
1158 | |
1159 /* File io for DirectMusic Segment object */ | |
1160 | |
1161 /* RIFF ids: */ | |
1162 | |
1163 #define DMUS_FOURCC_SEGMENT_FORM mmioFOURCC('D','M','S','G') | |
1164 #define DMUS_FOURCC_SEGMENT_CHUNK mmioFOURCC('s','e','g','h') | |
1165 #define DMUS_FOURCC_TRACK_LIST mmioFOURCC('t','r','k','l') | |
1166 #define DMUS_FOURCC_TRACK_FORM mmioFOURCC('D','M','T','K') | |
1167 #define DMUS_FOURCC_TRACK_CHUNK mmioFOURCC('t','r','k','h') | |
1168 #define DMUS_FOURCC_TRACK_EXTRAS_CHUNK mmioFOURCC('t','r','k','x') | |
1169 | |
1170 /* io structures:*/ | |
1171 | |
1172 typedef struct _DMUS_IO_SEGMENT_HEADER | |
1173 { | |
1174 DWORD dwRepeats; /* Number of repeats. By default, 0. */ | |
1175 MUSIC_TIME mtLength; /* Length, in music time. */ | |
1176 MUSIC_TIME mtPlayStart; /* Start of playback. By default, 0. */ | |
1177 MUSIC_TIME mtLoopStart; /* Start of looping portion. By default, 0. */ | |
1178 MUSIC_TIME mtLoopEnd; /* End of loop. Must be greater than dwPlayStart. Or, 0, indicating loop full segment. */ | |
1179 DWORD dwResolution; /* Default resolution. */ | |
1180 /* Following added for DirectX8: */ | |
1181 REFERENCE_TIME rtLength; /* Length, in reference time (overrides music time length.) */ | |
1182 DWORD dwFlags; | |
1183 DWORD dwReserved; /* Reserved. */ | |
1184 /* Added for DirectX9: */ | |
1185 REFERENCE_TIME rtLoopStart; /* Timer time loop start. */ | |
1186 REFERENCE_TIME rtLoopEnd; /* Timer time loop end. */ | |
1187 REFERENCE_TIME rtPlayStart; /* Start of playback in Timer time. */ | |
1188 } DMUS_IO_SEGMENT_HEADER; | |
1189 | |
1190 #define DMUS_SEGIOF_REFLENGTH 1 /* Use the time in rtLength for the segment length. */ | |
1191 #define DMUS_SEGIOF_CLOCKTIME 2 /* This is a Timer time segment. */ | |
1192 | |
1193 typedef struct _DMUS_IO_TRACK_HEADER | |
1194 { | |
1195 GUID guidClassID; /* Class id of track. */ | |
1196 DWORD dwPosition; /* Position in track list. */ | |
1197 DWORD dwGroup; /* Group bits for track. */ | |
1198 FOURCC ckid; /* chunk ID of track's data chunk. */ | |
1199 FOURCC fccType; /* list type if ckid is RIFF or LIST */ | |
1200 } DMUS_IO_TRACK_HEADER; | |
1201 | |
1202 /* Additional parameters for the track header chunk, introduced in DirectX8 and | |
1203 on, are stored in a separate chunk. */ | |
1204 | |
1205 typedef struct _DMUS_IO_TRACK_EXTRAS_HEADER | |
1206 { | |
1207 DWORD dwFlags; /* DirectX8 Added flags for control tracks. */ | |
1208 DWORD dwPriority; /* Priority for composition. */ | |
1209 } DMUS_IO_TRACK_EXTRAS_HEADER; | |
1210 | |
1211 /* | |
1212 RIFF | |
1213 ( | |
1214 'DMSG' // DirectMusic Segment chunk | |
1215 <segh-ck> // Segment header chunk | |
1216 [<guid-ck>] // GUID for segment | |
1217 [<vers-ck>] // Optional version info | |
1218 [<UNFO-list>] // Name, author, copyright info., comments | |
1219 [<DMCN-form>] // Optional container of objects embedded in file. Must precede tracklist. | |
1220 <trkl-list> // List of Tracks | |
1221 [<DMTG-form>] // Optional ToolGraph | |
1222 [<DMAP-form>] // Optional Audio Path | |
1223 ) | |
1224 | |
1225 // <segh-ck> | |
1226 'segh' | |
1227 ( | |
1228 <DMUS_IO_SEGMENT_HEADER> | |
1229 ) | |
1230 | |
1231 // <guid-ck> | |
1232 'guid' | |
1233 ( | |
1234 <GUID> | |
1235 ) | |
1236 | |
1237 // <vers-ck> | |
1238 vers | |
1239 ( | |
1240 <DMUS_IO_VERSION> | |
1241 ) | |
1242 | |
1243 // <trkl-list> | |
1244 LIST | |
1245 ( | |
1246 'trkl' // Array of tracks | |
1247 <DMTK-form>... // Each track is encapsulated in a RIFF chunk | |
1248 ) | |
1249 | |
1250 // <DMTK-form> // Tracks can be embedded in a segment or stored as separate files. | |
1251 RIFF | |
1252 ( | |
1253 'DMTK' | |
1254 <trkh-ck> | |
1255 [<trkx-ck>] // Optional track flags. | |
1256 [<guid-ck>] // Optional GUID for track object instance (not to be confused with Class id in track header) | |
1257 [<vers-ck>] // Optional version info | |
1258 [<UNFO-list>] // Optional name, author, copyright info., comments | |
1259 [<data>] // Track data. Must be a RIFF readable chunk. | |
1260 ) | |
1261 | |
1262 // <trkh-ck> // Track header chunk | |
1263 ( | |
1264 'trkh' | |
1265 <DMUS_IO_TRACK_HEADER> // Track header | |
1266 ) | |
1267 | |
1268 // <trkx-ck> // Track flags chunk | |
1269 ( | |
1270 'trkx' | |
1271 <DMUS_IO_TRACK_EXTRAS_HEADER> // DirectX8 Track flags header | |
1272 ) | |
1273 */ | |
1274 | |
1275 /* File io for DirectMusic reference chunk. | |
1276 This is used to embed a reference to an object. | |
1277 */ | |
1278 | |
1279 /* RIFF ids: */ | |
1280 | |
1281 #define DMUS_FOURCC_REF_LIST mmioFOURCC('D','M','R','F') | |
1282 #define DMUS_FOURCC_REF_CHUNK mmioFOURCC('r','e','f','h') | |
1283 #define DMUS_FOURCC_DATE_CHUNK mmioFOURCC('d','a','t','e') | |
1284 #define DMUS_FOURCC_NAME_CHUNK mmioFOURCC('n','a','m','e') | |
1285 #define DMUS_FOURCC_FILE_CHUNK mmioFOURCC('f','i','l','e') | |
1286 | |
1287 typedef struct _DMUS_IO_REFERENCE | |
1288 { | |
1289 GUID guidClassID; /* Class id is always required. */ | |
1290 DWORD dwValidData; /* Flags. */ | |
1291 } DMUS_IO_REFERENCE; | |
1292 | |
1293 /* | |
1294 LIST | |
1295 ( | |
1296 'DMRF' // DirectMusic Reference chunk | |
1297 <refh-ck> // Reference header chunk | |
1298 [<guid-ck>] // Optional object GUID. | |
1299 [<date-ck>] // Optional file date. | |
1300 [<name-ck>] // Optional name. | |
1301 [<file-ck>] // Optional file name. | |
1302 [<catg-ck>] // Optional category name. | |
1303 [<vers-ck>] // Optional version info. | |
1304 ) | |
1305 | |
1306 // <refh-ck> | |
1307 'refh' | |
1308 ( | |
1309 <DMUS_IO_REFERENCE> | |
1310 ) | |
1311 | |
1312 // <guid-ck> | |
1313 'guid' | |
1314 ( | |
1315 <GUID> | |
1316 ) | |
1317 | |
1318 // <date-ck> | |
1319 date | |
1320 ( | |
1321 <FILETIME> | |
1322 ) | |
1323 | |
1324 // <name-ck> | |
1325 name | |
1326 ( | |
1327 // Name, stored as NULL terminated string of WCHARs | |
1328 ) | |
1329 | |
1330 // <file-ck> | |
1331 file | |
1332 ( | |
1333 // File name, stored as NULL terminated string of WCHARs | |
1334 ) | |
1335 | |
1336 // <catg-ck> | |
1337 catg | |
1338 ( | |
1339 // Category name, stored as NULL terminated string of WCHARs | |
1340 ) | |
1341 | |
1342 // <vers-ck> | |
1343 vers | |
1344 ( | |
1345 <DMUS_IO_VERSION> | |
1346 ) | |
1347 */ | |
1348 | |
1349 /* Chord Maps */ | |
1350 | |
1351 /* runtime chunks */ | |
1352 #define DMUS_FOURCC_CHORDMAP_FORM mmioFOURCC('D','M','P','R') | |
1353 #define DMUS_FOURCC_IOCHORDMAP_CHUNK mmioFOURCC('p','e','r','h') | |
1354 #define DMUS_FOURCC_SUBCHORD_CHUNK mmioFOURCC('c','h','d','t') | |
1355 #define DMUS_FOURCC_CHORDENTRY_CHUNK mmioFOURCC('c','h','e','h') | |
1356 #define DMUS_FOURCC_SUBCHORDID_CHUNK mmioFOURCC('s','b','c','n') | |
1357 #define DMUS_FOURCC_IONEXTCHORD_CHUNK mmioFOURCC('n','c','r','d') | |
1358 #define DMUS_FOURCC_NEXTCHORDSEQ_CHUNK mmioFOURCC('n','c','s','q') | |
1359 #define DMUS_FOURCC_IOSIGNPOST_CHUNK mmioFOURCC('s','p','s','h') | |
1360 #define DMUS_FOURCC_CHORDNAME_CHUNK mmioFOURCC('I','N','A','M') | |
1361 | |
1362 /* runtime list chunks */ | |
1363 #define DMUS_FOURCC_CHORDENTRY_LIST mmioFOURCC('c','h','o','e') | |
1364 #define DMUS_FOURCC_CHORDMAP_LIST mmioFOURCC('c','m','a','p') | |
1365 #define DMUS_FOURCC_CHORD_LIST mmioFOURCC('c','h','r','d') | |
1366 #define DMUS_FOURCC_CHORDPALETTE_LIST mmioFOURCC('c','h','p','l') | |
1367 #define DMUS_FOURCC_CADENCE_LIST mmioFOURCC('c','a','d','e') | |
1368 #define DMUS_FOURCC_SIGNPOSTITEM_LIST mmioFOURCC('s','p','s','t') | |
1369 | |
1370 #define DMUS_FOURCC_SIGNPOST_LIST mmioFOURCC('s','p','s','q') | |
1371 | |
1372 /* values for dwChord field of DMUS_IO_PERS_SIGNPOST */ | |
1373 /* DMUS_SIGNPOSTF_ flags are also used in templates (DMUS_IO_SIGNPOST) */ | |
1374 #define DMUS_SIGNPOSTF_A 1 | |
1375 #define DMUS_SIGNPOSTF_B 2 | |
1376 #define DMUS_SIGNPOSTF_C 4 | |
1377 #define DMUS_SIGNPOSTF_D 8 | |
1378 #define DMUS_SIGNPOSTF_E 0x10 | |
1379 #define DMUS_SIGNPOSTF_F 0x20 | |
1380 #define DMUS_SIGNPOSTF_LETTER (DMUS_SIGNPOSTF_A | DMUS_SIGNPOSTF_B | DMUS_SIGNPOSTF_C | DMUS_SIGNPOSTF_D | DMUS_SIGNPOSTF_E | DMUS_SIGNPOSTF_F) | |
1381 #define DMUS_SIGNPOSTF_1 0x100 | |
1382 #define DMUS_SIGNPOSTF_2 0x200 | |
1383 #define DMUS_SIGNPOSTF_3 0x400 | |
1384 #define DMUS_SIGNPOSTF_4 0x800 | |
1385 #define DMUS_SIGNPOSTF_5 0x1000 | |
1386 #define DMUS_SIGNPOSTF_6 0x2000 | |
1387 #define DMUS_SIGNPOSTF_7 0x4000 | |
1388 #define DMUS_SIGNPOSTF_ROOT (DMUS_SIGNPOSTF_1 | DMUS_SIGNPOSTF_2 | DMUS_SIGNPOSTF_3 | DMUS_SIGNPOSTF_4 | DMUS_SIGNPOSTF_5 | DMUS_SIGNPOSTF_6 | DMUS_SIGNPOSTF_7) | |
1389 #define DMUS_SIGNPOSTF_CADENCE 0x8000 | |
1390 | |
1391 /* values for dwFlags field of DMUS_IO_CHORDMAP */ | |
1392 #define DMUS_CHORDMAPF_VERSION8 1 /* Chordmap is version 8 or above. */ | |
1393 | |
1394 /* values for dwChord field of DMUS_IO_PERS_SIGNPOST */ | |
1395 #define DMUS_SPOSTCADENCEF_1 2 /* Use the first cadence chord. */ | |
1396 #define DMUS_SPOSTCADENCEF_2 4 /* Use the second cadence chord. */ | |
1397 | |
1398 /* run time data structs */ | |
1399 typedef struct _DMUS_IO_CHORDMAP | |
1400 { | |
1401 WCHAR wszLoadName[20]; | |
1402 DWORD dwScalePattern; | |
1403 DWORD dwFlags; /* Various flags. Only lower 16 bits are significant. */ | |
1404 } DMUS_IO_CHORDMAP; | |
1405 | |
1406 typedef struct _DMUS_IO_CHORDMAP_SUBCHORD | |
1407 { | |
1408 DWORD dwChordPattern; | |
1409 DWORD dwScalePattern; | |
1410 DWORD dwInvertPattern; | |
1411 BYTE bChordRoot; | |
1412 BYTE bScaleRoot; | |
1413 WORD wCFlags; | |
1414 DWORD dwLevels; /* parts or which subchord levels this chord supports */ | |
1415 } DMUS_IO_CHORDMAP_SUBCHORD; | |
1416 | |
1417 /* Legacy name... */ | |
1418 typedef DMUS_IO_CHORDMAP_SUBCHORD DMUS_IO_PERS_SUBCHORD; | |
1419 | |
1420 typedef struct _DMUS_IO_CHORDENTRY | |
1421 { | |
1422 DWORD dwFlags; | |
1423 WORD wConnectionID; /* replaces runtime "pointer to this" */ | |
1424 } DMUS_IO_CHORDENTRY; | |
1425 | |
1426 typedef struct _DMUS_IO_NEXTCHORD | |
1427 { | |
1428 DWORD dwFlags; | |
1429 WORD nWeight; | |
1430 WORD wMinBeats; | |
1431 WORD wMaxBeats; | |
1432 WORD wConnectionID; /* points to an ioChordEntry */ | |
1433 } DMUS_IO_NEXTCHORD; | |
1434 | |
1435 typedef struct _DMUS_IO_CHORDMAP_SIGNPOST | |
1436 { | |
1437 DWORD dwChords; /* 1bit per group */ | |
1438 DWORD dwFlags; | |
1439 } DMUS_IO_CHORDMAP_SIGNPOST; | |
1440 | |
1441 /* Legacy name... */ | |
1442 typedef DMUS_IO_CHORDMAP_SIGNPOST DMUS_IO_PERS_SIGNPOST; | |
1443 | |
1444 /* | |
1445 RIFF | |
1446 ( | |
1447 'DMPR' | |
1448 <perh-ck> // Chord map header chunk | |
1449 [<guid-ck>] // guid chunk | |
1450 [<vers-ck>] // version chunk (two DWORDS) | |
1451 [<UNFO-list>] // Unfo chunk | |
1452 <chdt-ck> // subchord database | |
1453 <chpl-list> // chord palette | |
1454 <cmap-list> // chord map | |
1455 <spsq-list> // signpost list | |
1456 ) | |
1457 | |
1458 <cmap-list> ::= LIST('cmap' <choe-list> ) | |
1459 | |
1460 <choe-list> ::= LIST('choe' | |
1461 <cheh-ck> // chord entry data | |
1462 <chrd-list> // chord definition | |
1463 <ncsq-ck> // connecting(next) chords | |
1464 ) | |
1465 | |
1466 <chrd-list> ::= LIST('chrd' | |
1467 <INAM-ck> // name of chord in wide char format | |
1468 <sbcn-ck> // list of subchords composing chord | |
1469 ) | |
1470 | |
1471 <chpl-list> ::= LIST('chpl' | |
1472 <chrd-list> ... // chord definition | |
1473 ) | |
1474 | |
1475 <spsq-list> ::== LIST('spsq' <spst-list> ... ) | |
1476 | |
1477 <spst-list> ::= LIST('spst' | |
1478 <spsh-ck> | |
1479 <chrd-list> | |
1480 [<cade-list>] | |
1481 ) | |
1482 | |
1483 <cade-list> ::= LIST('cade' <chrd-list> ...) | |
1484 | |
1485 <perh-ck> ::= perh(<DMUS_IO_CHORDMAP>) | |
1486 | |
1487 <chdt-ck> ::= chdt(<cbChordSize::WORD> | |
1488 <DMUS_IO_PERS_SUBCHORD> ... ) | |
1489 | |
1490 <cheh-ck> ::= cheh(<DMUS_IO_CHORDENTRY>) | |
1491 | |
1492 <sbcn-ck> ::= sbcn(<cSubChordID:WORD> ...) | |
1493 | |
1494 <ncsq-ck> ::= ncsq(<wNextChordSize:WORD> | |
1495 <DMUS_IO_NEXTCHORD>...) | |
1496 | |
1497 <spsh-ck> ::= spsh(<DMUS_IO_PERS_SIGNPOST>) | |
1498 | |
1499 */ | |
1500 | |
1501 /* File io for DirectMusic Script object */ | |
1502 | |
1503 /* RIFF ids: */ | |
1504 | |
1505 #define DMUS_FOURCC_SCRIPT_FORM mmioFOURCC('D','M','S','C') | |
1506 #define DMUS_FOURCC_SCRIPT_CHUNK mmioFOURCC('s','c','h','d') | |
1507 #define DMUS_FOURCC_SCRIPTVERSION_CHUNK mmioFOURCC('s','c','v','e') | |
1508 #define DMUS_FOURCC_SCRIPTLANGUAGE_CHUNK mmioFOURCC('s','c','l','a') | |
1509 #define DMUS_FOURCC_SCRIPTSOURCE_CHUNK mmioFOURCC('s','c','s','r') | |
1510 | |
1511 /* io structures:*/ | |
1512 | |
1513 typedef struct _DMUS_IO_SCRIPT_HEADER | |
1514 { | |
1515 DWORD dwFlags; /* DMUS_SCRIPTIOF_ flags */ | |
1516 } DMUS_IO_SCRIPT_HEADER; | |
1517 | |
1518 #define DMUS_SCRIPTIOF_LOAD_ALL_CONTENT (1 << 0) | |
1519 /* If set, when the script loads it will also load all the content in its container. */ | |
1520 #define DMUS_SCRIPTIOF_DOWNLOAD_ALL_SEGMENTS (1 << 1) | |
1521 /* If set and LOAD_ALL_CONTENT is also set, when the script initializes it will also download all the segments in its container. | |
1522 If set and LOAD_ALL_CONTENT is not set, when the script calls segment.Load on a segment then the segment will also be downloaded. | |
1523 If not set, the script must manually download and unload by calling segment.DownloadSoundData and segment.UnloadSoundData. */ | |
1524 | |
1525 /* | |
1526 RIFF | |
1527 ( | |
1528 'DMSC' // DirectMusic Script chunk | |
1529 <schd-ck> // Script header chunk | |
1530 [<guid-ck>] // GUID for script | |
1531 [<vers-ck>] // Optional version info | |
1532 [<UNFO-list>] // Name, author, copyright info., comments | |
1533 <scve-ck> // Version of DirectMusic this script was authored to run against | |
1534 <DMCN-form> // Container of content referenced by the script. | |
1535 <scla-ck> // ActiveX scripting language in which the script is written | |
1536 <scsr-ck> or <DMRF> // The script's source code. | |
1537 // If scsr-ck, the source is embedding in the chunk. | |
1538 // If DMRF, it is a reference of where to find a text file with the source. | |
1539 // Class id (guidClassID in DMUS_IO_REFERENCE) must be GUID_NULL because | |
1540 // this text file is not a DirectMusic object in its own right. | |
1541 ) | |
1542 | |
1543 // <schd-ck> | |
1544 'schd' | |
1545 ( | |
1546 <DMUS_FOURCC_SCRIPT_CHUNK> | |
1547 ) | |
1548 | |
1549 // <guid-ck> | |
1550 'guid' | |
1551 ( | |
1552 <GUID> | |
1553 ) | |
1554 | |
1555 // <vers-ck> | |
1556 vers | |
1557 ( | |
1558 <DMUS_IO_VERSION> | |
1559 ) | |
1560 | |
1561 // <scve-ck> | |
1562 scve | |
1563 ( | |
1564 <DMUS_IO_VERSION> | |
1565 ) | |
1566 | |
1567 'scla' | |
1568 ( | |
1569 // Language name, stored as NULL terminated string of WCHARs | |
1570 ) | |
1571 | |
1572 'scsr' | |
1573 ( | |
1574 // Source code, stored as NULL terminated string of WCHARs | |
1575 ) | |
1576 */ | |
1577 | |
1578 /* Signpost tracks */ | |
1579 | |
1580 #define DMUS_FOURCC_SIGNPOST_TRACK_CHUNK mmioFOURCC( 's', 'g', 'n', 'p' ) | |
1581 | |
1582 | |
1583 typedef struct _DMUS_IO_SIGNPOST | |
1584 { | |
1585 MUSIC_TIME mtTime; | |
1586 DWORD dwChords; | |
1587 WORD wMeasure; | |
1588 } DMUS_IO_SIGNPOST; | |
1589 | |
1590 /* | |
1591 | |
1592 // <sgnp-list> | |
1593 'sgnp' | |
1594 ( | |
1595 //sizeof DMUS_IO_SIGNPOST: DWORD | |
1596 <DMUS_IO_SIGNPOST>... | |
1597 ) | |
1598 | |
1599 */ | |
1600 | |
1601 #define DMUS_FOURCC_MUTE_CHUNK mmioFOURCC('m','u','t','e') | |
1602 | |
1603 typedef struct _DMUS_IO_MUTE | |
1604 { | |
1605 MUSIC_TIME mtTime; | |
1606 DWORD dwPChannel; | |
1607 DWORD dwPChannelMap; | |
1608 } DMUS_IO_MUTE; | |
1609 | |
1610 /* | |
1611 | |
1612 // <mute-list> | |
1613 'mute' | |
1614 ( | |
1615 //sizeof DMUS_IO_MUTE:DWORD | |
1616 <DMUS_IO_MUTE>... | |
1617 ) | |
1618 | |
1619 | |
1620 */ | |
1621 | |
1622 /* Used for both style and chord map tracks */ | |
1623 | |
1624 #define DMUS_FOURCC_TIME_STAMP_CHUNK mmioFOURCC('s', 't', 'm', 'p') | |
1625 | |
1626 /* Style tracks */ | |
1627 | |
1628 #define DMUS_FOURCC_STYLE_TRACK_LIST mmioFOURCC('s', 't', 't', 'r') | |
1629 #define DMUS_FOURCC_STYLE_REF_LIST mmioFOURCC('s', 't', 'r', 'f') | |
1630 | |
1631 /* | |
1632 | |
1633 // <sttr-list> | |
1634 LIST('sttr' | |
1635 ( | |
1636 <strf-list>... // Array of Style references | |
1637 ) | |
1638 | |
1639 // <strf-list> | |
1640 LIST('strf' | |
1641 ( | |
1642 <stmp-ck> | |
1643 <DMRF> | |
1644 ) | |
1645 | |
1646 // <stmp-ck> | |
1647 'stmp' | |
1648 ( | |
1649 // time:DWORD | |
1650 ) | |
1651 | |
1652 */ | |
1653 | |
1654 /* Chord map tracks */ | |
1655 | |
1656 #define DMUS_FOURCC_PERS_TRACK_LIST mmioFOURCC('p', 'f', 't', 'r') | |
1657 #define DMUS_FOURCC_PERS_REF_LIST mmioFOURCC('p', 'f', 'r', 'f') | |
1658 | |
1659 /* | |
1660 | |
1661 // <pftr-list> | |
1662 LIST('pftr' | |
1663 ( | |
1664 <pfrf-list>... // Array of Chord map references | |
1665 ) | |
1666 | |
1667 // <pfrf-list> | |
1668 LIST('pfrf' | |
1669 ( | |
1670 <stmp-ck> | |
1671 <DMRF> | |
1672 ) | |
1673 | |
1674 // <stmp-ck> | |
1675 'stmp' | |
1676 ( | |
1677 // time:DWORD | |
1678 ) | |
1679 | |
1680 */ | |
1681 | |
1682 #define DMUS_FOURCC_TEMPO_TRACK mmioFOURCC('t','e','t','r') | |
1683 | |
1684 /* | |
1685 // tempo array | |
1686 'tetr' | |
1687 ( | |
1688 // sizeof DMUS_IO_TEMPO_ITEM: DWORD | |
1689 <DMUS_IO_TEMPO_ITEM>... | |
1690 ) | |
1691 */ | |
1692 | |
1693 #define DMUS_FOURCC_SEQ_TRACK mmioFOURCC('s','e','q','t') | |
1694 #define DMUS_FOURCC_SEQ_LIST mmioFOURCC('e','v','t','l') | |
1695 #define DMUS_FOURCC_CURVE_LIST mmioFOURCC('c','u','r','l') | |
1696 | |
1697 /* | |
1698 // sequence track | |
1699 'seqt' | |
1700 ( | |
1701 // sequence array | |
1702 'evtl' | |
1703 ( | |
1704 // sizeof DMUS_IO_SEQ_ITEM: DWORD | |
1705 <DMUS_IO_SEQ_ITEM>... | |
1706 ) | |
1707 // curve array | |
1708 'curl' | |
1709 ( | |
1710 // sizeof DMUS_IO_CURVE_ITEM: DWORD | |
1711 <DMUS_IO_CURVE_ITEM>... | |
1712 ) | |
1713 ) | |
1714 */ | |
1715 | |
1716 #define DMUS_FOURCC_SYSEX_TRACK mmioFOURCC('s','y','e','x') | |
1717 | |
1718 /* | |
1719 // sysex track | |
1720 'syex' | |
1721 ( | |
1722 { | |
1723 <DMUS_IO_SYSEX_ITEM> | |
1724 <BYTE>... // Array of bytes, length defined in the DMUS_IO_SYSEXITEM structure | |
1725 }... | |
1726 ) | |
1727 */ | |
1728 | |
1729 #define DMUS_FOURCC_TIMESIGNATURE_TRACK mmioFOURCC('t','i','m','s') | |
1730 | |
1731 typedef struct _DMUS_IO_TIMESIGNATURE_ITEM | |
1732 { | |
1733 MUSIC_TIME lTime; | |
1734 BYTE bBeatsPerMeasure; /* beats per measure (top of time sig) */ | |
1735 BYTE bBeat; /* what note receives the beat (bottom of time sig.) */ | |
1736 /* we can assume that 0 means 256th note */ | |
1737 WORD wGridsPerBeat; /* grids per beat */ | |
1738 } DMUS_IO_TIMESIGNATURE_ITEM; | |
1739 | |
1740 /* DirectX6 time signature track | |
1741 | |
1742 'tims' | |
1743 ( | |
1744 // size of DMUS_IO_TIMESIGNATURE_ITEM : DWORD | |
1745 <DMUS_IO_TIMESIGNATURE_ITEM>... | |
1746 ) | |
1747 */ | |
1748 | |
1749 /* DirectX8 Time signature track. The track has been updated from DirectX7 to support a list of | |
1750 RIFF chunks. This will allow the time signature track to expand in the future. | |
1751 */ | |
1752 | |
1753 #define DMUS_FOURCC_TIMESIGTRACK_LIST mmioFOURCC('T','I','M','S') | |
1754 #define DMUS_FOURCC_TIMESIG_CHUNK DMUS_FOURCC_TIMESIGNATURE_TRACK | |
1755 | |
1756 /* | |
1757 LIST | |
1758 ( | |
1759 'TIMS' // Time Signature Track list-type | |
1760 <tims-ck> // Chunk containing an array of time signatures | |
1761 ) | |
1762 | |
1763 'tims' | |
1764 ( | |
1765 // size of DMUS_IO_TIMESIGNATURE_ITEM : DWORD | |
1766 <DMUS_IO_TIMESIGNATURE_ITEM>... | |
1767 ) | |
1768 | |
1769 */ | |
1770 | |
1771 /* DirectX8 Marker track. This is used to store valid start points and other | |
1772 flow control parameters that may come later. For example, if we want | |
1773 to implement more sophisticated looping and branching constructs, they | |
1774 would live in this track. | |
1775 */ | |
1776 | |
1777 #define DMUS_FOURCC_MARKERTRACK_LIST mmioFOURCC('M','A','R','K') | |
1778 #define DMUS_FOURCC_VALIDSTART_CHUNK mmioFOURCC('v','a','l','s') | |
1779 #define DMUS_FOURCC_PLAYMARKER_CHUNK mmioFOURCC('p','l','a','y') | |
1780 | |
1781 /* io structures */ | |
1782 typedef struct _DMUS_IO_VALID_START | |
1783 { | |
1784 MUSIC_TIME mtTime; /* Time of a legal start. */ | |
1785 } DMUS_IO_VALID_START; | |
1786 | |
1787 typedef struct _DMUS_IO_PLAY_MARKER | |
1788 { | |
1789 MUSIC_TIME mtTime; /* Time of a next legal play point marker. */ | |
1790 } DMUS_IO_PLAY_MARKER; | |
1791 | |
1792 /* | |
1793 LIST | |
1794 ( | |
1795 'MARK' // Marker Track list-type | |
1796 [<vals-ck>] // Chunk containing an array of start points | |
1797 [<play-ck>] // Chunk containing an array of play start markers | |
1798 ) | |
1799 | |
1800 'vals' | |
1801 ( | |
1802 // size of DMUS_IO_VALID_START : DWORD | |
1803 <DMUS_IO_VALID_START>... | |
1804 ) | |
1805 | |
1806 'play' | |
1807 ( | |
1808 // size of DMUS_IO_PLAY_MARKER : DWORD | |
1809 <DMUS_IO_PLAY_MARKER>... | |
1810 ) | |
1811 | |
1812 */ | |
1813 | |
1814 /* segment trigger tracks */ | |
1815 | |
1816 /* RIFF ids: */ | |
1817 #define DMUS_FOURCC_SEGTRACK_LIST mmioFOURCC('s','e','g','t') | |
1818 #define DMUS_FOURCC_SEGTRACK_CHUNK mmioFOURCC('s','g','t','h') | |
1819 #define DMUS_FOURCC_SEGMENTS_LIST mmioFOURCC('l','s','g','l') | |
1820 #define DMUS_FOURCC_SEGMENT_LIST mmioFOURCC('l','s','e','g') | |
1821 #define DMUS_FOURCC_SEGMENTITEM_CHUNK mmioFOURCC('s','g','i','h') | |
1822 #define DMUS_FOURCC_SEGMENTITEMNAME_CHUNK mmioFOURCC('s','n','a','m') | |
1823 | |
1824 /* io structures */ | |
1825 typedef struct _DMUS_IO_SEGMENT_TRACK_HEADER | |
1826 { | |
1827 DWORD dwFlags; /* Reserved leave as 0. */ | |
1828 } DMUS_IO_SEGMENT_TRACK_HEADER; | |
1829 | |
1830 typedef struct _DMUS_IO_SEGMENT_ITEM_HEADER | |
1831 { | |
1832 MUSIC_TIME lTimeLogical; /* Position in track list. Time in the music with which the event is associated. */ | |
1833 MUSIC_TIME lTimePhysical; /* Precise time event will be triggered. Should be close to logical time. */ | |
1834 DWORD dwPlayFlags; /* Flags for PlaySegment(). */ | |
1835 DWORD dwFlags; /* Flags. */ | |
1836 } DMUS_IO_SEGMENT_ITEM_HEADER; | |
1837 | |
1838 /* values for dwflags field of DMUS_IO_SEGMENT_ITEM_HEADER */ | |
1839 #define DMUS_SEGMENTTRACKF_MOTIF 1 /* interpret DMRF as link to style, and use snam as the name of a motif within the style */ | |
1840 | |
1841 /* | |
1842 LIST | |
1843 ( | |
1844 'segt' // DirectMusic Segment Trigger Track form-type | |
1845 [<sgth-ck>] // Segment track header | |
1846 <lsgl-list> // List of Segment Lists | |
1847 ) | |
1848 | |
1849 // <sgth-ck> | |
1850 'sgth' | |
1851 ( | |
1852 <DMUS_IO_SEGMENT_TRACK_HEADER> | |
1853 ) | |
1854 | |
1855 // <lsgl-list> | |
1856 LIST | |
1857 ( | |
1858 'lsgl' // Array of segments | |
1859 <lseg-list>... // Each segment is encapsulated in a list (that way it can still be riff parsed.) | |
1860 ) | |
1861 | |
1862 // <lseg-list> | |
1863 LIST | |
1864 ( | |
1865 'lseg' | |
1866 <sgih-ck> | |
1867 <DMRF-list> // Link to a segment or style file. | |
1868 [<snam-ck>] // Name field. Used with DMUS_SEGMENTTRACKF_MOTIF flag. | |
1869 ) | |
1870 | |
1871 // <sgih-ck> // segment item header | |
1872 ( | |
1873 <DMUS_IO_SEGMENT_ITEM_HEADER> // Segment item header | |
1874 ) | |
1875 | |
1876 // <snam-ck> | |
1877 ( | |
1878 // Name, stored as NULL terminated string of WCHARs | |
1879 ) | |
1880 */ | |
1881 | |
1882 /* Script track. */ | |
1883 | |
1884 /* RIFF ids: */ | |
1885 #define DMUS_FOURCC_SCRIPTTRACK_LIST mmioFOURCC('s','c','r','t') | |
1886 #define DMUS_FOURCC_SCRIPTTRACKEVENTS_LIST mmioFOURCC('s','c','r','l') | |
1887 #define DMUS_FOURCC_SCRIPTTRACKEVENT_LIST mmioFOURCC('s','c','r','e') | |
1888 #define DMUS_FOURCC_SCRIPTTRACKEVENTHEADER_CHUNK mmioFOURCC('s','c','r','h') | |
1889 #define DMUS_FOURCC_SCRIPTTRACKEVENTNAME_CHUNK mmioFOURCC('s','c','r','n') | |
1890 | |
1891 /* Flags for DMUS_IO_SCRIPTTRACK_TIMING | |
1892 */ | |
1893 #define DMUS_IO_SCRIPTTRACKF_PREPARE (1 << 0) /* Fire event in advance of time stamp, at Prepare time. This is the default because it leaves the script time to change the music happening at the target time. */ | |
1894 #define DMUS_IO_SCRIPTTRACKF_QUEUE (1 << 1) /* Fire event just before time stamp, at Queue time. */ | |
1895 #define DMUS_IO_SCRIPTTRACKF_ATTIME (1 << 2) /* Fire event right at the time stamp. */ | |
1896 | |
1897 typedef struct _DMUS_IO_SCRIPTTRACK_EVENTHEADER | |
1898 { | |
1899 DWORD dwFlags; /* various bits (see DMUS_IO_SCRIPTTRACKF_*) */ | |
1900 MUSIC_TIME lTimeLogical; /* Position in track list. Time in the music with which the event is associated. */ | |
1901 MUSIC_TIME lTimePhysical; /* Precise time event will be triggered. Should be close to logical time. */ | |
1902 } DMUS_IO_SCRIPTTRACK_EVENTHEADER; | |
1903 | |
1904 /* | |
1905 // Script Track | |
1906 | |
1907 // <scrt-list> | |
1908 LIST | |
1909 ( | |
1910 <scrl-list> // List of script events | |
1911 ) | |
1912 | |
1913 // <scrl-list> | |
1914 LIST | |
1915 ( | |
1916 <scre-list>... // Array of event descriptions | |
1917 ) | |
1918 | |
1919 // <scre-list> | |
1920 LIST | |
1921 ( | |
1922 <scrh-ck> // Event header chunk | |
1923 <DMRF> | |
1924 <scrn-ck> // Routine name | |
1925 ) | |
1926 | |
1927 'scrh' | |
1928 ( | |
1929 <DMUS_IO_SCRIPTTRACK_EVENTHEADER> | |
1930 ) | |
1931 | |
1932 'scrn' | |
1933 ( | |
1934 // Name, stored as NULL terminated string of WCHARs | |
1935 ) | |
1936 */ | |
1937 | |
1938 /* Lyrics/Notification track. */ | |
1939 | |
1940 /* RIFF ids: */ | |
1941 #define DMUS_FOURCC_LYRICSTRACK_LIST mmioFOURCC('l','y','r','t') | |
1942 #define DMUS_FOURCC_LYRICSTRACKEVENTS_LIST mmioFOURCC('l','y','r','l') | |
1943 #define DMUS_FOURCC_LYRICSTRACKEVENT_LIST mmioFOURCC('l','y','r','e') | |
1944 #define DMUS_FOURCC_LYRICSTRACKEVENTHEADER_CHUNK mmioFOURCC('l','y','r','h') | |
1945 #define DMUS_FOURCC_LYRICSTRACKEVENTTEXT_CHUNK mmioFOURCC('l','y','r','n') | |
1946 | |
1947 typedef struct _DMUS_IO_LYRICSTRACK_EVENTHEADER | |
1948 { | |
1949 DWORD dwFlags; /* Reserved leave as 0. */ | |
1950 DWORD dwTimingFlags; /* Combination DMUS_PMSGF_TOOL_* flags. Determines the precise timing of when the notification happens. Invalid with the flag DMUS_PMSGF_REFTIME, DMUS_PMSGF_MUSICTIME, DMUS_PMSGF_TOOL_FLUSH, or DMUS_PMSGF_LOCKTOREFTIME. */ | |
1951 MUSIC_TIME lTimeLogical; /* Position in track list. Time in the music with which the event is associated. */ | |
1952 MUSIC_TIME lTimePhysical; /* Precise time event will be triggered. Should be close to logical time. */ | |
1953 } DMUS_IO_LYRICSTRACK_EVENTHEADER; | |
1954 | |
1955 /* | |
1956 // Lyrics/Notification Track | |
1957 | |
1958 // <lyrt-list> | |
1959 LIST | |
1960 ( | |
1961 <lyrl-list> // List of notification events | |
1962 ) | |
1963 | |
1964 // <lyrl-list> | |
1965 LIST | |
1966 ( | |
1967 <lyre-list>... // Array of event descriptions | |
1968 ) | |
1969 | |
1970 // <lyre-list> | |
1971 LIST | |
1972 ( | |
1973 <lyrh-ck> // Event header chunk | |
1974 <lyrn-ck> // Notification text | |
1975 ) | |
1976 | |
1977 'lyrh' | |
1978 ( | |
1979 <DMUS_IO_LYRICSTRACK_EVENTHEADER> | |
1980 ) | |
1981 | |
1982 'lyrn' | |
1983 ( | |
1984 // Name, stored as NULL terminated string of WCHARs | |
1985 ) | |
1986 */ | |
1987 | |
1988 /* Parameter control track */ | |
1989 | |
1990 /* RIFF ids: */ | |
1991 #define DMUS_FOURCC_PARAMCONTROLTRACK_TRACK_LIST mmioFOURCC('p','r','m','t') | |
1992 #define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_LIST mmioFOURCC('p','r','o','l') | |
1993 #define DMUS_FOURCC_PARAMCONTROLTRACK_OBJECT_CHUNK mmioFOURCC('p','r','o','h') | |
1994 #define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_LIST mmioFOURCC('p','r','p','l') | |
1995 #define DMUS_FOURCC_PARAMCONTROLTRACK_PARAM_CHUNK mmioFOURCC('p','r','p','h') | |
1996 #define DMUS_FOURCC_PARAMCONTROLTRACK_CURVES_CHUNK mmioFOURCC('p','r','c','c') | |
1997 | |
1998 typedef struct _DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER | |
1999 { | |
2000 DWORD dwFlags; /* Reserved. Must be zero. */ | |
2001 GUID guidTimeFormat; /* Time format to set the object to. Must be GUID_TIME_REFERNCE or GUID_TIME_MUSIC from medparam.h. */ | |
2002 /* Path for finding the object. These fields correspond to the first five parameters of IDirectMusicSegmentState::GetObjectInPath. */ | |
2003 DWORD dwPChannel; | |
2004 DWORD dwStage; | |
2005 DWORD dwBuffer; | |
2006 GUID guidObject; | |
2007 DWORD dwIndex; | |
2008 } DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER; | |
2009 | |
2010 typedef struct _DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER | |
2011 { | |
2012 DWORD dwFlags; /* Reserved. Must be zero. */ | |
2013 DWORD dwIndex; /* Index number of the parameter on the object */ | |
2014 } DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER; | |
2015 | |
2016 typedef struct _DMUS_IO_PARAMCONTROLTRACK_CURVEINFO | |
2017 { | |
2018 MUSIC_TIME mtStartTime; | |
2019 MUSIC_TIME mtEndTime; | |
2020 float fltStartValue; | |
2021 float fltEndValue; | |
2022 DWORD dwCurveType; /* One of the items from the MP_CURVE_TYPE enum in medparam.h */ | |
2023 DWORD dwFlags; /* A combination of the MPF_ENVLP_* constants in medparam.h */ | |
2024 } DMUS_IO_PARAMCONTROLTRACK_CURVEINFO; | |
2025 | |
2026 /* | |
2027 // <prmt-list> | |
2028 LIST | |
2029 ( | |
2030 <prol-list>... // one for each object | |
2031 ) | |
2032 | |
2033 // <prol-list> | |
2034 LIST | |
2035 ( | |
2036 <proh-ck> // object header chunk | |
2037 <prpl-list>... // one for each parameter | |
2038 ) | |
2039 | |
2040 // <proh-ck> | |
2041 proh | |
2042 ( | |
2043 <DMUS_IO_PARAMCONTROLTRACK_OBJECTHEADER> | |
2044 ) | |
2045 | |
2046 // <prpl-list> | |
2047 LIST | |
2048 ( | |
2049 <prph-ck> // parameter header chunk | |
2050 <prcc-ck> // chunk containing an array of curves | |
2051 ) | |
2052 | |
2053 // <prph-ck> | |
2054 prph | |
2055 ( | |
2056 <DMUS_IO_PARAMCONTROLTRACK_PARAMHEADER> | |
2057 ) | |
2058 | |
2059 // <prcc-ck> | |
2060 prcc | |
2061 ( | |
2062 // sizeof DMUS_IO_PARAMCONTROLTRACK_CURVEINFO:DWORD | |
2063 <DMUS_IO_PARAMCONTROLTRACK_CURVEINFO>... // curves, sorted in order of mtTime | |
2064 ) | |
2065 */ | |
2066 | |
2067 #if (DIRECTSOUND_VERSION >= 0x0800) | |
2068 | |
2069 /* DirectSoundBufferConfig FX Map */ | |
2070 | |
2071 /* RIFF ids: */ | |
2072 | |
2073 #define DMUS_FOURCC_DSBC_FORM mmioFOURCC('D','S','B','C') | |
2074 #define DMUS_FOURCC_DSBD_CHUNK mmioFOURCC('d','s','b','d') | |
2075 #define DMUS_FOURCC_BSID_CHUNK mmioFOURCC('b','s','i','d') | |
2076 #define DMUS_FOURCC_DS3D_CHUNK mmioFOURCC('d','s','3','d') | |
2077 #define DMUS_FOURCC_DSBC_LIST mmioFOURCC('f','x','l','s') | |
2078 #define DMUS_FOURCC_DSFX_FORM mmioFOURCC('D','S','F','X') | |
2079 #define DMUS_FOURCC_DSFX_CHUNK mmioFOURCC('f','x','h','r') | |
2080 #define DMUS_FOURCC_DSFX_DATA mmioFOURCC('d','a','t','a') | |
2081 | |
2082 /* io structures */ | |
2083 | |
2084 typedef struct _DSOUND_IO_DSBUFFERDESC | |
2085 { | |
2086 DWORD dwFlags; /* DirectSound buffer creation flags */ | |
2087 WORD nChannels; /* No. of channels (rest of buffer format is determined by owning sink) */ | |
2088 LONG lVolume; /* Initial pan; only used if CTRLVOLUME is specified */ | |
2089 LONG lPan; /* Initial pan; only used if CTRLPAN is specified */ | |
2090 DWORD dwReserved; /* Reserved - must be 0 */ | |
2091 } DSOUND_IO_DSBUFFERDESC; | |
2092 | |
2093 typedef struct _DSOUND_IO_DSBUSID | |
2094 { | |
2095 DWORD busid[1]; /* Array size determined from chunk size */ | |
2096 } DSOUND_IO_DSBUSID; | |
2097 | |
2098 typedef struct _DSOUND_IO_3D | |
2099 { | |
2100 GUID guid3DAlgorithm; /* GUID identifying the 3D algorithm to use (defined in dsound.h) */ | |
2101 DS3DBUFFER ds3d; /* Initial 3D parameters */ | |
2102 } DSOUND_IO_3D; | |
2103 | |
2104 typedef struct _DSOUND_IO_DXDMO_HEADER | |
2105 { | |
2106 DWORD dwEffectFlags; /* Effect creation flags - equivalent to DSEFFECTDESC::dwFlags */ | |
2107 GUID guidDSFXClass; /* GUID identifying the effect to use - corresponds to a COM CLSID */ | |
2108 GUID guidReserved; /* Reserved - must be the null GUID */ | |
2109 GUID guidSendBuffer; /* GUID identifying the buffer to send to if this is a send effect */ | |
2110 DWORD dwReserved; /* Reserved - must be 0 */ | |
2111 } DSOUND_IO_DXDMO_HEADER; | |
2112 | |
2113 typedef struct _DSOUND_IO_DXDMO_DATA | |
2114 { | |
2115 DWORD data[1]; /* Array size determined by the DMO involved */ | |
2116 } DSOUND_IO_DXDMO_DATA; | |
2117 | |
2118 /* | |
2119 RIFF | |
2120 ( | |
2121 'DSBC' // DirectSoundBufferConfig chunk | |
2122 [<guid-ck>] // GUID identifier for this DirectSoundBufferConfig | |
2123 [<vers-ck>] // Optional version info | |
2124 [<UNFO-list>] // Name, author, copyright info., comments | |
2125 <dsbd-ck> // DirectSound Buffer descriptor chunk | |
2126 [<bsid-ck>] // Optional bus id array | |
2127 [<ds3d-ck>] // Optional 3d Parameters | |
2128 [<fxls-list>] // Optional list of FX descriptors | |
2129 ) | |
2130 | |
2131 // <guid-ck> | |
2132 'guid' | |
2133 ( | |
2134 <GUID> | |
2135 ) | |
2136 | |
2137 // <vers-ck> | |
2138 'vers' | |
2139 ( | |
2140 <DMUS_IO_VERSION> | |
2141 ) | |
2142 | |
2143 // <dsbd-ck> | |
2144 'dsbd' | |
2145 ( | |
2146 <DSOUND_IO_DSBUFFERDESC> // Creation parameters and initial settings for the buffer | |
2147 ) | |
2148 | |
2149 // <bsid-ck> | |
2150 'bsid' | |
2151 ( | |
2152 <DSOUND_IO_DSBUSID> // The size of DSOUND_IO_DSBUSID is determined by the chunk size | |
2153 ) | |
2154 | |
2155 // <ds3d-ck> | |
2156 'ds3d' | |
2157 ( | |
2158 <DSOUND_IO_3D> // Initial 3D buffer parameters: position, etc. | |
2159 ) | |
2160 | |
2161 // <fx-list> | |
2162 LIST | |
2163 ( | |
2164 'fxls' // Array of DMO creation parameter blocks | |
2165 <DSFX-form>... // Each DMO is encapsulated in a RIFF chunk | |
2166 ) | |
2167 | |
2168 // <DSFX-form> // DMOs can be embedded in a buffer configuration or stored as separate files | |
2169 RIFF | |
2170 ( | |
2171 'DSFX' | |
2172 <fxhr-ck> // FX header chunk | |
2173 [<data-ck>] // FX initial settings chunk | |
2174 ) | |
2175 | |
2176 // <fxhr-ck> | |
2177 'fxhr' | |
2178 ( | |
2179 <DSOUND_IO_DXDMO_HEADER> | |
2180 ) | |
2181 | |
2182 // <data-ck> | |
2183 'data' | |
2184 ( | |
2185 <DSOUND_IO_DXDMO_DATA> // Opaque data block used by the DMO to load itself. | |
2186 // For our standard included DMOs, this is simply the structure accepted by | |
2187 // the DMO's SetAllParameters() method - e.g. struct DSFXChorus for Chorus. | |
2188 ) | |
2189 */ | |
2190 | |
2191 #endif | |
2192 | |
2193 #ifdef __cplusplus | |
2194 }; /* extern "C" */ | |
2195 #endif | |
2196 | |
2197 #include <poppack.h> | |
2198 | |
2199 #endif /* #ifndef _DMUSICF_ */ |