📄 dmusici.h
字号:
/* corresponding field in DMUSOBJECTDESC holds valid data. */
#define DMUS_OBJ_OBJECT (1 << 0) /* Object GUID is valid. */
#define DMUS_OBJ_CLASS (1 << 1) /* Class GUID is valid. */
#define DMUS_OBJ_NAME (1 << 2) /* Name is valid. */
#define DMUS_OBJ_CATEGORY (1 << 3) /* Category is valid. */
#define DMUS_OBJ_FILENAME (1 << 4) /* File path is valid. */
#define DMUS_OBJ_FULLPATH (1 << 5) /* Path is full path. */
#define DMUS_OBJ_URL (1 << 6) /* Path is URL. */
#define DMUS_OBJ_VERSION (1 << 7) /* Version is valid. */
#define DMUS_OBJ_DATE (1 << 8) /* Date is valid. */
#define DMUS_OBJ_LOADED (1 << 9) /* Object is currently loaded in memory. */
#define DMUS_OBJ_MEMORY (1 << 10) /* Object is pointed to by pbMemData. */
#define DMUS_OBJ_STREAM (1 << 11) /* Object is stored in pStream. */
/* The DMUS_SCRIPT_ERRORINFO structure describes an error that occurred in a script.
It is returned by methods in IDirectMusicScript. */
typedef struct _DMUS_SCRIPT_ERRORINFO
{
DWORD dwSize; /* Size of this structure. */
HRESULT hr;
ULONG ulLineNumber;
LONG ichCharPosition;
WCHAR wszSourceFile[DMUS_MAX_FILENAME];
WCHAR wszSourceComponent[DMUS_MAX_FILENAME];
WCHAR wszDescription[DMUS_MAX_FILENAME];
WCHAR wszSourceLineText[DMUS_MAX_FILENAME];
} DMUS_SCRIPT_ERRORINFO;
/* Track configuration flags, used with IDirectMusicSegment8::SetTrackConfig() */
#define DMUS_TRACKCONFIG_OVERRIDE_ALL 1 /* This track should get parameters from this segment before controlling and primary tracks. */
#define DMUS_TRACKCONFIG_OVERRIDE_PRIMARY 2 /* This track should get parameters from this segment before the primary segment tracks. */
#define DMUS_TRACKCONFIG_FALLBACK 4 /* This track should get parameters from this segment if the primary and controlling segments don't succeed. */
#define DMUS_TRACKCONFIG_CONTROL_ENABLED 8 /* GetParam() enabled for this track. */
#define DMUS_TRACKCONFIG_PLAY_ENABLED 0x10 /* Play() enabled for this track. */
#define DMUS_TRACKCONFIG_NOTIFICATION_ENABLED 0x20 /* Notifications enabled for this track. */
#define DMUS_TRACKCONFIG_PLAY_CLOCKTIME 0x40 /* This track plays in clock time, not music time. */
#define DMUS_TRACKCONFIG_PLAY_COMPOSE 0x80 /* This track should regenerate data each time it starts playing. */
#define DMUS_TRACKCONFIG_LOOP_COMPOSE 0x100 /* This track should regenerate data each time it repeats. */
#define DMUS_TRACKCONFIG_COMPOSING 0x200 /* This track is used to compose other tracks. */
#define DMUS_TRACKCONFIG_CONTROL_PLAY 0x10000 /* This track, when played in a controlling segment, overrides playback of primary segment tracks. */
#define DMUS_TRACKCONFIG_CONTROL_NOTIFICATION 0x20000 /* This track, when played in a controlling segment, overrides notification of primary segment tracks. */
/* Additional track config flags for composing transitions */
#define DMUS_TRACKCONFIG_TRANS1_FROMSEGSTART 0x400 /* Get track info from start of From segment */
#define DMUS_TRACKCONFIG_TRANS1_FROMSEGCURRENT 0x800 /* Get track info from current place in From segment */
#define DMUS_TRACKCONFIG_TRANS1_TOSEGSTART 0x1000 /* Get track info from start of To segment */
#define DMUS_TRACKCONFIG_DEFAULT (DMUS_TRACKCONFIG_CONTROL_ENABLED | DMUS_TRACKCONFIG_PLAY_ENABLED | DMUS_TRACKCONFIG_NOTIFICATION_ENABLED)
/* #defines for melody fragments */
/* Note: Melody formulation is not supported in DX8. */
#define DMUS_MAX_FRAGMENTLABEL 20
#define DMUS_FRAGMENTF_USE_REPEAT 0x1
#define DMUS_FRAGMENTF_REJECT_REPEAT (0x1 << 1)
#define DMUS_FRAGMENTF_USE_LABEL (0x1 << 2)
#define DMUS_CONNECTIONF_INTERVALS (0x1 << 1) /* Use transition intervals */
#define DMUS_CONNECTIONF_OVERLAP (0x1 << 2) /* Use overlapping notes for transitions */
/* Get/SetParam structs for commands */
/* PARAM structures, used by GetParam() and SetParam() */
typedef struct _DMUS_COMMAND_PARAM
{
BYTE bCommand;
BYTE bGrooveLevel;
BYTE bGrooveRange;
BYTE bRepeatMode;
} DMUS_COMMAND_PARAM;
typedef struct _DMUS_COMMAND_PARAM_2
{
MUSIC_TIME mtTime;
BYTE bCommand;
BYTE bGrooveLevel;
BYTE bGrooveRange;
BYTE bRepeatMode;
} DMUS_COMMAND_PARAM_2;
/* Get/SetParam structs for melody fragments */
/* Note: Melody formulation is not supported in DX8. */
typedef struct _DMUS_CONNECTION_RULE
{
DWORD dwFlags; /* DMUS_CONNECTIONF_ flags */
DWORD dwIntervals; /* Legal transition intervals (first 24 bits; two-octave range) */
} DMUS_CONNECTION_RULE;
typedef struct _DMUS_MELODY_FRAGMENT
{
MUSIC_TIME mtTime;
DWORD dwID; /* This fragment's ID */
WCHAR wszVariationLabel[DMUS_MAX_FRAGMENTLABEL]; /* Each style translates this into a set of variations (held in part ref) */
DWORD dwVariationFlags; /* A set of variations */
DWORD dwRepeatFragmentID; /* ID of a fragment to repeat */
DWORD dwFragmentFlags; /* DMUS_FRAGMENTF_ flags */
DWORD dwPlayModeFlags; /* NOT CURRENTLY USED - MUST BE 0 */
DWORD dwTransposeIntervals; /* Legal transposition intervals (first 24 bits; two-octave range) */
DMUS_COMMAND_PARAM Command;
DMUS_CONNECTION_RULE ConnectionArc;
} DMUS_MELODY_FRAGMENT;
typedef IDirectMusicObject __RPC_FAR *LPDMUS_OBJECT;
typedef IDirectMusicLoader __RPC_FAR *LPDMUS_LOADER;
typedef IDirectMusicBand __RPC_FAR *LPDMUS_BAND;
#define DMUSB_LOADED (1 << 0) /* Set when band has been loaded */
#define DMUSB_DEFAULT (1 << 1) /* Set when band is default band for a style */
/*////////////////////////////////////////////////////////////////////
// IDirectMusicBand */
#undef INTERFACE
#define INTERFACE IDirectMusicBand
DECLARE_INTERFACE_(IDirectMusicBand, IUnknown)
{
/* IUnknown */
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
/* IDirectMusicBand */
STDMETHOD(CreateSegment) (THIS_ IDirectMusicSegment** ppSegment) PURE;
STDMETHOD(Download) (THIS_ IDirectMusicPerformance* pPerformance) PURE;
STDMETHOD(Unload) (THIS_ IDirectMusicPerformance* pPerformance) PURE;
};
typedef IDirectMusicBand IDirectMusicBand8;
/*////////////////////////////////////////////////////////////////////
// IDirectMusicObject */
#undef INTERFACE
#define INTERFACE IDirectMusicObject
DECLARE_INTERFACE_(IDirectMusicObject, IUnknown)
{
/* IUnknown */
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
/* IDirectMusicObject */
STDMETHOD(GetDescriptor) (THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
STDMETHOD(SetDescriptor) (THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
STDMETHOD(ParseDescriptor) (THIS_ LPSTREAM pStream,
LPDMUS_OBJECTDESC pDesc) PURE;
};
typedef IDirectMusicObject IDirectMusicObject8;
/*////////////////////////////////////////////////////////////////////
// IDirectMusicLoader */
#undef INTERFACE
#define INTERFACE IDirectMusicLoader
DECLARE_INTERFACE_(IDirectMusicLoader, IUnknown)
{
/* IUnknown */
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
/* IDirectMusicLoader */
STDMETHOD(GetObject) (THIS_ LPDMUS_OBJECTDESC pDesc,
REFIID riid,
LPVOID FAR *ppv) PURE;
STDMETHOD(SetObject) (THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
STDMETHOD(SetSearchDirectory) (THIS_ REFGUID rguidClass,
WCHAR *pwzPath,
BOOL fClear) PURE;
STDMETHOD(ScanDirectory) (THIS_ REFGUID rguidClass,
WCHAR *pwzFileExtension,
WCHAR *pwzScanFileName) PURE;
STDMETHOD(CacheObject) (THIS_ IDirectMusicObject * pObject) PURE;
STDMETHOD(ReleaseObject) (THIS_ IDirectMusicObject * pObject) PURE;
STDMETHOD(ClearCache) (THIS_ REFGUID rguidClass) PURE;
STDMETHOD(EnableCache) (THIS_ REFGUID rguidClass,
BOOL fEnable) PURE;
STDMETHOD(EnumObject) (THIS_ REFGUID rguidClass,
DWORD dwIndex,
LPDMUS_OBJECTDESC pDesc) PURE;
};
/*////////////////////////////////////////////////////////////////////
// IDirectMusicLoader8 */
#undef INTERFACE
#define INTERFACE IDirectMusicLoader8
DECLARE_INTERFACE_(IDirectMusicLoader8, IDirectMusicLoader)
{
/* IUnknown */
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
/* IDirectMusicLoader */
STDMETHOD(GetObject) (THIS_ LPDMUS_OBJECTDESC pDesc,
REFIID riid,
LPVOID FAR *ppv) PURE;
STDMETHOD(SetObject) (THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
STDMETHOD(SetSearchDirectory) (THIS_ REFGUID rguidClass,
WCHAR *pwzPath,
BOOL fClear) PURE;
STDMETHOD(ScanDirectory) (THIS_ REFGUID rguidClass,
WCHAR *pwzFileExtension,
WCHAR *pwzScanFileName) PURE;
STDMETHOD(CacheObject) (THIS_ IDirectMusicObject * pObject) PURE;
STDMETHOD(ReleaseObject) (THIS_ IDirectMusicObject * pObject) PURE;
STDMETHOD(ClearCache) (THIS_ REFGUID rguidClass) PURE;
STDMETHOD(EnableCache) (THIS_ REFGUID rguidClass,
BOOL fEnable) PURE;
STDMETHOD(EnumObject) (THIS_ REFGUID rguidClass,
DWORD dwIndex,
LPDMUS_OBJECTDESC pDesc) PURE;
/* IDirectMusicLoader8 */
STDMETHOD_(void, CollectGarbage) (THIS) PURE;
STDMETHOD(ReleaseObjectByUnknown) (THIS_ IUnknown *pObject) PURE;
STDMETHOD(LoadObjectFromFile) (THIS_ REFGUID rguidClassID,
REFIID iidInterfaceID,
WCHAR *pwzFilePath,
void ** ppObject) PURE;
};
/* Stream object supports IDirectMusicGetLoader interface to access loader while file parsing. */
#undef INTERFACE
#define INTERFACE IDirectMusicGetLoader
DECLARE_INTERFACE_(IDirectMusicGetLoader, IUnknown)
{
/* IUnknown */
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
/* IDirectMusicGetLoader */
STDMETHOD(GetLoader) (THIS_ IDirectMusicLoader ** ppLoader) PURE;
};
typedef IDirectMusicGetLoader IDirectMusicGetLoader8;
/*////////////////////////////////////////////////////////////////////
// IDirectMusicSegment */
#undef INTERFACE
#define INTERFACE IDirectMusicSegment
DECLARE_INTERFACE_(IDirectMusicSegment, IUnknown)
{
/* IUnknown */
STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -