diff --git a/audio/xaudio-c/xaudio-xdk360.cpp b/audio/xaudio-c/xaudio-xdk360.cpp index 42ea19d420..2a4ab003f0 100644 --- a/audio/xaudio-c/xaudio-xdk360.cpp +++ b/audio/xaudio-c/xaudio-xdk360.cpp @@ -24,150 +24,150 @@ struct xaudio2 : public IXAudio2VoiceCallback { - xaudio2() : - buf(0), pXAudio2(0), pMasteringVoice(0), - pSourceVoice(0), nonblock(false), bufsize(0), - bufptr(0), write_buffer(0), buffers(0), hEvent(0) - {} + xaudio2() : + buf(0), pXAudio2(0), pMasteringVoice(0), + pSourceVoice(0), nonblock(false), bufsize(0), + bufptr(0), write_buffer(0), buffers(0), hEvent(0) + {} - ~xaudio2() - { - if (pSourceVoice) - { - pSourceVoice->Stop(0, XAUDIO2_COMMIT_NOW); - pSourceVoice->DestroyVoice(); - } + ~xaudio2() + { + if (pSourceVoice) + { + pSourceVoice->Stop(0, XAUDIO2_COMMIT_NOW); + pSourceVoice->DestroyVoice(); + } - if (pMasteringVoice) - pMasteringVoice->DestroyVoice(); + if (pMasteringVoice) + pMasteringVoice->DestroyVoice(); - if (pXAudio2) - pXAudio2->Release(); + if (pXAudio2) + pXAudio2->Release(); - if (hEvent) - CloseHandle(hEvent); + if (hEvent) + CloseHandle(hEvent); - free(buf); - } + free(buf); + } - STDMETHOD_(void, OnBufferStart) (void *) {} - STDMETHOD_(void, OnBufferEnd) (void *) - { - InterlockedDecrement(&buffers); - SetEvent(hEvent); - } - STDMETHOD_(void, OnLoopEnd) (void *) {} - STDMETHOD_(void, OnStreamEnd) () {} - STDMETHOD_(void, OnVoiceError) (void *, HRESULT) {} - STDMETHOD_(void, OnVoiceProcessingPassEnd) () {} - STDMETHOD_(void, OnVoiceProcessingPassStart) (UINT32) {} + STDMETHOD_(void, OnBufferStart) (void *) {} + STDMETHOD_(void, OnBufferEnd) (void *) + { + InterlockedDecrement(&buffers); + SetEvent(hEvent); + } + STDMETHOD_(void, OnLoopEnd) (void *) {} + STDMETHOD_(void, OnStreamEnd) () {} + STDMETHOD_(void, OnVoiceError) (void *, HRESULT) {} + STDMETHOD_(void, OnVoiceProcessingPassEnd) () {} + STDMETHOD_(void, OnVoiceProcessingPassStart) (UINT32) {} - uint8_t *buf; - IXAudio2 *pXAudio2; - IXAudio2MasteringVoice *pMasteringVoice; - IXAudio2SourceVoice *pSourceVoice; - bool nonblock; - unsigned bufsize; - unsigned bufptr; - unsigned write_buffer; - volatile long buffers; - HANDLE hEvent; + uint8_t *buf; + IXAudio2 *pXAudio2; + IXAudio2MasteringVoice *pMasteringVoice; + IXAudio2SourceVoice *pSourceVoice; + bool nonblock; + unsigned bufsize; + unsigned bufptr; + unsigned write_buffer; + volatile long buffers; + HANDLE hEvent; }; void xaudio2_enumerate_devices(xaudio2_t *xa) { - (void)xa; + (void)xa; } xaudio2_t *xaudio2_new(unsigned samplerate, unsigned channels, - size_t size, unsigned device) + size_t size, unsigned device) { - (void)device; - WAVEFORMATEX wfx = {0}; - xaudio2 *handle = new xaudio2; - if (!handle) - return NULL; + (void)device; + WAVEFORMATEX wfx = {0}; + xaudio2 *handle = new xaudio2; + if (!handle) + return NULL; - if (FAILED(XAudio2Create(&handle->pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR))) - goto error; + if (FAILED(XAudio2Create(&handle->pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR))) + goto error; - if (FAILED(handle->pXAudio2->CreateMasteringVoice(&handle->pMasteringVoice, channels, -samplerate, 0, 0, NULL))) - goto error; + if (FAILED(handle->pXAudio2->CreateMasteringVoice(&handle->pMasteringVoice, channels, + samplerate, 0, 0, NULL))) + goto error; - wfx.wFormatTag = WAVE_FORMAT_PCM; - wfx.nChannels = channels; - wfx.nSamplesPerSec = samplerate; - wfx.nBlockAlign = channels * sizeof(int16_t); - wfx.wBitsPerSample = sizeof(int16_t) * 8; - wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign; - wfx.cbSize = 0; + wfx.wFormatTag = WAVE_FORMAT_PCM; + wfx.nChannels = channels; + wfx.nSamplesPerSec = samplerate; + wfx.nBlockAlign = channels * sizeof(int16_t); + wfx.wBitsPerSample = sizeof(int16_t) * 8; + wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign; + wfx.cbSize = 0; - if (FAILED(handle->pXAudio2->CreateSourceVoice(&handle->pSourceVoice, &wfx, - XAUDIO2_VOICE_NOSRC, XAUDIO2_DEFAULT_FREQ_RATIO, handle, 0, 0))) - goto error; + if (FAILED(handle->pXAudio2->CreateSourceVoice(&handle->pSourceVoice, &wfx, + XAUDIO2_VOICE_NOSRC, XAUDIO2_DEFAULT_FREQ_RATIO, handle, 0, 0))) + goto error; - handle->hEvent = CreateEvent(0, FALSE, FALSE, 0); + handle->hEvent = CreateEvent(0, FALSE, FALSE, 0); - handle->bufsize = size / MAX_BUFFERS; - handle->buf = (uint8_t*)calloc(1, handle->bufsize * MAX_BUFFERS); - memset(handle->buf, 0, handle->bufsize * MAX_BUFFERS); + handle->bufsize = size / MAX_BUFFERS; + handle->buf = (uint8_t*)calloc(1, handle->bufsize * MAX_BUFFERS); + memset(handle->buf, 0, handle->bufsize * MAX_BUFFERS); - if (FAILED(handle->pSourceVoice->Start(0, XAUDIO2_COMMIT_NOW))) - goto error; + if (FAILED(handle->pSourceVoice->Start(0, XAUDIO2_COMMIT_NOW))) + goto error; - return handle; + return handle; error: - RARCH_ERR("Failed to init XAudio2 (for Xbox 360).\n"); - delete handle; - return NULL; + RARCH_ERR("Failed to init XAudio2 (for Xbox 360).\n"); + delete handle; + return NULL; } size_t xaudio2_write_avail(xaudio2_t *handle) { - return handle->bufsize * (MAX_BUFFERS - handle->buffers - 1); + return handle->bufsize * (MAX_BUFFERS - handle->buffers - 1); } // It's really 16-bit, but we have to byteswap. size_t xaudio2_write(xaudio2_t *handle, const void *buf, size_t bytes_) { - unsigned bytes = bytes_; - const uint8_t *buffer = (const uint8_t*)buf; - while (bytes) - { - unsigned need = min(bytes, handle->bufsize - handle->bufptr); - memcpy(handle->buf + handle->write_buffer * handle->bufsize + handle->bufptr, - buffer, need); + unsigned bytes = bytes_; + const uint8_t *buffer = (const uint8_t*)buf; + while (bytes) + { + unsigned need = min(bytes, handle->bufsize - handle->bufptr); + memcpy(handle->buf + handle->write_buffer * handle->bufsize + handle->bufptr, + buffer, need); - handle->bufptr += need; - buffer += need; - bytes -= need; + handle->bufptr += need; + buffer += need; + bytes -= need; - if (handle->bufptr == handle->bufsize) - { - while (handle->buffers == MAX_BUFFERS - 1) - WaitForSingleObject(handle->hEvent, INFINITE); + if (handle->bufptr == handle->bufsize) + { + while (handle->buffers == MAX_BUFFERS - 1) + WaitForSingleObject(handle->hEvent, INFINITE); - XAUDIO2_BUFFER xa2buffer = {0}; - xa2buffer.AudioBytes = handle->bufsize; - xa2buffer.pAudioData = handle->buf + handle->write_buffer * handle->bufsize; + XAUDIO2_BUFFER xa2buffer = {0}; + xa2buffer.AudioBytes = handle->bufsize; + xa2buffer.pAudioData = handle->buf + handle->write_buffer * handle->bufsize; - if (FAILED(handle->pSourceVoice->SubmitSourceBuffer(&xa2buffer, NULL))) - return 0; + if (FAILED(handle->pSourceVoice->SubmitSourceBuffer(&xa2buffer, NULL))) + return 0; - InterlockedIncrement(&handle->buffers); - handle->bufptr = 0; - handle->write_buffer = (handle->write_buffer + 1) & MAX_BUFFERS_MASK; - } - } + InterlockedIncrement(&handle->buffers); + handle->bufptr = 0; + handle->write_buffer = (handle->write_buffer + 1) & MAX_BUFFERS_MASK; + } + } - return bytes_; + return bytes_; } void xaudio2_free(xaudio2_t *handle) { - xaudio2 *xa = (xaudio2*)handle; - if (xa) - delete xa; + xaudio2 *xa = (xaudio2*)handle; + if (xa) + delete xa; } diff --git a/audio/xaudio-c/xaudio-xdk360.h b/audio/xaudio-c/xaudio-xdk360.h index a1a968c6f8..4e56f554c4 100644 --- a/audio/xaudio-c/xaudio-xdk360.h +++ b/audio/xaudio-c/xaudio-xdk360.h @@ -21,9 +21,9 @@ #define XAUDIO2_XDK360_H #define DEFINE_CLSID(className, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - DEFINE_GUID(CLSID_##className, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) + DEFINE_GUID(CLSID_##className, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) #define DEFINE_IID(interfaceName, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \ - DEFINE_GUID(IID_##interfaceName, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) + DEFINE_GUID(IID_##interfaceName, 0x##l, 0x##w1, 0x##w2, 0x##b1, 0x##b2, 0x##b3, 0x##b4, 0x##b5, 0x##b6, 0x##b7, 0x##b8) #define X2DEFAULT(x) DEFINE_CLSID(XAudio2, 3eda9b49, 2085, 498b, 9b, b2, 39, a6, 77, 84, 93, de); @@ -44,41 +44,41 @@ DEFINE_IID(IXAudio2, 8bcf1f58, 9fe7, 4583, 8a, c6, e2, ad, c4, 65, c8, bb); typedef enum XAUDIO2_DEVICE_ROLE { - NotDefaultDevice = 0x0, - DefaultConsoleDevice = 0x1, - DefaultMultimediaDevice = 0x2, - DefaultCommunicationsDevice = 0x4, - DefaultGameDevice = 0x8, - GlobalDefaultDevice = 0xf, - InvalidDeviceRole = ~GlobalDefaultDevice + NotDefaultDevice = 0x0, + DefaultConsoleDevice = 0x1, + DefaultMultimediaDevice = 0x2, + DefaultCommunicationsDevice = 0x4, + DefaultGameDevice = 0x8, + GlobalDefaultDevice = 0xf, + InvalidDeviceRole = ~GlobalDefaultDevice } XAUDIO2_DEVICE_ROLE; typedef enum XAUDIO2_XBOX_HWTHREAD_SPECIFIER { - XboxThread0 = 0x01, - XboxThread1 = 0x02, - XboxThread2 = 0x04, - XboxThread3 = 0x08, - XboxThread4 = 0x10, - XboxThread5 = 0x20, - XAUDIO2_ANY_PROCESSOR = XboxThread4, - XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR + XboxThread0 = 0x01, + XboxThread1 = 0x02, + XboxThread2 = 0x04, + XboxThread3 = 0x08, + XboxThread4 = 0x10, + XboxThread5 = 0x20, + XAUDIO2_ANY_PROCESSOR = XboxThread4, + XAUDIO2_DEFAULT_PROCESSOR = XAUDIO2_ANY_PROCESSOR } XAUDIO2_XBOX_HWTHREAD_SPECIFIER, XAUDIO2_PROCESSOR; typedef enum XAUDIO2_FILTER_TYPE { - LowPassFilter, - BandPassFilter, - HighPassFilter, - NotchFilter + LowPassFilter, + BandPassFilter, + HighPassFilter, + NotchFilter } XAUDIO2_FILTER_TYPE; typedef struct XAUDIO2_DEVICE_DETAILS { - WCHAR DeviceID[256]; - WCHAR DisplayName[256]; - XAUDIO2_DEVICE_ROLE Role; - WAVEFORMATEXTENSIBLE OutputFormat; + WCHAR DeviceID[256]; + WCHAR DisplayName[256]; + XAUDIO2_DEVICE_ROLE Role; + WAVEFORMATEXTENSIBLE OutputFormat; } XAUDIO2_DEVICE_DETAILS; typedef interface XAUDIO2_VOICE_DETAILS XAUDIO2_VOICE_DETAILS; @@ -95,144 +95,144 @@ typedef interface IXAudio2SubmixVoice IXAudio2SubmixVoice; typedef struct XAUDIO2_BUFFER { - UINT32 Flags; - UINT32 AudioBytes; - const BYTE* pAudioData; - UINT32 PlayBegin; - UINT32 PlayLength; - UINT32 LoopBegin; - UINT32 LoopLength; - UINT32 LoopCount; - void* pContext; + UINT32 Flags; + UINT32 AudioBytes; + const BYTE* pAudioData; + UINT32 PlayBegin; + UINT32 PlayLength; + UINT32 LoopBegin; + UINT32 LoopLength; + UINT32 LoopCount; + void* pContext; } XAUDIO2_BUFFER; DECLARE_INTERFACE(IXAudio2VoiceCallback) { - STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) PURE; - STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) PURE; - STDMETHOD_(void, OnStreamEnd) (THIS) PURE; - STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) PURE; - STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext) PURE; - STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext) PURE; - STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) PURE; + STDMETHOD_(void, OnVoiceProcessingPassStart) (THIS_ UINT32 BytesRequired) PURE; + STDMETHOD_(void, OnVoiceProcessingPassEnd) (THIS) PURE; + STDMETHOD_(void, OnStreamEnd) (THIS) PURE; + STDMETHOD_(void, OnBufferStart) (THIS_ void* pBufferContext) PURE; + STDMETHOD_(void, OnBufferEnd) (THIS_ void* pBufferContext) PURE; + STDMETHOD_(void, OnLoopEnd) (THIS_ void* pBufferContext) PURE; + STDMETHOD_(void, OnVoiceError) (THIS_ void* pBufferContext, HRESULT Error) PURE; }; DECLARE_INTERFACE(IXAudio2Voice) { - #define Declare_IXAudio2Voice_Methods() \ - STDMETHOD_(void, GetVoiceDetails) (THIS_ __out XAUDIO2_VOICE_DETAILS* pVoiceDetails) PURE; \ - \ - STDMETHOD(SetOutputVoices) (THIS_ __in_opt const XAUDIO2_VOICE_SENDS* pSendList) PURE; \ - \ - STDMETHOD(SetEffectChain) (THIS_ __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain) PURE; \ - \ - STDMETHOD(EnableEffect) (THIS_ UINT32 EffectIndex, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - STDMETHOD(DisableEffect) (THIS_ UINT32 EffectIndex, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - STDMETHOD_(void, GetEffectState) (THIS_ UINT32 EffectIndex, __out BOOL* pEnabled) PURE; \ - \ - STDMETHOD(SetEffectParameters) (THIS_ UINT32 EffectIndex, \ - __in_bcount(ParametersByteSize) const void* pParameters, \ - UINT32 ParametersByteSize, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - STDMETHOD(GetEffectParameters) (THIS_ UINT32 EffectIndex, \ - __out_bcount(ParametersByteSize) void* pParameters, \ - UINT32 ParametersByteSize) PURE; \ - \ - STDMETHOD(SetFilterParameters) (THIS_ __in const XAUDIO2_FILTER_PARAMETERS* pParameters, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - STDMETHOD_(void, GetFilterParameters) (THIS_ __out XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ - \ - STDMETHOD(SetOutputFilterParameters) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ - __in const XAUDIO2_FILTER_PARAMETERS* pParameters, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - STDMETHOD_(void, GetOutputFilterParameters) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ - __out XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ - \ - STDMETHOD(SetVolume) (THIS_ float Volume, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - STDMETHOD_(void, GetVolume) (THIS_ __out float* pVolume) PURE; \ - \ - STDMETHOD(SetChannelVolumes) (THIS_ UINT32 Channels, __in_ecount(Channels) const float* pVolumes, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - STDMETHOD_(void, GetChannelVolumes) (THIS_ UINT32 Channels, __out_ecount(Channels) float* pVolumes) PURE; \ - \ - STDMETHOD(SetOutputMatrix) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ - UINT32 SourceChannels, UINT32 DestinationChannels, \ - __in_ecount(SourceChannels * DestinationChannels) const float* pLevelMatrix, \ - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ - \ - STDMETHOD_(void, GetOutputMatrix) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ - UINT32 SourceChannels, UINT32 DestinationChannels, \ - __out_ecount(SourceChannels * DestinationChannels) float* pLevelMatrix) PURE; \ - \ - STDMETHOD_(void, DestroyVoice) (THIS) PURE +#define Declare_IXAudio2Voice_Methods() \ + STDMETHOD_(void, GetVoiceDetails) (THIS_ __out XAUDIO2_VOICE_DETAILS* pVoiceDetails) PURE; \ + \ + STDMETHOD(SetOutputVoices) (THIS_ __in_opt const XAUDIO2_VOICE_SENDS* pSendList) PURE; \ + \ + STDMETHOD(SetEffectChain) (THIS_ __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain) PURE; \ + \ + STDMETHOD(EnableEffect) (THIS_ UINT32 EffectIndex, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + STDMETHOD(DisableEffect) (THIS_ UINT32 EffectIndex, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + STDMETHOD_(void, GetEffectState) (THIS_ UINT32 EffectIndex, __out BOOL* pEnabled) PURE; \ + \ + STDMETHOD(SetEffectParameters) (THIS_ UINT32 EffectIndex, \ + __in_bcount(ParametersByteSize) const void* pParameters, \ + UINT32 ParametersByteSize, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + STDMETHOD(GetEffectParameters) (THIS_ UINT32 EffectIndex, \ + __out_bcount(ParametersByteSize) void* pParameters, \ + UINT32 ParametersByteSize) PURE; \ + \ + STDMETHOD(SetFilterParameters) (THIS_ __in const XAUDIO2_FILTER_PARAMETERS* pParameters, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + STDMETHOD_(void, GetFilterParameters) (THIS_ __out XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ + \ + STDMETHOD(SetOutputFilterParameters) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ + __in const XAUDIO2_FILTER_PARAMETERS* pParameters, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + STDMETHOD_(void, GetOutputFilterParameters) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ + __out XAUDIO2_FILTER_PARAMETERS* pParameters) PURE; \ + \ + STDMETHOD(SetVolume) (THIS_ float Volume, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + STDMETHOD_(void, GetVolume) (THIS_ __out float* pVolume) PURE; \ + \ + STDMETHOD(SetChannelVolumes) (THIS_ UINT32 Channels, __in_ecount(Channels) const float* pVolumes, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + STDMETHOD_(void, GetChannelVolumes) (THIS_ UINT32 Channels, __out_ecount(Channels) float* pVolumes) PURE; \ + \ + STDMETHOD(SetOutputMatrix) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ + UINT32 SourceChannels, UINT32 DestinationChannels, \ + __in_ecount(SourceChannels * DestinationChannels) const float* pLevelMatrix, \ + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; \ + \ + STDMETHOD_(void, GetOutputMatrix) (THIS_ __in_opt IXAudio2Voice* pDestinationVoice, \ + UINT32 SourceChannels, UINT32 DestinationChannels, \ + __out_ecount(SourceChannels * DestinationChannels) float* pLevelMatrix) PURE; \ + \ + STDMETHOD_(void, DestroyVoice) (THIS) PURE - Declare_IXAudio2Voice_Methods(); + Declare_IXAudio2Voice_Methods(); }; DECLARE_INTERFACE_(IXAudio2MasteringVoice, IXAudio2Voice) { - Declare_IXAudio2Voice_Methods(); + Declare_IXAudio2Voice_Methods(); }; DECLARE_INTERFACE_(IXAudio2SourceVoice, IXAudio2Voice) { - Declare_IXAudio2Voice_Methods(); - STDMETHOD(Start) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; - STDMETHOD(Stop) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; - STDMETHOD(SubmitSourceBuffer) (THIS_ __in const XAUDIO2_BUFFER* pBuffer, __in_opt const XAUDIO2_BUFFER_WMA* pBufferWMA X2DEFAULT(NULL)) PURE; - STDMETHOD(FlushSourceBuffers) (THIS) PURE; - STDMETHOD(Discontinuity) (THIS) PURE; - STDMETHOD(ExitLoop) (THIS_ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; - STDMETHOD_(void, GetState) (THIS_ __out XAUDIO2_VOICE_STATE* pVoiceState) PURE; - STDMETHOD(SetFrequencyRatio) (THIS_ float Ratio, - UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; - STDMETHOD_(void, GetFrequencyRatio) (THIS_ __out float* pRatio) PURE; - STDMETHOD(SetSourceSampleRate) (THIS_ UINT32 NewSourceSampleRate) PURE; + Declare_IXAudio2Voice_Methods(); + STDMETHOD(Start) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; + STDMETHOD(Stop) (THIS_ UINT32 Flags X2DEFAULT(0), UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; + STDMETHOD(SubmitSourceBuffer) (THIS_ __in const XAUDIO2_BUFFER* pBuffer, __in_opt const XAUDIO2_BUFFER_WMA* pBufferWMA X2DEFAULT(NULL)) PURE; + STDMETHOD(FlushSourceBuffers) (THIS) PURE; + STDMETHOD(Discontinuity) (THIS) PURE; + STDMETHOD(ExitLoop) (THIS_ UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; + STDMETHOD_(void, GetState) (THIS_ __out XAUDIO2_VOICE_STATE* pVoiceState) PURE; + STDMETHOD(SetFrequencyRatio) (THIS_ float Ratio, + UINT32 OperationSet X2DEFAULT(XAUDIO2_COMMIT_NOW)) PURE; + STDMETHOD_(void, GetFrequencyRatio) (THIS_ __out float* pRatio) PURE; + STDMETHOD(SetSourceSampleRate) (THIS_ UINT32 NewSourceSampleRate) PURE; }; DECLARE_INTERFACE_(IXAudio2, IUnknown) { - STDMETHOD(QueryInterface) (THIS_ REFIID riid, __deref_out void** ppvInterface) PURE; - STDMETHOD_(ULONG, AddRef) (THIS) PURE; - STDMETHOD_(ULONG, Release) (THIS) PURE; - STDMETHOD(GetDeviceCount) (THIS_ __out UINT32* pCount) PURE; - STDMETHOD(GetDeviceDetails) (THIS_ UINT32 Index, __out XAUDIO2_DEVICE_DETAILS* pDeviceDetails) PURE; - STDMETHOD(Initialize) (THIS_ UINT32 Flags X2DEFAULT(0), - XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_DEFAULT_PROCESSOR)) PURE; - STDMETHOD(RegisterForCallbacks) (__in IXAudio2EngineCallback* pCallback) PURE; - STDMETHOD_(void, UnregisterForCallbacks) (__in IXAudio2EngineCallback* pCallback) PURE; - STDMETHOD(CreateSourceVoice) (THIS_ __deref_out IXAudio2SourceVoice** ppSourceVoice, - __in const WAVEFORMATEX* pSourceFormat, - UINT32 Flags X2DEFAULT(0), - float MaxFrequencyRatio X2DEFAULT(XAUDIO2_DEFAULT_FREQ_RATIO), - __in_opt IXAudio2VoiceCallback* pCallback X2DEFAULT(NULL), - __in_opt const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), - __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; - STDMETHOD(CreateSubmixVoice) (THIS_ __deref_out IXAudio2SubmixVoice** ppSubmixVoice, - UINT32 InputChannels, UINT32 InputSampleRate, - UINT32 Flags X2DEFAULT(0), UINT32 ProcessingStage X2DEFAULT(0), - __in_opt const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), - __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; - STDMETHOD(CreateMasteringVoice) (THIS_ __deref_out IXAudio2MasteringVoice** ppMasteringVoice, - UINT32 InputChannels X2DEFAULT(XAUDIO2_DEFAULT_CHANNELS), - UINT32 InputSampleRate X2DEFAULT(XAUDIO2_DEFAULT_SAMPLERATE), - UINT32 Flags X2DEFAULT(0), UINT32 DeviceIndex X2DEFAULT(0), - __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; + STDMETHOD(QueryInterface) (THIS_ REFIID riid, __deref_out void** ppvInterface) PURE; + STDMETHOD_(ULONG, AddRef) (THIS) PURE; + STDMETHOD_(ULONG, Release) (THIS) PURE; + STDMETHOD(GetDeviceCount) (THIS_ __out UINT32* pCount) PURE; + STDMETHOD(GetDeviceDetails) (THIS_ UINT32 Index, __out XAUDIO2_DEVICE_DETAILS* pDeviceDetails) PURE; + STDMETHOD(Initialize) (THIS_ UINT32 Flags X2DEFAULT(0), + XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_DEFAULT_PROCESSOR)) PURE; + STDMETHOD(RegisterForCallbacks) (__in IXAudio2EngineCallback* pCallback) PURE; + STDMETHOD_(void, UnregisterForCallbacks) (__in IXAudio2EngineCallback* pCallback) PURE; + STDMETHOD(CreateSourceVoice) (THIS_ __deref_out IXAudio2SourceVoice** ppSourceVoice, + __in const WAVEFORMATEX* pSourceFormat, + UINT32 Flags X2DEFAULT(0), + float MaxFrequencyRatio X2DEFAULT(XAUDIO2_DEFAULT_FREQ_RATIO), + __in_opt IXAudio2VoiceCallback* pCallback X2DEFAULT(NULL), + __in_opt const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), + __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; + STDMETHOD(CreateSubmixVoice) (THIS_ __deref_out IXAudio2SubmixVoice** ppSubmixVoice, + UINT32 InputChannels, UINT32 InputSampleRate, + UINT32 Flags X2DEFAULT(0), UINT32 ProcessingStage X2DEFAULT(0), + __in_opt const XAUDIO2_VOICE_SENDS* pSendList X2DEFAULT(NULL), + __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; + STDMETHOD(CreateMasteringVoice) (THIS_ __deref_out IXAudio2MasteringVoice** ppMasteringVoice, + UINT32 InputChannels X2DEFAULT(XAUDIO2_DEFAULT_CHANNELS), + UINT32 InputSampleRate X2DEFAULT(XAUDIO2_DEFAULT_SAMPLERATE), + UINT32 Flags X2DEFAULT(0), UINT32 DeviceIndex X2DEFAULT(0), + __in_opt const XAUDIO2_EFFECT_CHAIN* pEffectChain X2DEFAULT(NULL)) PURE; - STDMETHOD(StartEngine) (THIS) PURE; - STDMETHOD_(void, StopEngine) (THIS) PURE; - STDMETHOD(CommitChanges) (THIS_ UINT32 OperationSet) PURE; + STDMETHOD(StartEngine) (THIS) PURE; + STDMETHOD_(void, StopEngine) (THIS) PURE; + STDMETHOD(CommitChanges) (THIS_ UINT32 OperationSet) PURE; }; // C++ hooks. @@ -250,7 +250,7 @@ DECLARE_INTERFACE_(IXAudio2, IUnknown) #define IXAudio2MasteringVoice_DestroyVoice IXAudio2Voice_DestroyVoice STDAPI XAudio2Create(__deref_out IXAudio2** ppXAudio2, UINT32 Flags X2DEFAULT(0), - XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_DEFAULT_PROCESSOR)); + XAUDIO2_PROCESSOR XAudio2Processor X2DEFAULT(XAUDIO2_DEFAULT_PROCESSOR)); // Undo the #pragma pack(push, 1) directive at the top of this file #pragma pack(pop) diff --git a/audio/xaudio.c b/audio/xaudio.c index 16bfa0ad4e..4e23d8958a 100644 --- a/audio/xaudio.c +++ b/audio/xaudio.c @@ -1,5 +1,6 @@ /* RetroArch - A frontend for libretro. * Copyright (C) 2010-2013 - Hans-Kristian Arntzen + * Copyright (C) 2011-2013 - Daniel De Matteis * * RetroArch is free software: you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Found-