📄 dmusicf.h
字号:
)
)
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. */
} 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.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -