📄 xact.h
字号:
// Notification structure for all XACTNOTIFICATIONTYPE_*VARIABLE* notifications
typedef struct XACT_NOTIFICATION_VARIABLE
{
XACTINDEX cueIndex; // Cue index
IXACTSoundBank* pSoundBank; // SoundBank instance
IXACTCue* pCue; // Cue instance
XACTVARIABLEINDEX variableIndex; // Variable index
XACTVARIABLEVALUE variableValue; // Variable value
BOOL local; // TRUE if a local variable
} XACT_NOTIFICATION_VARIABLE, *LPXACT_NOTIFICATION_VARIABLE;
typedef const XACT_NOTIFICATION_VARIABLE *LPCXACT_NOTIFICATION_VARIABLE;
// Notification structure for all XACTNOTIFICATIONTYPE_GUI* notifications
typedef struct XACT_NOTIFICATION_GUI
{
DWORD reserved; // Reserved
} XACT_NOTIFICATION_GUI, *LPXACT_NOTIFICATION_GUI;
typedef const XACT_NOTIFICATION_GUI *LPCXACT_NOTIFICATION_GUI;
// Notification structure for all XACTNOTIFICATIONTYPE_WAVE* notifications
typedef struct XACT_NOTIFICATION_WAVE
{
IXACTWaveBank* pWaveBank; // WaveBank
XACTINDEX waveIndex; // Wave index
XACTINDEX cueIndex; // Cue index
IXACTSoundBank* pSoundBank; // SoundBank instance
IXACTCue* pCue; // Cue instance
} XACT_NOTIFICATION_WAVE, *LPXACT_NOTIFICATION_WAVE;
typedef const XACT_NOTIFICATION_WAVE *LPCXACT_NOTIFICATION_WAVE;
// General notification structure
typedef struct XACT_NOTIFICATION
{
XACTNOTIFICATIONTYPE type; // Notification type
LONG timeStamp; // Timestamp of notification (milliseconds)
PVOID pvContext; // User context (optional)
union
{
XACT_NOTIFICATION_CUE cue; // XACTNOTIFICATIONTYPE_CUE*
XACT_NOTIFICATION_MARKER marker; // XACTNOTIFICATIONTYPE_MARKER*
XACT_NOTIFICATION_SOUNDBANK soundBank; // XACTNOTIFICATIONTYPE_SOUNDBANK*
XACT_NOTIFICATION_WAVEBANK waveBank; // XACTNOTIFICATIONTYPE_WAVEBANK*
XACT_NOTIFICATION_VARIABLE variable; // XACTNOTIFICATIONTYPE_VARIABLE*
XACT_NOTIFICATION_GUI gui; // XACTNOTIFICATIONTYPE_GUI*
XACT_NOTIFICATION_WAVE wave; // XACTNOTIFICATIONTYPE_WAVE*
};
} XACT_NOTIFICATION, *LPXACT_NOTIFICATION;
typedef const XACT_NOTIFICATION *LPCXACT_NOTIFICATION;
#pragma pack(pop)
//------------------------------------------------------------------------------
// IXACTSoundBank
//------------------------------------------------------------------------------
static const DWORD XACT_FLAG_SOUNDBANK_STOP_IMMEDIATE = 0x00000001;
static const DWORD XACT_SOUNDBANKSTATE_INUSE = 0x00000001; // Currently in-use
STDAPI IXACTSoundBank_Destroy(IXACTSoundBank* pSoundBank);
STDAPI_(XACTINDEX) IXACTSoundBank_GetCueIndex(IXACTSoundBank* pSoundBank, PCSTR szFriendlyName);
STDAPI IXACTSoundBank_Prepare(IXACTSoundBank* pSoundBank, XACTINDEX nCueIndex, DWORD dwFlags, XACTTIME timeOffset, IXACTCue** ppCue);
STDAPI IXACTSoundBank_Play(IXACTSoundBank* pSoundBank, XACTINDEX nCueIndex, DWORD dwFlags, XACTTIME timeOffset, IXACTCue** ppCue);
STDAPI IXACTSoundBank_Stop(IXACTSoundBank* pSoundBank, XACTINDEX nCueIndex, DWORD dwFlags);
STDAPI IXACTSoundBank_GetState(IXACTSoundBank* pSoundBank, DWORD* pdwState);
#undef INTERFACE
#define INTERFACE IXACTSoundBank
DECLARE_INTERFACE(IXACTSoundBank)
{
STDMETHOD_(XACTINDEX, GetCueIndex)(THIS_ PCSTR szFriendlyName) PURE;
STDMETHOD(Prepare)(THIS_ XACTINDEX nCueIndex, DWORD dwFlags, XACTTIME timeOffset, IXACTCue** ppCue) PURE;
STDMETHOD(Play)(THIS_ XACTINDEX nCueIndex, DWORD dwFlags, XACTTIME timeOffset, IXACTCue** ppCue) PURE;
STDMETHOD(Stop)(THIS_ XACTINDEX nCueIndex, DWORD dwFlags) PURE;
STDMETHOD(Destroy)(THIS) PURE;
STDMETHOD(GetState)(THIS_ DWORD* pdwState) PURE;
};
#ifdef __cplusplus
__inline HRESULT __stdcall IXACTSoundBank_Destroy(IXACTSoundBank* pSoundBank)
{
return pSoundBank->Destroy();
}
__inline XACTINDEX __stdcall IXACTSoundBank_GetCueIndex(IXACTSoundBank* pSoundBank, PCSTR szFriendlyName)
{
return pSoundBank->GetCueIndex(szFriendlyName);
}
__inline HRESULT __stdcall IXACTSoundBank_Prepare(IXACTSoundBank* pSoundBank, XACTINDEX nCueIndex, DWORD dwFlags, XACTTIME timeOffset, IXACTCue** ppCue)
{
return pSoundBank->Prepare(nCueIndex, dwFlags, timeOffset, ppCue);
}
__inline HRESULT __stdcall IXACTSoundBank_Play(IXACTSoundBank* pSoundBank, XACTINDEX nCueIndex, DWORD dwFlags, XACTTIME timeOffset, IXACTCue** ppCue)
{
return pSoundBank->Play(nCueIndex, dwFlags, timeOffset, ppCue);
}
__inline HRESULT __stdcall IXACTSoundBank_Stop(IXACTSoundBank* pSoundBank, XACTINDEX nCueIndex, DWORD dwFlags)
{
return pSoundBank->Stop(nCueIndex, dwFlags);
}
__inline HRESULT __stdcall IXACTSoundBank_GetState(IXACTSoundBank* pSoundBank, DWORD* pdwState)
{
return pSoundBank->GetState(pdwState);
}
#else // __cplusplus
__inline HRESULT __stdcall IXACTSoundBank_Destroy(IXACTSoundBank* pSoundBank)
{
return pSoundBank->lpVtbl->Destroy(pSoundBank);
}
__inline XACTINDEX __stdcall IXACTSoundBank_GetCueIndex(IXACTSoundBank* pSoundBank, PCSTR szFriendlyName)
{
return pSoundBank->lpVtbl->GetCueIndex(pSoundBank, szFriendlyName);
}
__inline HRESULT __stdcall IXACTSoundBank_Prepare(IXACTSoundBank* pSoundBank, XACTINDEX nCueIndex, DWORD dwFlags, XACTTIME timeOffset, IXACTCue** ppCue)
{
return pSoundBank->lpVtbl->Prepare(pSoundBank, nCueIndex, dwFlags, timeOffset, ppCue);
}
__inline HRESULT __stdcall IXACTSoundBank_Play(IXACTSoundBank* pSoundBank, XACTINDEX nCueIndex, DWORD dwFlags, XACTTIME timeOffset, IXACTCue** ppCue)
{
return pSoundBank->lpVtbl->Play(pSoundBank, nCueIndex, dwFlags, timeOffset, ppCue);
}
__inline HRESULT __stdcall IXACTSoundBank_Stop(IXACTSoundBank* pSoundBank, XACTINDEX nCueIndex, DWORD dwFlags)
{
return pSoundBank->lpVtbl->Stop(pSoundBank, nCueIndex, dwFlags);
}
__inline HRESULT __stdcall IXACTSoundBank_GetState(IXACTSoundBank* pSoundBank, DWORD* pdwState)
{
return pSoundBank->lpVtbl->GetState(pSoundBank, pdwState);
}
#endif // __cplusplus
//------------------------------------------------------------------------------
// IXACTWaveBank
//------------------------------------------------------------------------------
static const DWORD XACT_WAVEBANKSTATE_INUSE = 0x00000001; // Currently in-use
static const DWORD XACT_WAVEBANKSTATE_PREPARED = 0x00000002; // Prepared
static const DWORD XACT_WAVEBANKSTATE_PREPAREFAILED = 0x00000004; // Prepare failed.
STDAPI IXACTWaveBank_Destroy(IXACTWaveBank* pWaveBank);
STDAPI IXACTWaveBank_GetState(IXACTWaveBank* pWaveBank, DWORD* pdwState);
#undef INTERFACE
#define INTERFACE IXACTWaveBank
DECLARE_INTERFACE(IXACTWaveBank)
{
STDMETHOD(Destroy)(THIS) PURE;
STDMETHOD(GetState)(THIS_ DWORD* pdwState) PURE;
};
#ifdef __cplusplus
__inline HRESULT __stdcall IXACTWaveBank_Destroy(IXACTWaveBank* pWaveBank)
{
return pWaveBank->Destroy();
}
__inline HRESULT __stdcall IXACTWaveBank_GetState(IXACTWaveBank* pWaveBank, DWORD* pdwState)
{
return pWaveBank->GetState(pdwState);
}
#else // __cplusplus
__inline HRESULT __stdcall IXACTWaveBank_Destroy(IXACTWaveBank* pWaveBank)
{
return pWaveBank->lpVtbl->Destroy(pWaveBank);
}
__inline HRESULT __stdcall IXACTWaveBank_GetState(IXACTWaveBank* pWaveBank, DWORD* pdwState)
{
return pWaveBank->lpVtbl->GetState(pWaveBank, pdwState);
}
#endif // __cplusplus
//------------------------------------------------------------------------------
// IXACTCue
//------------------------------------------------------------------------------
// Cue Flags
static const DWORD XACT_FLAG_CUE_STOP_RELEASE = 0x00000000;
static const DWORD XACT_FLAG_CUE_STOP_IMMEDIATE = 0x00000001;
// Mutually exclusive states
static const DWORD XACT_CUESTATE_CREATED = 0x00000001; // Created, but nothing else
static const DWORD XACT_CUESTATE_PREPARING = 0x00000002; // In the middle of preparing
static const DWORD XACT_CUESTATE_PREPARED = 0x00000004; // Prepared, but not yet played
static const DWORD XACT_CUESTATE_PLAYING = 0x00000008; // Playing (though could be paused)
static const DWORD XACT_CUESTATE_STOPPING = 0x00000010; // Stopping
static const DWORD XACT_CUESTATE_STOPPED = 0x00000020; // Stopped
// Inclusive states
static const DWORD XACT_CUESTATE_PAUSED = 0x00000040; // Paused (can be combinded with other states)
STDAPI IXACTCue_Destroy(IXACTCue* pCue);
STDAPI IXACTCue_Play(IXACTCue* pCue);
STDAPI IXACTCue_Stop(IXACTCue* pCue, DWORD dwFlags);
STDAPI IXACTCue_GetState(IXACTCue* pCue, DWORD* pdwState);
STDAPI IXACTCue_GetChannelMap(IXACTCue*, LPXACTCHANNELMAP pChannelMap, DWORD BufferSize, LPDWORD pRequiredSize);
STDAPI IXACTCue_SetChannelMap(IXACTCue*, LPCXACTCHANNELMAP pChannelMap);
STDAPI IXACTCue_GetChannelVolume(IXACTCue*, LPXACTCHANNELVOLUME pVolume);
STDAPI IXACTCue_SetChannelVolume(IXACTCue*, LPCXACTCHANNELVOLUME pVolume);
STDAPI IXACTCue_SetMatrixCoefficients(IXACTCue*, UINT32 uSrcChannelCount, UINT32 uDstChannelCount, float* pMatrixCoefficients);
STDAPI_(XACTVARIABLEINDEX) IXACTCue_GetVariableIndex(IXACTCue* pCue, PCSTR szFriendlyName);
STDAPI IXACTCue_SetVariable(IXACTCue* pCue, XACTVARIABLEINDEX nIndex, XACTVARIABLEVALUE nValue);
STDAPI IXACTCue_GetVariable(IXACTCue* pCue, XACTVARIABLEINDEX nIndex, XACTVARIABLEVALUE* nValue);
STDAPI IXACTCue_Pause(IXACTCue* pCue, BOOL fPause);
#ifdef _XBOX
STDAPI IXACTCue_SetVoiceOutput(IXACTCue*, LPCXAUDIOVOICEOUTPUT pVoiceOutput);
STDAPI IXACTCue_SetVoiceOutputVolume(IXACTCue*, LPCXAUDIOVOICEOUTPUTVOLUME pVolume);
STDAPI IXACTCue_GetProperties(IXACTCue*, LPXACTCUEPROPERTIES pProperties);
#endif // _XBOX
#undef INTERFACE
#define INTERFACE IXACTCue
DECLARE_INTERFACE(IXACTCue)
{
STDMETHOD(Play)(THIS) PURE;
STDMETHOD(Stop)(THIS_ DWORD dwFlags) PURE;
STDMETHOD(GetState)(THIS_ DWORD* pdwState) PURE;
STDMETHOD(Destroy)(THIS) PURE;
STDMETHOD(GetChannelMap)(THIS_ LPXACTCHANNELMAP pChannelMap, DWORD BufferSize, LPDWORD pRequiredSize) PURE;
STDMETHOD(SetChannelMap)(THIS_ LPCXACTCHANNELMAP pChannelMap) PURE;
STDMETHOD(GetChannelVolume)(THIS_ LPXACTCHANNELVOLUME pVolume) PURE;
STDMETHOD(SetChannelVolume)(THIS_ LPCXACTCHANNELVOLUME pVolume) PURE;
STDMETHOD(SetMatrixCoefficients)(THIS_ UINT32 uSrcChannelCount, UINT32 uDstChannelCount, float* pMatrixCoefficients) PURE;
STDMETHOD_(XACTVARIABLEINDEX, GetVariableIndex)(THIS_ PCSTR szFriendlyName) PURE;
STDMETHOD(SetVariable)(THIS_ XACTVARIABLEINDEX nIndex, XACTVARIABLEVALUE nValue) PURE;
STDMETHOD(GetVariable)(THIS_ XACTVARIABLEINDEX nIndex, XACTVARIABLEVALUE* nValue) PURE;
STDMETHOD(Pause)(THIS_ BOOL fPause) PURE;
#ifdef _XBOX
STDMETHOD(SetVoiceOutput)(THIS_ LPCXAUDIOVOICEOUTPUT pVoiceOutput) PURE;
STDMETHOD(SetVoiceOutputVolume)(THIS_ LPCXAUDIOVOICEOUTPUTVOLUME pVolume) PURE;
STDMETHOD(GetProperties)(THIS_ LPXACTCUEPROPERTIES pProperties) PURE;
#endif // _XBOX
};
#ifdef __cplusplus
__inline HRESULT __stdcall IXACTCue_Play(IXACTCue* pCue)
{
return pCue->Play();
}
__inline HRESULT __stdcall IXACTCue_Stop(IXACTCue* pCue, DWORD dwFlags)
{
return pCue->Stop(dwFlags);
}
__inline HRESULT __stdcall IXACTCue_GetState(IXACTCue* pCue, DWORD* pdwState)
{
return pCue->GetState(pdwState);
}
__inline HRESULT __stdcall IXACTCue_Destroy(IXACTCue* pCue)
{
return pCue->Destroy();
}
__inline HRESULT __stdcall IXACTCue_GetChannelMap(IXACTCue* pCue, LPXACTCHANNELMAP pChannelMap, DWORD BufferSize, LPDWORD pRequiredSize)
{
return pCue->GetChannelMap(pChannelMap, BufferSize, pRequiredSize);
}
__inline HRESULT __stdcall IXACTCue_SetChannelMap(IXACTCue* pCue, LPCXACTCHANNELMAP pChannelMap)
{
return pCue->SetChannelMap(pChannelMap);
}
__inline HRESULT __stdcall IXACTCue_GetChannelVolume(IXACTCue* pCue, LPXACTCHANNELVOLUME pVolume)
{
return pCue->GetChannelVolume(pVolume);
}
__inline HRESULT __stdcall IXACTCue_SetChannelVolume(IXACTCue* pCue, LPCXACTCHANNELVOLUME pVolume)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -