Commit Description:
Various UI improvements.
Commit Description:
Various UI improvements.
File last commit:
Show/Diff file:
Action:
FNA/lib/FAudio/cpp/xact3.h
334 lines | 8.6 KiB | text/x-c | CLexer
#ifndef FACT_CPP_XACT3_H
#define FACT_CPP_XACT3_H
#include "xaudio2.h"
#include <FACT.h>
#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