/[cvs]/api/include/dmusicf.h
ViewVC logotype

Contents of /api/include/dmusicf.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (vendor branch)
Sun Jul 1 20:47:59 2001 UTC (23 years, 5 months ago) by bearsoft
Branch: lazy, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
First import

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

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26