0
+ − 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_ */