/common/dx9/include/dmusicf.h
C Header | 2199 lines | 738 code | 221 blank | 1240 comment | 0 complexity | 80ad3789f86b0b0a5a388237d2c4d561 MD5 | raw file
Large files files are truncated, but you can click here to view the full file
- /************************************************************************
- * *
- * dmusicf.h -- This module defines the DirectMusic file formats *
- * *
- * Copyright (c) Microsoft Corporation. All rights reserved. *
- * *
- ************************************************************************/
-
- #ifndef _DMUSICF_
- #define _DMUSICF_
-
-
- #include <windows.h>
-
- #define COM_NO_WINDOWS_H
- #include <objbase.h>
-
- #include <mmsystem.h>
-
- #include <pshpack8.h>
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- interface IDirectMusicCollection;
- #ifndef __cplusplus
- typedef interface IDirectMusicCollection IDirectMusicCollection;
- #endif
-
- /* Common chunks */
-
- #define DMUS_FOURCC_GUID_CHUNK mmioFOURCC('g','u','i','d')
- #define DMUS_FOURCC_INFO_LIST mmioFOURCC('I','N','F','O')
- #define DMUS_FOURCC_UNFO_LIST mmioFOURCC('U','N','F','O')
- #define DMUS_FOURCC_UNAM_CHUNK mmioFOURCC('U','N','A','M')
- #define DMUS_FOURCC_UART_CHUNK mmioFOURCC('U','A','R','T')
- #define DMUS_FOURCC_UCOP_CHUNK mmioFOURCC('U','C','O','P')
- #define DMUS_FOURCC_USBJ_CHUNK mmioFOURCC('U','S','B','J')
- #define DMUS_FOURCC_UCMT_CHUNK mmioFOURCC('U','C','M','T')
- #define DMUS_FOURCC_CATEGORY_CHUNK mmioFOURCC('c','a','t','g')
- #define DMUS_FOURCC_VERSION_CHUNK mmioFOURCC('v','e','r','s')
-
- /* The following structures are used by the Tracks, and are the packed structures */
- /* that are passed to the Tracks inside the IStream. */
-
-
- typedef struct _DMUS_IO_SEQ_ITEM
- {
- MUSIC_TIME mtTime;
- MUSIC_TIME mtDuration;
- DWORD dwPChannel;
- short nOffset;
- BYTE bStatus;
- BYTE bByte1;
- BYTE bByte2;
- } DMUS_IO_SEQ_ITEM;
-
-
- typedef struct _DMUS_IO_CURVE_ITEM
- {
- MUSIC_TIME mtStart;
- MUSIC_TIME mtDuration;
- MUSIC_TIME mtResetDuration;
- DWORD dwPChannel;
- short nOffset;
- short nStartValue;
- short nEndValue;
- short nResetValue;
- BYTE bType;
- BYTE bCurveShape;
- BYTE bCCData;
- BYTE bFlags;
- /* Following was added for DirectX8. */
- WORD wParamType; /* RPN or NRPN parameter number. */
- WORD wMergeIndex; /* Allows multiple parameters to be merged (pitchbend, volume, and expression.) */
- } DMUS_IO_CURVE_ITEM;
-
-
- typedef struct _DMUS_IO_TEMPO_ITEM
- {
- MUSIC_TIME lTime;
- double dblTempo;
- } DMUS_IO_TEMPO_ITEM;
-
-
- typedef struct _DMUS_IO_SYSEX_ITEM
- {
- MUSIC_TIME mtTime;
- DWORD dwPChannel;
- DWORD dwSysExLength;
- } DMUS_IO_SYSEX_ITEM;
-
- typedef DMUS_CHORD_KEY DMUS_CHORD_PARAM; /* DMUS_CHORD_KEY defined in dmusici.h */
-
- typedef struct _DMUS_RHYTHM_PARAM
- {
- DMUS_TIMESIGNATURE TimeSig;
- DWORD dwRhythmPattern;
- } DMUS_RHYTHM_PARAM;
-
- typedef struct _DMUS_TEMPO_PARAM
- {
- MUSIC_TIME mtTime;
- double dblTempo;
- } DMUS_TEMPO_PARAM;
-
-
- typedef struct _DMUS_MUTE_PARAM
- {
- DWORD dwPChannel;
- DWORD dwPChannelMap;
- BOOL fMute;
- } DMUS_MUTE_PARAM;
-
- /* Style chunks */
-
- #define DMUS_FOURCC_STYLE_FORM mmioFOURCC('D','M','S','T')
- #define DMUS_FOURCC_STYLE_CHUNK mmioFOURCC('s','t','y','h')
- #define DMUS_FOURCC_PART_LIST mmioFOURCC('p','a','r','t')
- #define DMUS_FOURCC_PART_CHUNK mmioFOURCC('p','r','t','h')
- #define DMUS_FOURCC_NOTE_CHUNK mmioFOURCC('n','o','t','e')
- #define DMUS_FOURCC_CURVE_CHUNK mmioFOURCC('c','r','v','e')
- #define DMUS_FOURCC_MARKER_CHUNK mmioFOURCC('m','r','k','r')
- #define DMUS_FOURCC_RESOLUTION_CHUNK mmioFOURCC('r','s','l','n')
- #define DMUS_FOURCC_ANTICIPATION_CHUNK mmioFOURCC('a','n','p','n')
- #define DMUS_FOURCC_PATTERN_LIST mmioFOURCC('p','t','t','n')
- #define DMUS_FOURCC_PATTERN_CHUNK mmioFOURCC('p','t','n','h')
- #define DMUS_FOURCC_RHYTHM_CHUNK mmioFOURCC('r','h','t','m')
- #define DMUS_FOURCC_PARTREF_LIST mmioFOURCC('p','r','e','f')
- #define DMUS_FOURCC_PARTREF_CHUNK mmioFOURCC('p','r','f','c')
- #define DMUS_FOURCC_STYLE_PERS_REF_LIST mmioFOURCC('p','r','r','f')
- #define DMUS_FOURCC_MOTIFSETTINGS_CHUNK mmioFOURCC('m','t','f','s')
-
- /* Flags used by variations: these make up the DWORDs in dwVariationChoices. */
-
- /* These flags determine the types of chords supported by a given variation in DirectMusic */
- /* mode. The first seven flags (bits 1-7) are set if the variation supports major chords */
- /* rooted in scale positions, so, e.g., if bits 1, 2, and 4 are set, the variation */
- /* supports major chords rooted in the tonic, second, and fourth scale positions. The */
- /* next seven flags serve the same purpose, but for minor chords, and the following seven */
- /* flags serve the same purpose for chords that are not major or minor (e.g., SUS 4 */
- /* chords). Bits 22, 23, and 24 are set if the variation supports chords rooted in the */
- /* scale, chords rooted sharp of scale tones, and chords rooted flat of scale tones, */
- /* respectively. For example, to support a C# minor chord in the scale of C Major, */
- /* bits 8 (for tonic minor) and 24 (for sharp) need to be set. Bits 25, 26, an 27 handle */
- /* chords that are triads, 6th or 7th chords, and chords with extensions, respectively. */
- /* bits 28 and 29 handle chords that are followed by tonic and dominant chords, */
- /* respectively. */
- #define DMUS_VARIATIONF_MAJOR 0x0000007F /* Seven positions in the scale - major chords. */
- #define DMUS_VARIATIONF_MINOR 0x00003F80 /* Seven positions in the scale - minor chords. */
- #define DMUS_VARIATIONF_OTHER 0x001FC000 /* Seven positions in the scale - other chords. */
- #define DMUS_VARIATIONF_ROOT_SCALE 0x00200000 /* Handles chord roots in the scale. */
- #define DMUS_VARIATIONF_ROOT_FLAT 0x00400000 /* Handles flat chord roots (based on scale notes). */
- #define DMUS_VARIATIONF_ROOT_SHARP 0x00800000 /* Handles sharp chord roots (based on scale notes). */
- #define DMUS_VARIATIONF_TYPE_TRIAD 0x01000000 /* Handles simple chords - triads. */
- #define DMUS_VARIATIONF_TYPE_6AND7 0x02000000 /* Handles simple chords - 6 and 7. */
- #define DMUS_VARIATIONF_TYPE_COMPLEX 0x04000000 /* Handles complex chords. */
- #define DMUS_VARIATIONF_DEST_TO1 0x08000000 /* Handles transitions to 1 chord. */
- #define DMUS_VARIATIONF_DEST_TO5 0x10000000 /* Handles transitions to 5 chord. */
- #define DMUS_VARIATIONF_DEST_OTHER 0x40000000 /* Handles transitions to chords other than 1 . */
-
- /* legacy mask for variation modes */
- #define DMUS_VARIATIONF_MODES 0xE0000000
- /* Bits 29 and 31 of the variation flags are the Mode bits. If both are 0, it's IMA. */
- /* If bit 29 is 1, it's Direct Music. */
- #define DMUS_VARIATIONF_MODES_EX (0x20000000 | 0x80000000)
- #define DMUS_VARIATIONF_IMA25_MODE 0x00000000
- #define DMUS_VARIATIONF_DMUS_MODE 0x20000000
-
- /* Set this if the part uses marker events */
- #define DMUS_PARTF_USE_MARKERS 0x1
- /* Set this if the part is allowed to switch only on chord-aligned markers */
- #define DMUS_PARTF_ALIGN_CHORDS 0x2
-
- /* These specify if the marker event signals whether to stop a variation or start a
- pattern/variation (or both), and whether new variations must align with a chord */
- #define DMUS_MARKERF_START 0x1
- #define DMUS_MARKERF_STOP 0x2
- #define DMUS_MARKERF_CHORD_ALIGN 0x4
-
- /* if this flag is set, variation settings in a playing pattern-based track's state data will
- persist in the track after it stops playing */
- #define DMUS_PATTERNF_PERSIST_CONTROL 0x1
-
- /* These specify possible values for DMUS_IO_PARTREF.bRandomVariation
- all but DMUS_VARIATIONT_SEQUENTIAL and DMUS_VARIATIONT_RANDOM are DirectX8. */
- typedef enum enumDMUS_VARIATIONT_TYPES
- {
- DMUS_VARIATIONT_SEQUENTIAL = 0, /* Play sequential starting with variation 1. */
- DMUS_VARIATIONT_RANDOM = 1, /* Play randomly. */
- DMUS_VARIATIONT_RANDOM_START = 2, /* Play sequential starting with a random variation. */
- DMUS_VARIATIONT_NO_REPEAT = 3, /* Play randomly, but don't play the same variation twice. */
- DMUS_VARIATIONT_RANDOM_ROW = 4 /* Play randomly as a row: don't repeat any variation until all have played. */
- } DMUS_VARIATIONT_TYPES;
-
- /* These specify possible values for DMUS_IO_PATTERN.wEmbellishment (DirectX8) */
- typedef enum enumDMUS_EMBELLISHT_TYPES
- {
- DMUS_EMBELLISHT_NORMAL = 0,
- DMUS_EMBELLISHT_FILL = 1,
- DMUS_EMBELLISHT_BREAK = 2,
- DMUS_EMBELLISHT_INTRO = 4,
- DMUS_EMBELLISHT_END = 8,
- DMUS_EMBELLISHT_MOTIF = 16,
- DMUS_EMBELLISHT_ALL = 0xFFFF
- } DMUS_EMBELLISHT_TYPES;
-
- #pragma pack(2)
-
- typedef struct _DMUS_IO_TIMESIG
- {
- /* Time signatures define how many beats per measure, which note receives */
- /* the beat, and the grid resolution. */
- BYTE bBeatsPerMeasure; /* beats per measure (top of time sig) */
- BYTE bBeat; /* what note receives the beat (bottom of time sig.) */
- /* we can assume that 0 means 256th note */
- WORD wGridsPerBeat; /* grids per beat */
- } DMUS_IO_TIMESIG;
-
- typedef struct _DMUS_IO_STYLE
- {
- DMUS_IO_TIMESIG timeSig; /* Styles have a default Time Signature */
- double dblTempo;
- } DMUS_IO_STYLE;
-
- typedef struct _DMUS_IO_VERSION
- {
- DWORD dwVersionMS; /* Version # high-order 32 bits */
- DWORD dwVersionLS; /* Version # low-order 32 bits */
- } DMUS_IO_VERSION;
-
- typedef struct _DMUS_IO_PATTERN
- {
- DMUS_IO_TIMESIG timeSig; /* Patterns can override the Style's Time sig. */
- BYTE bGrooveBottom; /* bottom of groove range */
- BYTE bGrooveTop; /* top of groove range */
- WORD wEmbellishment; /* Fill, Break, Intro, End, Normal, Motif */
- WORD wNbrMeasures; /* length in measures */
- BYTE bDestGrooveBottom; /* bottom of groove range for next pattern */
- BYTE bDestGrooveTop; /* top of groove range for next pattern */
- DWORD dwFlags; /* various flags */
- } DMUS_IO_PATTERN;
-
- typedef struct _DMUS_IO_STYLEPART
- {
- DMUS_IO_TIMESIG timeSig; /* can override pattern's */
- DWORD dwVariationChoices[32]; /* MOAW choice bitfield */
- GUID guidPartID; /* identifies the part */
- WORD wNbrMeasures; /* length of the Part */
- BYTE bPlayModeFlags; /* see PLAYMODE flags */
- BYTE bInvertUpper; /* inversion upper limit */
- BYTE bInvertLower; /* inversion lower limit */
- BYTE bPad[3]; /* for DWORD alignment */
- DWORD dwFlags; /* various flags */
- } DMUS_IO_STYLEPART;
-
- typedef struct _DMUS_IO_PARTREF
- {
- GUID guidPartID; /* unique ID for matching up with parts */
- WORD wLogicalPartID; /* corresponds to port/device/midi channel OBSOLETE */
- BYTE bVariationLockID; /* parts with the same ID lock variations. */
- /* high bit is used to identify master Part */
- BYTE bSubChordLevel; /* tells which sub chord level this part wants */
- BYTE bPriority; /* 256 priority levels. Parts with lower priority */
- /* aren't played first when a device runs out of */
- /* notes */
- BYTE bRandomVariation; /* when set, matching variations play in random order */
- /* when clear, matching variations play sequentially */
- WORD wPad; /* not used */
- DWORD dwPChannel; /* replaces wLogicalPartID */
- } DMUS_IO_PARTREF;
-
- typedef struct _DMUS_IO_STYLENOTE
- {
- MUSIC_TIME mtGridStart; /* when this note occurs */
- DWORD dwVariation; /* variation bits */
- MUSIC_TIME mtDuration; /* how long this note lasts */
- short nTimeOffset; /* offset from mtGridStart */
- WORD wMusicValue; /* Position in scale. */
- BYTE bVelocity; /* Note velocity. */
- BYTE bTimeRange; /* Range to randomize start time. */
- BYTE bDurRange; /* Range to randomize duration. */
- BYTE bVelRange; /* Range to randomize velocity. */
- BYTE bInversionID; /* Identifies inversion group to which this note belongs */
- BYTE bPlayModeFlags; /* Can override part */
- /* Following exists only under DirectX8 and on */
- BYTE bNoteFlags; /* values from DMUS_NOTEF_FLAGS */
- } DMUS_IO_STYLENOTE;
-
- typedef struct _DMUS_IO_STYLECURVE
- {
- MUSIC_TIME mtGridStart; /* when this curve occurs */
- DWORD dwVariation; /* variation bits */
- MUSIC_TIME mtDuration; /* how long this curve lasts */
- MUSIC_TIME mtResetDuration;/* how long after the end of the curve to reset the curve */
- short nTimeOffset; /* offset from mtGridStart */
- short nStartValue; /* curve's start value */
- short nEndValue; /* curve's end value */
- short nResetValue; /* the value to which to reset the curve */
- BYTE bEventType; /* type of curve */
- BYTE bCurveShape; /* shape of curve */
- BYTE bCCData; /* CC# */
- BYTE bFlags; /* Bit 1=TRUE means to send nResetValue. Otherwise, don't.
- Other bits are reserved. */
- /* Following was added for DirectX8. */
- WORD wParamType; /* RPN or NRPN parameter number. */
- WORD wMergeIndex; /* Allows multiple parameters to be merged (pitchbend, volume, and expression.) */
- } DMUS_IO_STYLECURVE;
-
- typedef struct _DMUS_IO_STYLEMARKER
- {
- MUSIC_TIME mtGridStart; /* when this marker occurs */
- DWORD dwVariation; /* variation bits */
- WORD wMarkerFlags; /* how the marker is used */
- } DMUS_IO_STYLEMARKER;
-
- typedef struct _DMUS_IO_STYLERESOLUTION
- {
- DWORD dwVariation; /* variation bits */
- WORD wMusicValue; /* Position in scale. */
- BYTE bInversionID; /* Identifies inversion group to which this note belongs */
- BYTE bPlayModeFlags; /* Can override part */
- } DMUS_IO_STYLERESOLUTION;
-
- typedef struct _DMUS_IO_STYLE_ANTICIPATION
- {
- MUSIC_TIME mtGridStart; /* when this anticipation occurs */
- DWORD dwVariation; /* variation bits */
- short nTimeOffset; /* offset from mtGridStart */
- BYTE bTimeRange; /* Range to randomize start time. */
- } DMUS_IO_STYLE_ANTICIPATION;
-
- typedef struct _DMUS_IO_MOTIFSETTINGS
- {
- DWORD dwRepeats; /* Number of repeats. By default, 0. */
- MUSIC_TIME mtPlayStart; /* Start of playback. By default, 0. */
- MUSIC_TIME mtLoopStart; /* Start of looping portion. By default, 0. */
- MUSIC_TIME mtLoopEnd; /* End of loop. Must be greater than mtLoopStart. Or, 0, indicating loop full motif. */
- DWORD dwResolution; /* Default resolution. */
- } DMUS_IO_MOTIFSETTINGS;
-
- #pragma pack()
-
-
- /*
- RIFF
- (
- 'DMST' // Style
- <styh-ck> // Style header chunk
- <guid-ck> // Every Style has a GUID
- [<UNFO-list>] // Name, author, copyright info., comments
- [<vers-ck>] // version chunk
- <part-list>... // Array of parts in the Style, used by patterns
- <pttn-list>... // Array of patterns in the Style
- <DMBD-form>... // Array of bands in the Style
- [<prrf-list>]...// Optional array of chord map references in the Style
- )
-
- // <styh-ck>
- styh
- (
- <DMUS_IO_STYLE>
- )
-
- // <guid-ck>
- guid
- (
- <GUID>
- )
-
- // <vers-ck>
- vers
- (
- <DMUS_IO_VERSION>
- )
-
- // <part-list>
- LIST
- (
- 'part'
- <prth-ck> // Part header chunk
- [<UNFO-list>] // Name, author, copyright info., comments
- [<note-ck>] // Optional chunk containing an array of notes in Part
- [<crve-ck>] // Optional chunk containing an array of curves in Part
- [<mrkr-ck>] // Optional chunk containing an array of markers in Part
- [<rsln-ck>] // Optional chunk containing an array of variation resolutions in Part
- [<anpn-ck>] // Optional chunk containing an array of resolution anticipations in Part
- )
-
- // <orth-ck>
- prth
- (
- <DMUS_IO_STYLEPART>
- )
-
- // <note-ck>
- 'note'
- (
- // sizeof DMUS_IO_STYLENOTE:DWORD
- <DMUS_IO_STYLENOTE>...
- )
-
- // <crve-ck>
- 'crve'
- (
- // sizeof DMUS_IO_STYLECURVE:DWORD
- <DMUS_IO_STYLECURVE>...
- )
-
- // <mrkr-ck>
- 'mrkr'
- (
- // sizeof DMUS_IO_STYLEMARKER:DWORD
- <DMUS_IO_STYLEMARKER>...
- )
-
- // <rsln-ck>
- 'rsln'
- (
- // sizeof DMUS_IO_STYLERESOLUTION:DWORD
- <DMUS_IO_STYLERESOLUTION>...
- )
-
- // <anpn-ck>
- 'anpn'
- (
- // sizeof DMUS_IO_STYLE_ANTICIPATION:DWORD
- <DMUS_IO_STYLE_ANTICIPATION>...
- )
-
- // <pttn-list>
- LIST
- (
- 'pttn'
- <ptnh-ck> // Pattern header chunk
- <rhtm-ck> // Chunk containing an array of rhythms for chord matching
- [<UNFO-list>] // Name, author, copyright info., comments
- [<mtfs-ck>] // Motif settings chunk
- [<DMBD-form>] // Optional band to be associated with the pattern (for motifs)
- <pref-list>... // Array of part reference id's
- )
-
- // <ptnh-ck>
- ptnh
- (
- <DMUS_IO_PATTERN>
- )
-
- // <rhtm-ck>
- 'rhtm'
- (
- // DWORD's representing rhythms for chord matching based on number
- // of measures in the pattern
- )
-
-
- // pref-list
- LIST
- (
- 'pref'
- <prfc-ck> // part ref chunk
- )
-
- // <prfc-ck>
- prfc
- (
- <DMUS_IO_PARTREF>
- )
-
- // <mtfs-ck>
- mtfs
- (
- <DMUS_IO_MOTIFSETTINGS>
- )
-
- // <prrf-list>
- LIST
- (
- 'prrf'
- <DMRF-list>... // Array of Chordmap references
- )
- */
-
- /* Pattern chunk, for use in Pattern tracks */
-
- #define DMUS_FOURCC_PATTERN_FORM mmioFOURCC('D','M','P','T')
-
- /*
- RIFF
- (
- 'DMPT' // Pattern
- <styh-ck> // Style header chunk
- <pttn-list> // The pattern, in single pattern format (includes DMUS_FOURCC_PART_LIST chunks)
- )
- */
-
-
- /* Chord and command file formats */
-
- /* These specify possible values for DMUS_IO_COMMAND.bRepeatMode (DirectX8) */
- typedef enum enumDMUS_PATTERNT_TYPES
- {
- DMUS_PATTERNT_RANDOM = 0, /* Play randomly. (DirectX7 behavior) */
- DMUS_PATTERNT_REPEAT = 1, /* Repeat last pattern. */
- DMUS_PATTERNT_SEQUENTIAL = 2, /* Play sequential starting with first matching pattern. */
- DMUS_PATTERNT_RANDOM_START = 3, /* Play sequential starting with a random pattern. */
- DMUS_PATTERNT_NO_REPEAT = 4, /* Play randomly, but don't play the same pattern twice. */
- DMUS_PATTERNT_RANDOM_ROW = 5 /* Play randomly as a row: don't repeat any pattern until all have played. */
- } DMUS_PATTERNT_TYPES;
-
-
- #define DMUS_FOURCC_CHORDTRACK_LIST mmioFOURCC('c','o','r','d')
- #define DMUS_FOURCC_CHORDTRACKHEADER_CHUNK mmioFOURCC('c','r','d','h')
- #define DMUS_FOURCC_CHORDTRACKBODY_CHUNK mmioFOURCC('c','r','d','b')
-
- #define DMUS_FOURCC_COMMANDTRACK_CHUNK mmioFOURCC('c','m','n','d')
-
- typedef struct _DMUS_IO_CHORD
- {
- WCHAR wszName[16]; /* Name of the chord */
- MUSIC_TIME mtTime; /* Time of this chord */
- WORD wMeasure; /* Measure this falls on */
- BYTE bBeat; /* Beat this falls on */
- BYTE bFlags; /* Various flags */
- } DMUS_IO_CHORD;
-
- typedef struct _DMUS_IO_SUBCHORD
- {
- DWORD dwChordPattern; /* Notes in the subchord */
- DWORD dwScalePattern; /* Notes in the scale */
- DWORD dwInversionPoints; /* Where inversions can occur */
- DWORD dwLevels; /* Which levels are supported by this subchord */
- BYTE bChordRoot; /* Root of the subchord */
- BYTE bScaleRoot; /* Root of the scale */
- } DMUS_IO_SUBCHORD;
-
- typedef struct _DMUS_IO_COMMAND
- {
- MUSIC_TIME mtTime; /* Time of this command */
- WORD wMeasure; /* Measure this falls on */
- BYTE bBeat; /* Beat this falls on */
- BYTE bCommand; /* Command type (see #defines below) */
- BYTE bGrooveLevel; /* Groove level (0 if command is not a groove) */
- BYTE bGrooveRange; /* Groove range */
- BYTE bRepeatMode; /* Used to control selection of patterns with same groove level */
- } DMUS_IO_COMMAND;
-
-
- /*
-
- // <cord-list>
- LIST
- (
- 'cord'
- <crdh-ck>
- <crdb-ck>... // Chord body chunks
- )
-
- // <crdh-ck>
- crdh
- (
- // Scale: dword (upper 8 bits for root, lower 24 for scale)
- )
-
- // <crdb-ck>
- crdb
- (
- // sizeof DMUS_IO_CHORD:dword
- <DMUS_IO_CHORD>
- // # of DMUS_IO_SUBCHORDS:dword
- // sizeof DMUS_IO_SUBCHORDS:dword
- // a number of <DMUS_IO_SUBCHORD>
- )
-
-
- // <cmnd-list>
- 'cmnd'
- (
- //sizeof DMUS_IO_COMMAND: DWORD
- <DMUS_IO_COMMAND>...
- )
-
- */
-
- /* File io for DirectMusic Tool and ToolGraph objects
- */
-
- /* RIFF ids: */
-
- #define DMUS_FOURCC_TOOLGRAPH_FORM mmioFOURCC('D','M','T','G')
- #define DMUS_FOURCC_TOOL_LIST mmioFOURCC('t','o','l','l')
- #define DMUS_FOURCC_TOOL_FORM mmioFOURCC('D','M','T','L')
- #define DMUS_FOURCC_TOOL_CHUNK mmioFOURCC('t','o','l','h')
-
- /* io structures: */
-
- typedef struct _DMUS_IO_TOOL_HEADER
- {
- GUID guidClassID; /* Class id of tool. */
- long lIndex; /* Position in graph. */
- DWORD cPChannels; /* Number of items in channels array. */
- FOURCC ckid; /* chunk ID of tool's data chunk if 0 fccType valid. */
- FOURCC fccType; /* list type if NULL ckid valid. */
- DWORD dwPChannels[1]; /* Array of PChannels, size determined by cPChannels. */
- } DMUS_IO_TOOL_HEADER;
-
- /*
- RIFF
- (
- 'DMTG' // DirectMusic ToolGraph chunk
- [<guid-ck>] // GUID for ToolGraph
- [<vers-ck>] // Optional version info
- [<UNFO-list>] // Name, author, copyright info., comments
- <toll-list> // List of Tools
- )
-
- // <guid-ck>
- 'guid'
- (
- <GUID>
- )
-
- // <vers-ck>
- vers
- (
- <DMUS_IO_VERSION>
- )
-
- // <toll-list>
- LIST
- (
- 'toll' // Array of tools
- <DMTL-form>... // Each tool is encapsulated in a RIFF chunk
- )
-
- // <DMTL-form> Tools are embedded in a graph. Theoretically, they can be saved as individual files too.
- RIFF
- (
- 'DMTL'
- <tolh-ck>
- [<data>] // Tool data. Must be a RIFF readable chunk.
- )
-
- // <tolh-ck> // Tool header chunk
- (
- 'tolh'
- <DMUS_IO_TOOL_HEADER> // Tool header
- )
- */
-
- /* The AudioPath file carries everything for describing a specific audio path,
- including Tool Graph and Buffer Descriptor.
- This can even be used for configuring a complete performance.
- */
-
- #define DMUS_FOURCC_AUDIOPATH_FORM mmioFOURCC('D','M','A','P')
-
- /*
- RIFF
- (
- 'DMAP' // DirectMusic AudioPath chunk
- [<guid-ck>] // GUID for this Audio Path configuration
- [<vers-ck>] // Optional version info
- [<UNFO-list>] // Name, author, copyright info., comments
- [<DMTG-form>] // Optional ToolGraph
- [<pcsl-list>] // Optional list of port configurations
- [<dbfl-list>]...// Optional array of DirectSound buffer descriptors
- )
- */
-
- #define DMUS_FOURCC_PORTCONFIGS_LIST mmioFOURCC('p','c','s','l')
- #define DMUS_FOURCC_PORTCONFIG_LIST mmioFOURCC('p','c','f','l')
- #define DMUS_FOURCC_PORTCONFIG_ITEM mmioFOURCC('p','c','f','h')
- #define DMUS_FOURCC_PORTPARAMS_ITEM mmioFOURCC('p','p','r','h')
- #define DMUS_FOURCC_DSBUFFER_LIST mmioFOURCC('d','b','f','l')
- #define DMUS_FOURCC_DSBUFFATTR_ITEM mmioFOURCC('d','d','a','h')
- #define DMUS_FOURCC_PCHANNELS_LIST mmioFOURCC('p','c','h','l')
- #define DMUS_FOURCC_PCHANNELS_ITEM mmioFOURCC('p','c','h','h')
-
- typedef struct _DMUS_IO_PORTCONFIG_HEADER
- {
- GUID guidPort; /* GUID of requested port. */
- DWORD dwPChannelBase; /* PChannel that this should start on. */
- DWORD dwPChannelCount; /* How many channels. */
- DWORD dwFlags; /* Various flags. */
- } DMUS_IO_PORTCONFIG_HEADER;
-
- #define DMUS_PORTCONFIGF_DRUMSON10 1 /* This port configured for drums on channel 10. */
- #define DMUS_PORTCONFIGF_USEDEFAULT 2 /* Use the default port. */
-
- /* Each portconfig has one or more pchannel to buffer mappings. Each buffer
- is identified by a guid. Each pchannel can map to one or more buffers.
- This is defined with one or more DMUS_IO_PCHANNELTOBUFFER_HEADER
- structures. Each defines a range of PChannels and the set of buffers
- that they connect to.
- */
-
- typedef struct _DMUS_IO_PCHANNELTOBUFFER_HEADER
- {
- DWORD dwPChannelBase; /* PChannel that this should start on. */
- DWORD dwPChannelCount; /* How many PChannels. */
- DWORD dwBufferCount; /* How many buffers do these connect to. */
- DWORD dwFlags; /* Various flags. Currently reserved for future use. Must be 0. */
- } DMUS_IO_PCHANNELTOBUFFER_HEADER;
-
- /* Each buffer is represented by an DSBC form. This is wrapped by the
- DMUS_IO_BUFFER_ATTRIBUTES_HEADER which identifies how to use the
- buffer. In particular, it indicates whether this gets dynamically duplicated
- or all references to this should share the same instance.
- To resolve references, the unique GUID of the buffer is also stored
- in this structure.
- */
-
- typedef struct _DMUS_IO_BUFFER_ATTRIBUTES_HEADER
- {
- GUID guidBufferID; /* Each buffer config has a unique ID. */
- DWORD dwFlags; /* Various flags. */
- } DMUS_IO_BUFFER_ATTRIBUTES_HEADER;
-
- /* DMUS_IO_BUFFER_ATTRIBUTES_HEADER.dwFlags: */
- #define DMUS_BUFFERF_SHARED 1 /* Share this with other audio paths, instead of creating unique copies. */
- #define DMUS_BUFFERF_DEFINED 2 /* Use one of the standard predefined buffers (see GUID_Buffer... in dmusici.h.) */
- #define DMUS_BUFFERF_MIXIN 8 /* This is a mixin buffer. */
-
- /*
-
- LIST
- (
- 'pcsl' // Array of port configurations
- <pcfl-list>... // One or more port configurations, each in a list chunk
- )
-
- LIST
- (
- 'pcfl' // List container for one port configuration.
- <pcfh-ck> // Portconfig header chunk.
- <pprh-ck> // Port params, to be used to create the port.
- [<dbfl-list>]...// Optional array of DirectSound buffer descriptors
- [<pchl-list>] // Optional list of pchannel to buffer assignments
-
- )
-
- // <pcfh-ck> // Port config header chunk
- (
- 'pcfh'
- <DMUS_IO_PORTCONFIG_HEADER> // Port config header
- )
-
- // <pprh-ck> // Port params header chunk
- (
- 'pprh'
- <DMUS_PORTPARAMS8> // Port params header
- )
-
- LIST
- (
- 'pchl' // List container for one or more pchannel to buffer assignments.
- <pchh-ck>... // One or more pchannel to buffer assignment headers and data.
-
- // <pchh-ck>
- (
- 'pchh'
- <DMUS_IO_PCHANNELTOBUFFER_HEADER> // Description of PChannels
- <GUID>... // Array of GUIDs defining the buffers they all connect to.
- )
- )
-
- LIST
- (
- 'dbfl' // List container for one buffer and buffer attributes header.
- <ddah-ck> // Buffer attributes header.
- [<DSBC-form>] // Buffer configuration. Not required when header uses a predefined buffer type.
-
- // <ddah-ck>
- (
- 'ddah'
- <DMUS_IO_BUFFER_ATTRIBUTES_HEADER> // Buffer attributes.
- )
- )
- */
-
- /* File io for DirectMusic Band Track object */
-
-
- /* RIFF ids: */
- #define DMUS_FOURCC_BANDTRACK_FORM mmioFOURCC('D','M','B','T')
- #define DMUS_FOURCC_BANDTRACK_CHUNK mmioFOURCC('b','d','t','h')
- #define DMUS_FOURCC_BANDS_LIST mmioFOURCC('l','b','d','l')
- #define DMUS_FOURCC_BAND_LIST mmioFOURCC('l','b','n','d')
- #define DMUS_FOURCC_BANDITEM_CHUNK mmioFOURCC('b','d','i','h')
- #define DMUS_FOURCC_BANDITEM_CHUNK2 mmioFOURCC('b','d','2','h')
-
- /* io structures */
- typedef struct _DMUS_IO_BAND_TRACK_HEADER
- {
- BOOL bAutoDownload; /* Determines if Auto-Download is enabled. */
- } DMUS_IO_BAND_TRACK_HEADER;
-
- typedef struct _DMUS_IO_BAND_ITEM_HEADER
- {
- MUSIC_TIME lBandTime; /* Position in track list. */
- } DMUS_IO_BAND_ITEM_HEADER;
-
- typedef struct _DMUS_IO_BAND_ITEM_HEADER2
- {
- MUSIC_TIME lBandTimeLogical; /* Position in track list. Time in the music with which band change is associated. */
- MUSIC_TIME lBandTimePhysical; /* Precise time band change will take effect. Should be close to logical time. */
- } DMUS_IO_BAND_ITEM_HEADER2;
-
- /*
- RIFF
- (
- 'DMBT' // DirectMusic Band Track form-type
- [<bdth-ck>] // Band track header
- [<guid-ck>] // GUID for band track
- [<vers-ck>] // Optional version info
- [<UNFO-list>] // Name, author, copyright info., comments
- <lbdl-list> // List of Band items
- )
-
- // <bnth-ck>
- 'bdth'
- (
- <DMUS_IO_BAND_TRACK_HEADER>
- )
-
- // <guid-ck>
- 'guid'
- (
- <GUID>
- )
-
- // <vers-ck>
- vers
- (
- <DMUS_IO_VERSION>
- )
-
- // <lbdl-list>
- LIST
- (
- 'lbdl'
- <lbnd-list>... // Array of bands, each encapsulated in a list chunk
- )
-
- // <lbnd-list>
- LIST
- (
- 'lbnd'
- <bdih-ck> or <bd2h-ck> // bdih is a legacy format. bd2h is preferred for new content.
- <DMBD-form> // Band
- )
-
- // <bdih-ck> or <bd2h-ck> // band item header
- (
- <DMUS_IO_BAND_ITEM_HEADER> or <DMUS_IO_BAND_ITEM_HEADER2> // Band item header
- )
- */
-
-
- /* File io for DirectMusic Band object
- */
-
- /* RIFF ids: */
-
- #define DMUS_FOURCC_BAND_FORM mmioFOURCC('D','M','B','D')
- #define DMUS_FOURCC_INSTRUMENTS_LIST mmioFOURCC('l','b','i','l')
- #define DMUS_FOURCC_INSTRUMENT_LIST mmioFOURCC('l','b','i','n')
- #define DMUS_FOURCC_INSTRUMENT_CHUNK mmioFOURCC('b','i','n','s')
-
- /* Flags for DMUS_IO_INSTRUMENT
- */
- #define DMUS_IO_INST_PATCH (1 << 0) /* dwPatch is valid. */
- #define DMUS_IO_INST_BANKSELECT (1 << 1) /* dwPatch contains a valid Bank Select MSB and LSB part */
- #define DMUS_IO_INST_ASSIGN_PATCH (1 << 3) /* dwAssignPatch is valid */
- #define DMUS_IO_INST_NOTERANGES (1 << 4) /* dwNoteRanges is valid */
- #define DMUS_IO_INST_PAN (1 << 5) /* bPan is valid */
- #define DMUS_IO_INST_VOLUME (1 << 6 ) /* bVolume is valid */
- #define DMUS_IO_INST_TRANSPOSE (1 << 7) /* nTranspose is valid */
- #define DMUS_IO_INST_GM (1 << 8) /* Instrument is from GM collection */
- #define DMUS_IO_INST_GS (1 << 9) /* Instrument is from GS collection */
- #define DMUS_IO_INST_XG (1 << 10) /* Instrument is from XG collection */
- #define DMUS_IO_INST_CHANNEL_PRIORITY (1 << 11) /* dwChannelPriority is valid */
- #define DMUS_IO_INST_USE_DEFAULT_GM_SET (1 << 12) /* Always use the default GM set for this patch, */
- /* don't rely on the synth caps stating GM or GS in hardware. */
- #define DMUS_IO_INST_PITCHBENDRANGE (1 << 13) /* nPitchBendRange is valid */
-
- /* io structures */
- typedef struct _DMUS_IO_INSTRUMENT
- {
- DWORD dwPatch; /* MSB, LSB and Program change to define instrument */
- DWORD dwAssignPatch; /* MSB, LSB and Program change to assign to instrument when downloading */
- DWORD dwNoteRanges[4]; /* 128 bits; one for each MIDI note instrument needs to able to play */
- DWORD dwPChannel; /* PChannel instrument plays on */
- DWORD dwFlags; /* DMUS_IO_INST_ flags */
- BYTE bPan; /* Pan for instrument */
- BYTE bVolume; /* Volume for instrument */
- short nTranspose; /* Number of semitones to transpose notes */
- DWORD dwChannelPriority; /* Channel priority */
- short nPitchBendRange; /* Number of semitones shifted by pitch bend */
- } DMUS_IO_INSTRUMENT;
-
- /*
- // <DMBD-form> bands can be embedded in other forms
- RIFF
- (
- 'DMBD' // DirectMusic Band chunk
- [<guid-ck>] // GUID for band
- [<vers-ck>] // Optional version info
- [<UNFO-list>] // Name, author, copyright info., comments
- <lbil-list> // List of Instruments
- )
-
- // <guid-ck>
- 'guid'
- (
- <GUID>
- )
-
- // <vers-ck>
- vers
- (
- <DMUS_IO_VERSION>
- )
-
- // <lbil-list>
- LIST
- (
- 'lbil' // Array of instruments
- <lbin-list>... // Each instrument is encapsulated in a list
- )
-
- // <lbin-list>
- LIST
- (
- 'lbin'
- <bins-ck>
- [<DMRF-list>] // Optional reference to DLS Collection file.
- )
-
- // <bins-ck> // Instrument chunk
- (
- 'bins'
- <DMUS_IO_INSTRUMENT> // Instrument header
- )
- */
-
- /* This RIFF id and io struct have been added to allow wave files (and the wave object) to
- differentiate between streaming and one-shot waves, and to give a prefetch for streaming
- waves */
-
- #define DMUS_FOURCC_WAVEHEADER_CHUNK mmioFOURCC('w','a','v','h')
-
- typedef struct _DMUS_IO_WAVE_HEADER
- {
- REFERENCE_TIME rtReadAhead; /* How far ahead in the stream wave data will be read (in REFERENCE_TIME). Ignored for one-shot waves. */
- DWORD dwFlags; /* Various flags, including whether this is a streaming wave and whether it can be invalidated. */
- } DMUS_IO_WAVE_HEADER;
-
-
- /* File io for Wave track */
-
- /* RIFF ids: */
-
- #define DMUS_FOURCC_WAVETRACK_LIST mmioFOURCC('w','a','v','t')
- #define DMUS_FOURCC_WAVETRACK_CHUNK mmioFOURCC('w','a','t','h')
- #define DMUS_FOURCC_WAVEPART_LIST mmioFOURCC('w','a','v','p')
- #define DMUS_FOURCC_WAVEPART_CHUNK mmioFOURCC('w','a','p','h')
- #define DMUS_FOURCC_WAVEITEM_LIST mmioFOURCC('w','a','v','i')
- #define DMUS_FOURCC_WAVE_LIST mmioFOURCC('w','a','v','e')
- #define DMUS_FOURCC_WAVEITEM_CHUNK mmioFOURCC('w','a','i','h')
-
- /* This flag is included in DMUS_IO_WAVE_TRACK_HEADER.dwFlags. If set, the track will get its
- variations from a pattern track, via GetParam(GUID_Variations). */
- #define DMUS_WAVETRACKF_SYNC_VAR 0x1
- /* This is also included in DMUS_IO_WAVE_TRACK_HEADER.dwFlags. If set, variation control
- information will persist from one playback instance to the next.*/
- #define DMUS_WAVETRACKF_PERSIST_CONTROL 0x2
-
- typedef struct _DMUS_IO_WAVE_TRACK_HEADER
- {
- long lVolume; /* Gain, in 1/100th of dB, to be applied to all waves. Note: All gain values should be negative. */
- DWORD dwFlags; /* Flags, including whether this track syncs to a pattern track for its variations. */
- } DMUS_IO_WAVE_TRACK_HEADER;
-
- typedef struct _DMUS_IO_WAVE_PART_HEADER
- {
- long lVolume; /* Gain, in 1/100th of dB, to be applied to all waves in wave part. Note: All gain values should be negative. */
- DWORD dwVariations; /* Variation mask for which of 32 variations */
- DWORD dwPChannel; /* PChannel */
- DWORD dwLockToPart; /* Part ID to lock to. */
- DWORD dwFlags; /* Flags, including stuff for managing how variations are chosen (in low-order nibble) */
- DWORD dwIndex; /* Index for distinguishing multiple parts on the same PChannel*/
- } DMUS_IO_WAVE_PART_HEADER;
-
- typedef struct _DMUS_IO_WAVE_ITEM_HEADER
- {
- long lVolume; /* Gain, in 1/100th of dB. Note: All gain values should be negative. */
- long lPitch; /* Pitch offset in 1/100th of a semitone. */
- DWORD dwVariations; /* Variation flags for which of 32 variations this wave belongs to. */
- REFERENCE_TIME rtTime; /* Start time, in REFERENCE_TIME, if clock time track, or MUSIC_TIME for music time track. */
- REFERENCE_TIME rtStartOffset; /* Distance into wave to start playback, in reference time units. */
- REFERENCE_TIME rtReserved; /* Reserved field. */
- REFERENCE_TIME rtDuration; /* Duration, in REFERENCE_TIME or MUSIC_TIME, depending on track timing format. */
- MUSIC_TIME mtLogicalTime; /* If in music track format, this indicates the musical boundary where this belongs. Otherwise, ignored. */
- DWORD dwLoopStart; /* Start point for a looping wave. */
- DWORD dwLoopEnd; /* End point for a looping wave. */
- DWORD dwFlags; /* Various flags, including whether this is a streaming wave and whether it can be invalidated. */
- WORD wVolumeRange; /* Random range for volume. */
- WORD wPitchRange; /* Random range for pitch. */
- } DMUS_IO_WAVE_ITEM_HEADER;
-
- /*
- LIST
- {
- 'wavt' // Wave track chunk
- <wath-ck> // Wave track header
- <wavp-list>... // Array of Wave Parts
- }
- // <wath-ck>
- 'wath'
- {
- <DMUS_IO_WAVE_TRACK_HEADER>
- }
-
- // <wavp-list>
- LIST
- {
- 'wavp'
- <waph-ck> // Wave Part Header
- <wavi-list> // List of wave items
- }
-
- // <waph-ck>
- 'waph'
- {
- <DMUS_IO_WAVE_PART_HEADER>
- }
-
- // <wavi-list>
- LIST
- {
- 'wavi'
- <wave-list>... // Array of waves; each wave is encapsulated in a list
- }
-
- // <wave-list>
- LIST
- {
- 'wave'
- <waih-ck> // Wave item header
- <DMRF-list> // Reference to wave object
- }
-
- // <waih-ck>
- 'waih'
- {
- <DMUS_IO_WAVE_ITEM_HEADER>
- }
-
- */
-
- /* File io for DirectMusic Container file. This embeds a set of related files. And,
- in turn, it can be embedded within a segment or script file.
- */
-
- #define DMUS_FOURCC_CONTAINER_FORM mmioFOURCC('D','M','C','N')
- #define DMUS_FOURCC_CONTAINER_CHUNK mmioFOURCC('c','o','n','h')
- #define DMUS_FOURCC_CONTAINED_ALIAS_CHUNK mmioFOURCC('c','o','b','a')
- #define DMUS_FOURCC_CONTAINED_OBJECT_CHUNK mmioFOURCC('c','o','b','h')
- #define DMUS_FOURCC_CONTAINED_OBJECTS_LIST mmioFOURCC('c','o','s','l')
- #define DMUS_FOURCC_CONTAINED_OBJECT_LIST mmioFOURCC('c','o','b','l')
-
- typedef struct _DMUS_IO_CONTAINER_HEADER
- {
- DWORD dwFlags; /* Flags. */
- } DMUS_IO_CONTAINER_HEADER;
-
- #define DMUS_CONTAINER_NOLOADS (1 << 1) /* Contained items are not loaded when the container is loaded.
- Entries will be created in the loader (via SetObject) but
- the actual objects will not be created until they are
- specifically loaded at a later time. */
-
- typedef struct _DMUS_IO_CONTAINED_OBJECT_HEADER
- {
- GUID guidClassID; /* Class id of object. */
- DWORD dwFlags; /* Flags, for example DMUS_CONTAINED_OBJF_KEEP. */
- FOURCC ckid; /* chunk ID of track's data chunk if 0 fccType valid. */
- FOURCC fccType; /* list type if NULL ckid valid */
- /* Note that LIST:DMRF may be used for ckid and fccType in order to reference an
- object instead of embedding it within the container. */
- } DMUS_IO_CONTAINED_OBJECT_HEADER;
-
- #define DMUS_CONTAINED_OBJF_KEEP 1 /* Keep the object cached in the loader after the container is released. */
-
- /*
- RIFF
- (
- 'DMCN' // DirectMusic Container chunk
- <conh-ck> // Container header chunk
- [<guid-ck>] // GUID for container
- [<vers-ck>] // Optional version info
- [<UNFO-list>] // Name, author, copyright info., comments
- <cosl-list> // List of objects.
- )
-
- // <conh-ck>
- 'conh'
- (
- <DMUS_IO_CONTAINER_HEADER>
- )
-
- // <guid-ck>
- 'guid'
- (
- <GUID>
- )
-
- // <vers-ck>
- vers
- (
- <DMUS_IO_VERSION>
- )
-
- LIST
- (
- 'cosl' // Array of embedded objects.
- <cobl-list>... // Each object is encapsulated in a LIST chunk
- )
-
- // <cobl-list> // Encapsulates one object
- LIST
- (
- 'cobl'
- [<coba-ck>] // Alias. An alternative name by which this object is known
- // within the container.
- <cobh-ck> // Required header, includes CLASS ID for object.
- [<data>] or <DMRF> // Object data of the type specified in <cobh-ck>.
- // If DMRF, it is a reference of where to find the object.
- // Otherwise, it could be any RIFF readable chunk in the
- // exact same format as a file. The object will load
- // itself from this data.
- )
-
- // <coba-ck>
- 'coba'
- (
- // Alias, stored as NULL terminated string of WCHARs
- )
-
- // <cobh-ck>
- 'cobh'
- (
- <DMUS_IO_CONTAINED_OBJECT_HEADER>
- )
- */
-
- /* File io for DirectMusic Segment object */
-
- /* RIFF ids: */
-
- #define DMUS_FOURCC_SEGMENT_FORM mmioFOURCC('D','M','S','G')
- #define DMUS_FOURCC_SEGMENT_CHUNK mmioFOURCC('s','e','g','h')
- #define DMUS_FOURCC_TRACK_LIST mmioFOURCC('t','r','k','l')
- #define DMUS_FOURCC_TRACK_FORM mmioFOURCC('D','M','T','K')
- #define DMUS_FOURCC_TRACK_CHUNK mmioFOURCC('t','r','k','h')
- #define DMUS_FOURCC_TRACK_EXTRAS_CHUNK mmioFOURCC('t','r','k','x')
-
- /* io structures:*/
-
- typedef struct _DMUS_IO_SEGMENT_HEADER
- {
- DWORD dwRepeats; /* Number of repeats. By default, 0. */
- MUSIC_TIME mtLength; /* Length, in music time. */
- MUSIC_TIME mtPlayStart; /* Start of playback. By default, 0. */
- MUSIC_TIME mtLoopStart; /* Start of looping portion. By default, 0. */
- MUSIC_TIME mtLoopEnd; /* End of loop. Must be greater than dwPlayStart. Or, 0, indicating loop full segment. */
- DWORD dwResolution; /* Default resolution. */
- /* Following added for DirectX8: */
- REFERENCE_TIME rtLength; /* Length, in reference time (overrides music time length.) */
- DWORD dwFlags;
- DWORD dwReserved; /* Reserved. */
- /* Added for DirectX9: */
- REFERENCE_TIME rtLoopStart; /* Clock time loop start. */
- REFERENCE_TIME rtLoopEnd; /* Clock time loop end. */
- REFERENCE_TIME rtPlayStart; /* Start of playback in clock time. */
- } DMUS_IO_SEGMENT_HEADER;
-
- #define DMUS_SEGIOF_REFLENGTH 1 /* Use the time in rtLength for the segment length. */
- #define DMUS_SEGIOF_CLOCKTIME 2 /* This is a clock time segment. */
-
- typedef struct _DMUS_IO_TRACK_HEADER
- {
- GUID guidClassID; /* Class id of track. */
- DWORD dwPosition; /* Position in track list. */
- DWORD dwGroup; /* Group bits for track. */
- FOURCC ckid; /* chunk ID of track's data chunk. */
- FOURCC fccType; /* list type if ckid is RIFF or LIST */
- } DMUS_IO_TRACK_HEADER;
-
- /* Additional parameters for the track header chunk, introduced in DirectX8 and
- on, are stored in a separate chunk. */
-
- typedef struct _DMUS_IO_TRACK_EXTRAS_HEADER
- {
- DWORD dwFlags; /* DirectX8 Added flags for control tracks. */
- DWORD dwPriority; /* Priority for composition. */
- } DMUS_IO_TRACK_EXTRAS_HEADER;
-
- /*
- RIFF
- (
- 'DMSG' // DirectMusic Segment chunk
- <segh-ck> // Segment header chunk
- [<guid-ck>] // GUID for segment
- [<vers-ck>] // Optional version info
- [<UNFO-list>] // Name, author, copyright info., comments
- [<DMCN-form>] // Optional container of objects embedded in file. Must precede tracklist.
- <trkl-list> // List of Tracks
- [<DMTG-form>] // Optional ToolGraph
- [<DMAP-form>] // Optional Audio Path
- )
-
- // <segh-ck>
- 'segh'
- (
- <DMUS_IO_SEGMENT_HEADER>
- )
-
- // <guid-ck>
- 'guid'
- (
- <GUID>
- )
-
- // <vers-ck>
- vers
- (
- <DMUS_IO_VERSION>
- )
-
- // <trkl-list>
- LIST
- (
- 'trkl' // Array of tracks
- <DMTK-form>... // Each track is encapsulated in a RIFF chunk
- )
-
- // <DMTK-form> // Tracks can be embedded in a segment or stored as separate files.
- RIFF
- (
- 'DMTK'
- <trkh-ck>
- [<trkx-ck>] // Optional track flags.
- [<guid-ck>] // Optional GUID for track object instance (not to be confused with Class id in track header)
- [<vers-ck>] // Optional version info
- [<UNFO-list>] // Optional name, author, copyright info., comments
- [<data>] // Track data. Must be a RIFF readable chunk.
- )
-
- // <trkh-ck> // Track header chunk
- (
- 'trkh'
- <DMUS_IO_TRACK_HEADER> // Track header
- )
-
- // <trkx-ck> // Track flags chunk
- (
- 'trkx'
- <DMUS_IO_TRACK_EXTRAS_HEADER> // DirectX8 Track flags header
- )
- */
-
- /* File io for DirectMusic reference chunk.
- This is used to embed a reference to an object.
- */
-
- /* RIFF ids: */
-
- #define DMUS_FOURCC_REF_LIST mmioFOURCC('D','M','R','F')
- #define DMUS_FOURCC_REF_CHUNK mmioFOURCC('r','e','f','h')
- #define DMUS_FOURCC_DATE_CHUNK mmioFOURCC('d','a','t','e')
- #define DMUS_FOURCC_NAME_CHUNK mmioFOURCC('n','a','m','e')
- #define DMUS_FOURCC_FILE_CHUNK mmioFOURCC('f','i','l','e')
-
- typedef struct _DMUS_IO_REFERENCE
- {
- GUID guidClassID; /* Class id is always required. */
- DWORD dwValidData; /* Flags. */
- } DMUS_IO_REFERENCE;
-
- /*
- LIST
- (
- 'DMRF' // DirectMusic Reference chunk
- <refh-ck> // Reference header chunk
- [<guid-ck>] // Optional object GUID.
- [<date-ck>] // Optional file date.
- [<name-ck>] // Optional name.
- [<file-ck>] // Optional file name.
- [<catg-ck>] // Optional category name.
- [<vers-ck>] // Optional version info.
- )
-
- // <refh-ck>
- 'refh'
- (
- <DMUS_IO_REFERENCE>
- )
-
- // <guid-ck>
- 'guid'
- (
- <GUID>
- )
-
- // <date-ck>
- date
- (
- <FILETIME>
- )
-
- // <name-ck>
- name
- (
- // Name, stored as NULL terminated string of WCHARs
- )
-
- // <file-ck>
- file
- (
- // File name, stored as NULL terminated string of WCHARs
- )
-
- // <catg-ck>
- catg
- (
- // Category name, stored as NULL terminated string of WCHARs
- )
-
- // <vers-ck>
- vers
- (
- <DMUS_IO_VERSION>
- )
- */
-
- /* Chord Maps */
-
- /* runtime chunks */
- #define DMUS_FOURCC_CHORDMAP_FORM mmioFOURCC('D','M','P','R')
- #define DMUS_FOURCC_IOCHORDMAP_CHUNK mmioFOURCC('p','e','r','h')
- #define DMUS_FOURCC_SUBCHORD_CHUNK mmioFOURCC('c','h','d','t')
- #define DMUS_FOURCC_CHORDENTRY_CHUNK mmioFOURCC('c','h','e','h')
- #define DMUS_FOURCC_SUBCHORDID_CHUNK mmioFOURCC('s','b','c','n')
- #define DMUS_FOURCC_IONEXTCHORD_CHUNK mmioFOURCC('n','c','r','d')
- #define DMUS_FOURCC_NEXTCHORDSEQ_CHUNK mmioFOURCC('n','c','s','q')
- #define DMUS_FOURCC_IOSIGNPOST_CHUNK mmioFOURCC('s','p','s','h')
- #define DMUS_FOURCC_CHORDNAME_CHUNK mmioFOURCC('I','N','A','M')
-
- /* runtime list chunks */
- #define DMUS_FOURCC_CHORDENTRY_LIST mmioFOURCC('c','h','o','e')
- #define DMUS_FOURCC_CHORDMAP_LIST mmioFOURCC('c','m','a','p')
- #define DMUS_FOURCC_CHORD_LIST mmioFOURCC('c','h','r','d')
- #define DMUS_FOURCC_CHORDPALETTE_LIST mmioFOURCC('c','h','p','l')
- #define DMUS_FOURCC_CADENCE_LIST …
Large files files are truncated, but you can click here to view the full file