1179 lines
34 KiB
C
1179 lines
34 KiB
C
|
/************************************************************************
|
||
|
* *
|
||
|
* dmusicf.h -- This module defines the DirectMusic file formats *
|
||
|
* *
|
||
|
* Copyright (c) 1998, Microsoft Corp. 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;
|
||
|
} 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 struct _DMUS_IO_TIMESIGNATURE_ITEM
|
||
|
{
|
||
|
MUSIC_TIME lTime;
|
||
|
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_TIMESIGNATURE_ITEM;
|
||
|
|
||
|
/* PARAM structures, used by GetParam() and SetParam() */
|
||
|
typedef struct _DMUS_COMMAND_PARAM
|
||
|
{
|
||
|
BYTE bCommand;
|
||
|
BYTE bGrooveLevel;
|
||
|
BYTE bGrooveRange;
|
||
|
} DMUS_COMMAND_PARAM;
|
||
|
|
||
|
typedef struct _DMUS_COMMAND_PARAM_2
|
||
|
{
|
||
|
MUSIC_TIME mtTime;
|
||
|
BYTE bCommand;
|
||
|
BYTE bGrooveLevel;
|
||
|
BYTE bGrooveRange;
|
||
|
} DMUS_COMMAND_PARAM_2;
|
||
|
|
||
|
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_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. */
|
||
|
|
||
|
/* The top three bits of the variation flags are the Mode bits. If all are 0, it's IMA. */
|
||
|
/* If the smallest is 1, it's Direct Music. */
|
||
|
#define DMUS_VARIATIONF_MODES 0xE0000000
|
||
|
#define DMUS_VARIATIONF_IMA25_MODE 0x00000000
|
||
|
#define DMUS_VARIATIONF_DMUS_MODE 0x20000000
|
||
|
|
||
|
#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 */
|
||
|
} 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 */
|
||
|
} 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 */
|
||
|
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 */
|
||
|
} 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 */
|
||
|
} 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. */
|
||
|
} DMUS_IO_STYLECURVE;
|
||
|
|
||
|
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. By default equal to length of 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>... // List of parts in the Style, used by patterns
|
||
|
<pttn-list>... // List of patterns in the Style
|
||
|
<DMBD-form>... // List of bands in the Style
|
||
|
[<motf-list>] // List of motifs in the Style
|
||
|
[<prrf-list>] // List 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>]
|
||
|
[<note-ck>] // List of notes in Part
|
||
|
[<crve-ck>] // List of curves 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>...
|
||
|
)
|
||
|
|
||
|
// <pttn-list>
|
||
|
LIST
|
||
|
(
|
||
|
'pttn'
|
||
|
<ptnh-ck> // Pattern header chunk
|
||
|
<rhtm-ck> // List of rhythms for chord matching
|
||
|
[<UNFO-list>]
|
||
|
[<mtfs-ck>] // Motif settings chunk
|
||
|
<pref-list>... // List 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'
|
||
|
// some number of <DMRF>
|
||
|
)
|
||
|
*/
|
||
|
|
||
|
/* Chord and command file formats */
|
||
|
|
||
|
#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 */
|
||
|
} 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 */
|
||
|
} DMUS_IO_COMMAND;
|
||
|
|
||
|
|
||
|
/*
|
||
|
|
||
|
// <cord-list>
|
||
|
LIST
|
||
|
(
|
||
|
'cord'
|
||
|
<crdh-ck>
|
||
|
<crdb-ck> // Chord body chunk
|
||
|
)
|
||
|
|
||
|
// <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' // List of tools
|
||
|
<DMTL-form>... // Each tool is encapsulated in a RIFF chunk
|
||
|
)
|
||
|
|
||
|
// <DMTL-form> // Tools can be embedded in a graph or stored as separate files.
|
||
|
RIFF
|
||
|
(
|
||
|
'DMTL'
|
||
|
<tolh-ck>
|
||
|
[<guid-ck>] // Optional GUID for tool 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>] // Tool data. Must be a RIFF readable chunk.
|
||
|
)
|
||
|
|
||
|
// <tolh-ck> // Tool header chunk
|
||
|
(
|
||
|
'tolh'
|
||
|
<DMUS_IO_TOOL_HEADER> // Tool header
|
||
|
)
|
||
|
*/
|
||
|
|
||
|
/* 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')
|
||
|
|
||
|
/* 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;
|
||
|
|
||
|
/*
|
||
|
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 Lists
|
||
|
)
|
||
|
|
||
|
// <bnth-ck>
|
||
|
'bdth'
|
||
|
(
|
||
|
<DMUS_IO_BAND_TRACK_HEADER>
|
||
|
)
|
||
|
|
||
|
// <guid-ck>
|
||
|
'guid'
|
||
|
(
|
||
|
<GUID>
|
||
|
)
|
||
|
|
||
|
// <vers-ck>
|
||
|
vers
|
||
|
(
|
||
|
<DMUS_IO_VERSION>
|
||
|
)
|
||
|
|
||
|
// <lbdl-list>
|
||
|
LIST
|
||
|
(
|
||
|
'lbdl' // List of bands
|
||
|
<lbnd-list> // Each band is encapsulated in a list
|
||
|
)
|
||
|
|
||
|
// <lbnd-list>
|
||
|
LIST
|
||
|
(
|
||
|
'lbnd'
|
||
|
<bdih-ck>
|
||
|
<DMBD-form> // Band
|
||
|
)
|
||
|
|
||
|
// <bdih-ck> // band item header
|
||
|
(
|
||
|
<DMUS_IO_BAND_ITEM_HEADER> // 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. */
|
||
|
|
||
|
/* 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 */
|
||
|
} 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' // List 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
|
||
|
)
|
||
|
*/
|
||
|
|
||
|
/* 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')
|
||
|
|
||
|
/* 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. By default equal to length. */
|
||
|
DWORD dwResolution; /* Default resolution. */
|
||
|
} DMUS_IO_SEGMENT_HEADER;
|
||
|
|
||
|
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 if 0 fccType valid. */
|
||
|
FOURCC fccType; /* list type if NULL ckid valid */
|
||
|
} DMUS_IO_TRACK_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
|
||
|
<trkl-list> // List of Tracks
|
||
|
[<DMTG-form>] // Optional ToolGraph
|
||
|
)
|
||
|
|
||
|
// <segh-ck>
|
||
|
'segh'
|
||
|
(
|
||
|
<DMUS_IO_SEGMENT_HEADER>
|
||
|
)
|
||
|
|
||
|
// <guid-ck>
|
||
|
'guid'
|
||
|
(
|
||
|
<GUID>
|
||
|
)
|
||
|
|
||
|
// <vers-ck>
|
||
|
vers
|
||
|
(
|
||
|
<DMUS_IO_VERSION>
|
||
|
)
|
||
|
|
||
|
// <trkl-list>
|
||
|
LIST
|
||
|
(
|
||
|
'trkl' // List 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>
|
||
|
[<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
|
||
|
)
|
||
|
*/
|
||
|
|
||
|
/* 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 mmioFOURCC('c','a','d','e')
|
||
|
#define DMUS_FOURCC_SIGNPOSTITEM_LIST mmioFOURCC('s','p','s','t')
|
||
|
|
||
|
#define DMUS_FOURCC_SIGNPOST_LIST mmioFOURCC('s','p','s','q')
|
||
|
|
||
|
/* values for dwChord field of DMUS_IO_PERS_SIGNPOST */
|
||
|
/* DMUS_SIGNPOSTF_ flags are also used in templates (DMUS_IO_SIGNPOST) */
|
||
|
#define DMUS_SIGNPOSTF_A 1
|
||
|
#define DMUS_SIGNPOSTF_B 2
|
||
|
#define DMUS_SIGNPOSTF_C 4
|
||
|
#define DMUS_SIGNPOSTF_D 8
|
||
|
#define DMUS_SIGNPOSTF_E 0x10
|
||
|
#define DMUS_SIGNPOSTF_F 0x20
|
||
|
#define DMUS_SIGNPOSTF_LETTER (DMUS_SIGNPOSTF_A | DMUS_SIGNPOSTF_B | DMUS_SIGNPOSTF_C | DMUS_SIGNPOSTF_D | DMUS_SIGNPOSTF_E | DMUS_SIGNPOSTF_F)
|
||
|
#define DMUS_SIGNPOSTF_1 0x100
|
||
|
#define DMUS_SIGNPOSTF_2 0x200
|
||
|
#define DMUS_SIGNPOSTF_3 0x400
|
||
|
#define DMUS_SIGNPOSTF_4 0x800
|
||
|
#define DMUS_SIGNPOSTF_5 0x1000
|
||
|
#define DMUS_SIGNPOSTF_6 0x2000
|
||
|
#define DMUS_SIGNPOSTF_7 0x4000
|
||
|
#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)
|
||
|
#define DMUS_SIGNPOSTF_CADENCE 0x8000
|
||
|
|
||
|
/* values for dwChord field of DMUS_IO_PERS_SIGNPOST */
|
||
|
#define DMUS_SPOSTCADENCEF_1 2 /* Use the first cadence chord. */
|
||
|
#define DMUS_SPOSTCADENCEF_2 4 /* Use the second cadence chord. */
|
||
|
|
||
|
/* run time data structs */
|
||
|
typedef struct _DMUS_IO_CHORDMAP
|
||
|
{
|
||
|
WCHAR wszLoadName[20];
|
||
|
DWORD dwScalePattern;
|
||
|
DWORD dwFlags;
|
||
|
} DMUS_IO_CHORDMAP;
|
||
|
|
||
|
typedef struct _DMUS_IO_CHORDMAP_SUBCHORD
|
||
|
{
|
||
|
DWORD dwChordPattern;
|
||
|
DWORD dwScalePattern;
|
||
|
DWORD dwInvertPattern;
|
||
|
BYTE bChordRoot;
|
||
|
BYTE bScaleRoot;
|
||
|
WORD wCFlags;
|
||
|
DWORD dwLevels; /* parts or which subchord levels this chord supports */
|
||
|
} DMUS_IO_CHORDMAP_SUBCHORD;
|
||
|
|
||
|
/* Legacy name... */
|
||
|
typedef DMUS_IO_CHORDMAP_SUBCHORD DMUS_IO_PERS_SUBCHORD;
|
||
|
|
||
|
typedef struct _DMUS_IO_CHORDENTRY
|
||
|
{
|
||
|
DWORD dwFlags;
|
||
|
WORD wConnectionID; /* replaces runtime "pointer to this" */
|
||
|
} DMUS_IO_CHORDENTRY;
|
||
|
|
||
|
typedef struct _DMUS_IO_NEXTCHORD
|
||
|
{
|
||
|
DWORD dwFlags;
|
||
|
WORD nWeight;
|
||
|
WORD wMinBeats;
|
||
|
WORD wMaxBeats;
|
||
|
WORD wConnectionID; /* points to an ioChordEntry */
|
||
|
} DMUS_IO_NEXTCHORD;
|
||
|
|
||
|
typedef struct _DMUS_IO_CHORDMAP_SIGNPOST
|
||
|
{
|
||
|
DWORD dwChords; /* 1bit per group */
|
||
|
DWORD dwFlags;
|
||
|
} DMUS_IO_CHORDMAP_SIGNPOST;
|
||
|
|
||
|
/* Legacy name... */
|
||
|
typedef DMUS_IO_CHORDMAP_SIGNPOST DMUS_IO_PERS_SIGNPOST;
|
||
|
|
||
|
/*
|
||
|
RIFF
|
||
|
(
|
||
|
'DMPR'
|
||
|
<perh-ck> // Chord map header chunk
|
||
|
[<guid-ck>] // guid chunk
|
||
|
[<vers-ck>] // version chunk (two DWORDS)
|
||
|
[<UNFO-list>] // Unfo chunk
|
||
|
<chdt-ck> // subchord database
|
||
|
<chpl-list> // chord palette
|
||
|
<cmap-list> // chord map
|
||
|
<spsq-list> // signpost list
|
||
|
)
|
||
|
|
||
|
<cmap-list> ::= LIST('cmap' <choe-list> )
|
||
|
|
||
|
<choe-list> ::= LIST('choe'
|
||
|
<cheh-ck> // chord entry data
|
||
|
<chrd-list> // chord definition
|
||
|
<ncsq-ck> // connecting(next) chords
|
||
|
)
|
||
|
|
||
|
<chrd-list> ::= LIST('chrd'
|
||
|
<INAM-ck> // name of chord in wide char format
|
||
|
<sbcn-ck> // list of subchords composing chord
|
||
|
)
|
||
|
|
||
|
<chpl-list> ::= LIST('chpl'
|
||
|
<chrd-list> ... // chord definition
|
||
|
)
|
||
|
|
||
|
<spsq-list> ::== LIST('spsq' <spst-list> ... )
|
||
|
|
||
|
<spst-list> ::= LIST('spst'
|
||
|
<spsh-ck>
|
||
|
<chrd-list>
|
||
|
[<cade-list>]
|
||
|
)
|
||
|
|
||
|
<cade-list> ::= LIST('cade' <chrd-list> ...)
|
||
|
|
||
|
<perh-ck> ::= perh(<DMUS_IO_CHORDMAP>)
|
||
|
|
||
|
<chdt-ck> ::= chdt(<cbChordSize::WORD>
|
||
|
<DMUS_IO_PERS_SUBCHORD> ... )
|
||
|
|
||
|
<cheh-ck> ::= cheh(<DMUS_IO_CHORDENTRY>)
|
||
|
|
||
|
<sbcn-ck> ::= sbcn(<cSubChordID:WORD> ...)
|
||
|
|
||
|
<ncsq-ck> ::= ncsq(<wNextChordSize:WORD>
|
||
|
<DMUS_IO_NEXTCHORD>...)
|
||
|
|
||
|
<spsh-ck> ::= spsh(<DMUS_IO_PERS_SIGNPOST>)
|
||
|
|
||
|
*/
|
||
|
|
||
|
/* Signpost tracks */
|
||
|
|
||
|
#define DMUS_FOURCC_SIGNPOST_TRACK_CHUNK mmioFOURCC( 's', 'g', 'n', 'p' )
|
||
|
|
||
|
|
||
|
typedef struct _DMUS_IO_SIGNPOST
|
||
|
{
|
||
|
MUSIC_TIME mtTime;
|
||
|
DWORD dwChords;
|
||
|
WORD wMeasure;
|
||
|
} DMUS_IO_SIGNPOST;
|
||
|
|
||
|
/*
|
||
|
|
||
|
// <sgnp-list>
|
||
|
'sgnp'
|
||
|
(
|
||
|
//sizeof DMUS_IO_SIGNPOST: DWORD
|
||
|
<DMUS_IO_SIGNPOST>...
|
||
|
)
|
||
|
|
||
|
*/
|
||
|
|
||
|
#define DMUS_FOURCC_MUTE_CHUNK mmioFOURCC('m','u','t','e')
|
||
|
|
||
|
typedef struct _DMUS_IO_MUTE
|
||
|
{
|
||
|
MUSIC_TIME mtTime;
|
||
|
DWORD dwPChannel;
|
||
|
DWORD dwPChannelMap;
|
||
|
} DMUS_IO_MUTE;
|
||
|
|
||
|
/*
|
||
|
|
||
|
// <mute-list>
|
||
|
'mute'
|
||
|
(
|
||
|
//sizeof DMUS_IO_MUTE:DWORD
|
||
|
<DMUS_IO_MUTE>...
|
||
|
)
|
||
|
|
||
|
|
||
|
*/
|
||
|
|
||
|
/* Used for both style and chord map tracks */
|
||
|
|
||
|
#define DMUS_FOURCC_TIME_STAMP_CHUNK mmioFOURCC('s', 't', 'm', 'p')
|
||
|
|
||
|
/* Style tracks */
|
||
|
|
||
|
#define DMUS_FOURCC_STYLE_TRACK_LIST mmioFOURCC('s', 't', 't', 'r')
|
||
|
#define DMUS_FOURCC_STYLE_REF_LIST mmioFOURCC('s', 't', 'r', 'f')
|
||
|
|
||
|
/*
|
||
|
|
||
|
// <sttr-list>
|
||
|
LIST('sttr'
|
||
|
(
|
||
|
// some number of <strf-list>
|
||
|
)
|
||
|
|
||
|
// <strf-list>
|
||
|
LIST('strf'
|
||
|
(
|
||
|
<stmp-ck>
|
||
|
<DMRF>
|
||
|
)
|
||
|
|
||
|
// <stmp-ck> defined in ..\dmcompos\dmcompp.h
|
||
|
|
||
|
*/
|
||
|
|
||
|
/* Chord map tracks */
|
||
|
|
||
|
#define DMUS_FOURCC_PERS_TRACK_LIST mmioFOURCC('p', 'f', 't', 'r')
|
||
|
#define DMUS_FOURCC_PERS_REF_LIST mmioFOURCC('p', 'f', 'r', 'f')
|
||
|
|
||
|
/*
|
||
|
|
||
|
// <pftr-list>
|
||
|
LIST('pftr'
|
||
|
(
|
||
|
// some number of <pfrf-list>
|
||
|
)
|
||
|
|
||
|
// <pfrf-list>
|
||
|
LIST('pfrf'
|
||
|
(
|
||
|
<stmp-ck>
|
||
|
<DMRF>
|
||
|
)
|
||
|
|
||
|
// <stmp-ck>
|
||
|
'stmp'
|
||
|
(
|
||
|
// time:DWORD
|
||
|
)
|
||
|
|
||
|
|
||
|
|
||
|
*/
|
||
|
|
||
|
#define DMUS_FOURCC_TEMPO_TRACK mmioFOURCC('t','e','t','r')
|
||
|
|
||
|
/*
|
||
|
// tempo list
|
||
|
'tetr'
|
||
|
(
|
||
|
// sizeof DMUS_IO_TEMPO_ITEM: DWORD
|
||
|
<DMUS_IO_TEMPO_ITEM>...
|
||
|
)
|
||
|
*/
|
||
|
|
||
|
#define DMUS_FOURCC_SEQ_TRACK mmioFOURCC('s','e','q','t')
|
||
|
#define DMUS_FOURCC_SEQ_LIST mmioFOURCC('e','v','t','l')
|
||
|
#define DMUS_FOURCC_CURVE_LIST mmioFOURCC('c','u','r','l')
|
||
|
|
||
|
/*
|
||
|
// sequence track
|
||
|
'seqt'
|
||
|
(
|
||
|
// sequence list
|
||
|
'evtl'
|
||
|
(
|
||
|
// sizeof DMUS_IO_SEQ_ITEM: DWORD
|
||
|
<DMUS_IO_SEQ_ITEM>...
|
||
|
)
|
||
|
// curve list
|
||
|
'curl'
|
||
|
(
|
||
|
// sizeof DMUS_IO_CURVE_ITEM: DWORD
|
||
|
<DMUS_IO_CURVE_ITEM>...
|
||
|
)
|
||
|
)
|
||
|
*/
|
||
|
|
||
|
#define DMUS_FOURCC_SYSEX_TRACK mmioFOURCC('s','y','e','x')
|
||
|
|
||
|
/*
|
||
|
// sysex track
|
||
|
'syex'
|
||
|
(
|
||
|
// list of:
|
||
|
// {
|
||
|
// <DMUS_IO_SYSEX_ITEM>
|
||
|
// sys-ex: data
|
||
|
// }...
|
||
|
)
|
||
|
*/
|
||
|
|
||
|
#define DMUS_FOURCC_TIMESIGNATURE_TRACK mmioFOURCC('t','i','m','s')
|
||
|
|
||
|
/*
|
||
|
// time signature track
|
||
|
'tims'
|
||
|
(
|
||
|
// size of DMUS_IO_TIMESIGNATURE_ITEM : DWORD
|
||
|
<DMUS_IO_TIMESIGNATURE_ITEM>...
|
||
|
)
|
||
|
*/
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}; /* extern "C" */
|
||
|
#endif
|
||
|
|
||
|
#include <poppack.h>
|
||
|
|
||
|
#endif /* #ifndef _DMUSICF_ */
|