#ifndef FACT_CPP_XACT3_H #define FACT_CPP_XACT3_H #include "xaudio2.h" #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifndef XACT3_VERSION #define XACT3_VERSION 7 #endif typedef FACTRendererDetails XACT_RENDERER_DETAILS; typedef FACTFileIOCallbacks XACT_FILEIO_CALLBACKS; typedef FACTRuntimeParameters XACT_RUNTIME_PARAMETERS; typedef FACTStreamingParameters XACT_STREAMING_PARAMETERS; typedef FACTWaveBankRegion WAVEBANKREGION; typedef FACTWaveBankSampleRegion WAVEBANKSAMPLEREGION; typedef FACTWaveBankHeader WAVEBANKHEADER; typedef FACTWaveBankMiniWaveFormat WAVEBANKMINIWAVEFORMAT; typedef FACTWaveBankEntry WAVEBANKENTRY; typedef FACTWaveBankEntryCompact WAVEBANKENTRYCOMPACT; typedef FACTWaveBankData WAVEBANKDATA; typedef FACTWaveProperties XACT_WAVE_PROPERTIES; typedef FACTWaveInstanceProperties XACT_WAVE_INSTANCE_PROPERTIES; typedef FACTCueProperties XACT_CUE_PROPERTIES; typedef FACTTrackProperties XACT_TRACK_PROPERTIES; typedef FACTVariationProperties XACT_VARIATION_PROPERTIES; typedef FACTSoundProperties XACT_SOUND_PROPERTIES; typedef FACTSoundVariationProperties XACT_SOUND_VARIATION_PROPERTIES; typedef FACTCueInstanceProperties XACT_CUE_INSTANCE_PROPERTIES; typedef FACTReadFileCallback XACT_READFILE_CALLBACK; typedef FACTGetOverlappedResultCallback XACT_GETOVERLAPPEDRESULT_CALLBACK; typedef FACTWaveBankSegIdx WAVEBANKSEGIDX; class IXACT3Engine; class IXACT3SoundBank; class IXACT3WaveBank; class IXACT3Wave; class IXACT3Cue; #pragma pack(push, 1) typedef struct XACT_NOTIFICATION_DESCRIPTION { uint8_t type; uint8_t flags; IXACT3SoundBank *pSoundBank; IXACT3WaveBank *pWaveBank; IXACT3Cue *pCue; IXACT3Wave *pWave; uint16_t cueIndex; uint16_t waveIndex; void* pvContext; } XACT_NOTIFICATION_DESCRIPTION; typedef struct XACT_NOTIFICATION_CUE { uint16_t cueIndex; IXACT3SoundBank *pSoundBank; IXACT3Cue *pCue; } XACT_NOTIFICATION_CUE; typedef struct XACT_NOTIFICATION_MARKER { uint16_t cueIndex; IXACT3SoundBank *pSoundBank; IXACT3Cue *pCue; uint32_t marker; } XACT_NOTIFICATION_MARKER; typedef struct XACT_NOTIFICATION_SOUNDBANK { IXACT3SoundBank *pSoundBank; } XACT_NOTIFICATION_SOUNDBANK; typedef struct XACT_NOTIFICATION_WAVEBANK { IXACT3WaveBank *pWaveBank; } XACT_NOTIFICATION_WAVEBANK; typedef struct XACT_NOTIFICATION_VARIABLE { uint16_t cueIndex; IXACT3SoundBank *pSoundBank; IXACT3Cue *pCue; uint16_t variableIndex; float variableValue; uint8_t local; } XACT_NOTIFICATION_VARIABLE; typedef struct XACT_NOTIFICATION_GUI { uint32_t reserved; } XACT_NOTIFICATION_GUI; typedef struct XACT_NOTIFICATION_WAVE { IXACT3WaveBank *pWaveBank; uint16_t waveIndex; uint16_t cueIndex; IXACT3SoundBank *pSoundBank; IXACT3Cue *pCue; IXACT3Wave *pWave; } XACT_NOTIFICATION_WAVE; typedef struct XACT_NOTIFICATION { uint8_t type; int32_t timeStamp; void *pvContext; union { XACT_NOTIFICATION_CUE cue; XACT_NOTIFICATION_MARKER marker; XACT_NOTIFICATION_SOUNDBANK soundBank; XACT_NOTIFICATION_WAVEBANK waveBank; XACT_NOTIFICATION_VARIABLE variable; XACT_NOTIFICATION_GUI gui; XACT_NOTIFICATION_WAVE wave; }; } XACT_NOTIFICATION; #pragma pack(pop) class IXACT3Engine : public IUnknown { public: COM_METHOD(HRESULT) GetRendererCount( uint16_t *pnRendererCount ) = 0; COM_METHOD(HRESULT) GetRendererDetails( uint16_t nRendererIndex, XACT_RENDERER_DETAILS *pRendererDetails ) = 0; COM_METHOD(HRESULT) GetFinalMixFormat( WAVEFORMATEXTENSIBLE *pFinalMixFormat ) = 0; COM_METHOD(HRESULT) Initialize( const XACT_RUNTIME_PARAMETERS *pParams ) = 0; COM_METHOD(HRESULT) ShutDown() = 0; COM_METHOD(HRESULT) DoWork() = 0; COM_METHOD(HRESULT) CreateSoundBank( const void *pvBuffer, uint32_t dwSize, uint32_t dwFlags, uint32_t dwAllocAttributes, IXACT3SoundBank **ppSoundBank ) = 0; COM_METHOD(HRESULT) CreateInMemoryWaveBank( const void *pvBuffer, uint32_t dwSize, uint32_t dwFlags, uint32_t dwAllocAttributes, IXACT3WaveBank **ppWaveBank ) = 0; COM_METHOD(HRESULT) CreateStreamingWaveBank( const XACT_STREAMING_PARAMETERS *pParms, IXACT3WaveBank **ppWaveBank ) = 0; COM_METHOD(HRESULT) PrepareWave( uint32_t dwFlags, const char *szWavePath, uint32_t wStreamingPacketSize, uint32_t dwAlignment, uint32_t dwPlayOffset, uint8_t nLoopCount, IXACT3Wave **ppWave ) = 0; COM_METHOD(HRESULT) PrepareInMemoryWave( uint32_t dwFlags, WAVEBANKENTRY entry, uint32_t *pdwSeekTable, /* Optional! */ uint8_t *pbWaveData, uint32_t dwPlayOffset, uint8_t nLoopCount, IXACT3Wave **ppWave ) = 0; COM_METHOD(HRESULT) PrepareStreamingWave( uint32_t dwFlags, WAVEBANKENTRY entry, XACT_STREAMING_PARAMETERS streamingParams, uint32_t dwAlignment, uint32_t *pdwSeekTable, /* Optional! */ uint8_t *pbWaveData, uint32_t dwPlayOffset, uint8_t nLoopCount, IXACT3Wave **ppWave ) = 0; COM_METHOD(HRESULT) RegisterNotification( const XACT_NOTIFICATION_DESCRIPTION *pNotificationDescription ) = 0; COM_METHOD(HRESULT) UnRegisterNotification( const XACT_NOTIFICATION_DESCRIPTION *pNotificationDescription ) = 0; COM_METHOD(uint16_t) GetCategory(const char *szFriendlyName) = 0; COM_METHOD(HRESULT) Stop(uint16_t nCategory, uint32_t dwFlags) = 0; COM_METHOD(HRESULT) SetVolume(uint16_t nCategory, float volume) = 0; COM_METHOD(HRESULT) Pause(uint16_t nCategory, int32_t fPause) = 0; COM_METHOD(uint16_t) GetGlobalVariableIndex( const char *szFriendlyName ) = 0; COM_METHOD(HRESULT) SetGlobalVariable( uint16_t nIndex, float nValue ) = 0; COM_METHOD(HRESULT) GetGlobalVariable( uint16_t nIndex, float *pnValue ) = 0; }; class IXACT3SoundBank { public: COM_METHOD(uint16_t) GetCueIndex(const char *szFriendlyName) = 0; COM_METHOD(HRESULT) GetNumCues(uint16_t *pnNumCues) = 0; COM_METHOD(HRESULT) GetCueProperties( uint16_t nCueIndex, XACT_CUE_PROPERTIES *pProperties ) = 0; COM_METHOD(HRESULT) Prepare( uint16_t nCueIndex, uint32_t dwFlags, int32_t timeOffset, IXACT3Cue** ppCue ) = 0; COM_METHOD(HRESULT) Play( uint16_t nCueIndex, uint32_t dwFlags, int32_t timeOffset, IXACT3Cue** ppCue /* Optional! */ ) = 0; COM_METHOD(HRESULT) Stop(uint16_t nCueIndex, uint32_t dwFlags) = 0; COM_METHOD(HRESULT) Destroy() = 0; COM_METHOD(HRESULT) GetState(uint32_t *pdwState) = 0; }; class IXACT3WaveBank { public: COM_METHOD(HRESULT) Destroy() = 0; COM_METHOD(HRESULT) GetNumWaves(uint16_t *pnNumWaves) = 0; COM_METHOD(uint16_t) GetWaveIndex(const char *szFriendlyName) = 0; COM_METHOD(HRESULT) GetWaveProperties( uint16_t nWaveIndex, XACT_WAVE_PROPERTIES *pWaveProperties ) = 0; COM_METHOD(HRESULT) Prepare( uint16_t nWaveIndex, uint32_t dwFlags, uint32_t dwPlayOffset, uint8_t nLoopCount, IXACT3Wave **ppWave ) = 0; COM_METHOD(HRESULT) Play( uint16_t nWaveIndex, uint32_t dwFlags, uint32_t dwPlayOffset, uint8_t nLoopCount, IXACT3Wave **ppWave ) = 0; COM_METHOD(HRESULT) Stop( uint16_t nWaveIndex, uint32_t dwFlags ) = 0; COM_METHOD(HRESULT) GetState(uint32_t *pdwState) = 0; }; class IXACT3Wave { public: COM_METHOD(HRESULT) Destroy() = 0; COM_METHOD(HRESULT) Play() = 0; COM_METHOD(HRESULT) Stop(uint32_t dwFlags) = 0; COM_METHOD(HRESULT) Pause(int32_t fPause) = 0; COM_METHOD(HRESULT) GetState(uint32_t *pdwState) = 0; COM_METHOD(HRESULT) SetPitch(int16_t pitch) = 0; COM_METHOD(HRESULT) SetVolume(float volume) = 0; COM_METHOD(HRESULT) SetMatrixCoefficients( uint32_t uSrcChannelCount, uint32_t uDstChannelCount, float *pMatrixCoefficients ) = 0; COM_METHOD(HRESULT) GetProperties( XACT_WAVE_INSTANCE_PROPERTIES *pProperties ) = 0; }; class IXACT3Cue { public: COM_METHOD(HRESULT) Play() = 0; COM_METHOD(HRESULT) Stop(uint32_t dwFlags) = 0; COM_METHOD(HRESULT) GetState(uint32_t *pdwState) = 0; COM_METHOD(HRESULT) Destroy() = 0; COM_METHOD(HRESULT) SetMatrixCoefficients( uint32_t uSrcChannelCount, uint32_t uDstChannelCount, float *pMatrixCoefficients ) = 0; COM_METHOD(uint16_t) GetVariableIndex(const char *szFriendlyName) = 0; COM_METHOD(HRESULT) SetVariable(uint16_t nIndex, float nValue) = 0; COM_METHOD(HRESULT) GetVariable(uint16_t nIndex, float *nValue) = 0; COM_METHOD(HRESULT) Pause(int32_t fPause) = 0; COM_METHOD(HRESULT) GetProperties( XACT_CUE_INSTANCE_PROPERTIES **ppProperties ) = 0; #if XACT3_VERSION >= 5 COM_METHOD(HRESULT) SetOutputVoices( const XAUDIO2_VOICE_SENDS *pSendList /* Optional! */ ) = 0; COM_METHOD(HRESULT) SetOutputVoiceMatrix( const IXAudio2Voice *pDestinationVoice, /* Optional! */ uint32_t SourceChannels, uint32_t DestinationChannels, const float *pLevelMatrix /* SourceChannels * DestinationChannels */ ) = 0; #endif /* XACT_VERSION >= 5 */ }; #ifdef __cplusplus } #endif /* __cplusplus */ #endif // FACT_CPP_XACT3_H