Hello Alistair,
There's a typo in the title ("xact.idl" instead of "xact3.idl"). I also have a couple more comments inline.
On 1/28/20 5:33 PM, Alistair Leslie-Hughes wrote:
From: Ethan Lee elee@codeweavers.com
v2: Use a xact3wb.h for the structures that use :X syntax, which is the same as windows. #if 0 these structures and removed the union part with a equal size value.
Why do you need to do this? If you just "import" xact3wb.h instead of using cpp_quote("#include"), it should just work. It generates the right header for me, at least.
Windows only exposes the lastest IXACT3Engine, we'll have to use a private idl to define the other versions.
Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com
include/Makefile.in | 1 + include/xact3.idl | 556 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 557 insertions(+) create mode 100644 include/xact3.idl
diff --git a/include/Makefile.in b/include/Makefile.in index b1e7d0084f..acfbfe329a 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -772,6 +772,7 @@ SOURCES = \ wtypes.idl \ wuapi.idl \ x3daudio.h \
- xact3.idl \ xact3wb.h \ xapo.idl \ xapofx.h \
diff --git a/include/xact3.idl b/include/xact3.idl new file mode 100644 index 0000000000..a355015cac --- /dev/null +++ b/include/xact3.idl @@ -0,0 +1,556 @@ +/*
- Copyright (c) 2018 Ethan Lee for CodeWeavers
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
- */
+import "unknwn.idl"; +import "xaudio2.idl";
+cpp_quote("#include "xact3wb.h"")
+[
- uuid(bcc782bc-6492-4c22-8c35-f5d72fe73c6e)
+] +coclass XACTEngine +{
- interface IUnknown;
I think adding "interface" entries inside a coclass is pointless if it's not in a type library.
+}
+interface IXACT3Engine; +interface IXACT3SoundBank; +interface IXACT3WaveBank; +interface IXACT3Cue; +interface IXACT3Wave;
+typedef WORD XACTCATEGORY; +typedef BYTE XACTCHANNEL; +typedef WORD XACTINDEX; +typedef BYTE XACTINSTANCELIMIT; +typedef BYTE XACTLOOPCOUNT; +typedef BYTE XACTNOTIFICATIONTYPE; +typedef SHORT XACTPITCH; +typedef LONG XACTTIME; +typedef WORD XACTVARIABLEINDEX; +typedef FLOAT XACTVARIABLEVALUE; +typedef BYTE XACTVARIATIONWEIGHT; +typedef FLOAT XACTVOLUME;
+typedef struct XACT_RENDERER_DETAILS +{
- WCHAR rendererID[0xFF];
- WCHAR displayName[0xFF];
- BOOL defaultDevice;
+} XACT_RENDERER_DETAILS;
+typedef BOOL (__stdcall *XACT_READFILE_CALLBACK)(
- HANDLE hFile,
- LPVOID lpBuffer,
- DWORD nNumberOfBytesRead,
- LPDWORD lpNumberOfBytesRead,
- void* lpOverlapped
+); +typedef BOOL (__stdcall *XACT_GETOVERLAPPEDRESULT_CALLBACK)(
- HANDLE hFile,
- void* lpOverlapped,
- LPDWORD lpNumberOfBytesTransferred,
- BOOL bWait
+); +typedef struct XACT_FILEIO_CALLBACKS +{
- XACT_READFILE_CALLBACK readFileCallback;
- XACT_GETOVERLAPPEDRESULT_CALLBACK getOverlappedResultCallback;
+} XACT_FILEIO_CALLBACKS;
+typedef struct XACT_NOTIFICATION XACT_NOTIFICATION; +typedef void (__stdcall *XACT_NOTIFICATION_CALLBACK)(
- const XACT_NOTIFICATION *pNotification
+);
+typedef struct XACT_RUNTIME_PARAMETERS +{
- DWORD lookAheadTime;
- void* pGlobalSettingsBuffer;
- DWORD globalSettingsBufferSize;
- DWORD globalSettingsFlags;
- DWORD globalSettingsAllocAttributes;
- XACT_FILEIO_CALLBACKS fileIOCallbacks;
- XACT_NOTIFICATION_CALLBACK fnNotificationCallback;
- LPCWSTR pRendererID;
- IXAudio2 *pXAudio2;
- IXAudio2MasteringVoice *pMasteringVoice;
+} XACT_RUNTIME_PARAMETERS;
+typedef struct XACT_STREAMING_PARAMETERS +{
- HANDLE file;
- DWORD offset;
- DWORD flags;
- WORD packetSize;
+} XACT_STREAMING_PARAMETERS;
+/* defined in xact3wb.h */ +cpp_quote("#if 0")
+typedef struct WAVEBANKREGION +{
- DWORD dwOffset;
- DWORD dwLength;
+} WAVEBANKREGION;
+typedef struct WAVEBANKSAMPLEREGION +{
- DWORD dwStartSample;
- DWORD dwTotalSamples;
+} WAVEBANKSAMPLEREGION;
+typedef union WAVEBANKMINIWAVEFORMAT +{
- DWORD dwValue;
+} WAVEBANKMINIWAVEFORMAT;
+typedef struct WAVEBANKENTRY +{
- DWORD dwFlagsAndDuration; /* Is a union */
- WAVEBANKMINIWAVEFORMAT Format;
- WAVEBANKREGION PlayRegion;
- WAVEBANKSAMPLEREGION LoopRegion;
+} WAVEBANKENTRY;
+cpp_quote("#endif")
+typedef struct XACT_WAVE_PROPERTIES +{
- char friendlyName[64];
- WAVEBANKMINIWAVEFORMAT format;
- DWORD durationInSamples;
- WAVEBANKSAMPLEREGION loopRegion;
- BOOL streaming;
+} XACT_WAVE_PROPERTIES;
+cpp_quote("#if 0") +typedef struct XACT_WAVE_INSTANCE_PROPERTIES +{
- XACT_WAVE_PROPERTIES waveProperties; /* properties is a keyword for midl */
- BOOL backgroundMusic;
+} XACT_WAVE_INSTANCE_PROPERTIES; +cpp_quote("#endif")
+cpp_quote("typedef struct XACT_WAVE_INSTANCE_PROPERTIES") +cpp_quote("{") +cpp_quote(" XACT_WAVE_PROPERTIES properties;") +cpp_quote(" BOOL backgroundMusic;") +cpp_quote("} XACT_WAVE_INSTANCE_PROPERTIES;")
+typedef struct XACT_CUE_PROPERTIES +{
- char friendlyName[0xFF];
- BOOL interactive;
- XACTINDEX iaVariableIndex;
- XACTINDEX numVariations;
- XACTINSTANCELIMIT maxInstances;
- XACTINSTANCELIMIT currentInstances;
+} XACT_CUE_PROPERTIES;
+typedef struct XACT_TRACK_PROPERTIES +{
- XACTTIME duration;
- XACTINDEX numVariations;
- XACTCHANNEL numChannels;
- XACTINDEX waveVariation;
- XACTLOOPCOUNT loopCount;
+} XACT_TRACK_PROPERTIES;
+typedef struct XACT_VARIATION_PROPERTIES +{
- XACTINDEX index;
- XACTVARIATIONWEIGHT weight;
- XACTVARIABLEVALUE iaVariableMin;
- XACTVARIABLEVALUE iaVariableMax;
- BOOL linger;
+} XACT_VARIATION_PROPERTIES;
+typedef struct XACT_SOUND_PROPERTIES +{
- XACTCATEGORY category;
- BYTE priority;
- XACTPITCH pitch;
- XACTVOLUME volume;
- XACTINDEX numTracks;
- XACT_TRACK_PROPERTIES arrTrackProperties[1];
+} XACT_SOUND_PROPERTIES;
+typedef struct XACT_SOUND_VARIATION_PROPERTIES +{
- XACT_VARIATION_PROPERTIES variationProperties;
- XACT_SOUND_PROPERTIES soundProperties;
+} XACT_SOUND_VARIATION_PROPERTIES;
+typedef struct XACT_CUE_INSTANCE_PROPERTIES +{
- DWORD allocAttributes;
- XACT_CUE_PROPERTIES cueProperties;
- XACT_SOUND_VARIATION_PROPERTIES activeVariationProperties;
+} XACT_CUE_INSTANCE_PROPERTIES;
+cpp_quote("#include <pshpack1.h>")
+typedef struct XACT_NOTIFICATION_DESCRIPTION +{
- XACTNOTIFICATIONTYPE type;
- BYTE flags;
- IXACT3SoundBank *pSoundBank;
- IXACT3WaveBank *pWaveBank;
- IXACT3Cue *pCue;
- IXACT3Wave *pWave;
- XACTINDEX cueIndex;
- XACTINDEX waveIndex;
- void* pvContext;
+} XACT_NOTIFICATION_DESCRIPTION;
+typedef struct XACT_NOTIFICATION_CUE +{
- XACTINDEX cueIndex;
- IXACT3SoundBank *pSoundBank;
- IXACT3Cue *pCue;
+} XACT_NOTIFICATION_CUE;
+typedef struct XACT_NOTIFICATION_MARKER +{
- XACTINDEX cueIndex;
- IXACT3SoundBank *pSoundBank;
- IXACT3Cue *pCue;
- DWORD 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 +{
- XACTINDEX cueIndex;
- IXACT3SoundBank *pSoundBank;
- IXACT3Cue *pCue;
- XACTVARIABLEINDEX variableIndex;
- XACTVARIABLEVALUE variableValue;
- BOOL local;
+} XACT_NOTIFICATION_VARIABLE;
+typedef struct XACT_NOTIFICATION_GUI +{
- DWORD reserved;
+} XACT_NOTIFICATION_GUI;
+typedef struct XACT_NOTIFICATION_WAVE +{
- IXACT3WaveBank *pWaveBank;
- XACTINDEX waveIndex;
- XACTINDEX cueIndex;
- IXACT3SoundBank *pSoundBank;
- IXACT3Cue *pCue;
- IXACT3Wave *pWave;
+} XACT_NOTIFICATION_WAVE;
+struct XACT_NOTIFICATION +{
- XACTNOTIFICATIONTYPE type;
- LONG timeStamp;
- PVOID 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;
- };
+};
+cpp_quote("#include <poppack.h>")
+static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_CUEDESTROYED = 4; +static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_SOUNDBANKDESTROYED = 6; +static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEBANKDESTROYED = 7; +static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEDESTROYED = 16;
+[
- object,
- local,
- uuid(b1ee676a-d9cd-4d2a-89a8-fa53eb9e480b),
+] +interface IXACT3Engine : IUnknown +{
- HRESULT GetRendererCount([out] XACTINDEX *pnRendererCount);
If the interface isn't remotable, adding [in] and [out] annotations is also kind of pointless.
- HRESULT GetRendererDetails(
XACTINDEX nRendererIndex,
[out] XACT_RENDERER_DETAILS *pRendererDetails);
- HRESULT GetFinalMixFormat([out] WAVEFORMATEXTENSIBLE *pFinalMixFormat);
- HRESULT Initialize([in] const XACT_RUNTIME_PARAMETERS *pParams);
- HRESULT ShutDown();
- HRESULT DoWork();
- HRESULT CreateSoundBank(
[in] const void* pvBuffer,
DWORD dwSize,
DWORD dwFlags,
DWORD dwAllocAttributes,
[out] IXACT3SoundBank **ppSoundBank);
- HRESULT CreateInMemoryWaveBank(
[in] const void* pvBuffer,
DWORD dwSize,
DWORD dwFlags,
DWORD dwAllocAttributes,
[out] IXACT3WaveBank **ppWaveBank);
- HRESULT CreateStreamingWaveBank(
[in] const XACT_STREAMING_PARAMETERS *pParms,
[out] IXACT3WaveBank **ppWaveBank);
- HRESULT PrepareWave(
DWORD dwFlags,
[in] LPCSTR szWavePath,
WORD wStreamingPacketSize,
DWORD dwAlignment,
DWORD dwPlayOffset,
XACTLOOPCOUNT nLoopCount,
[out] IXACT3Wave **ppWave);
- HRESULT PrepareInMemoryWave(
DWORD dwFlags,
WAVEBANKENTRY entry,
[in] DWORD *pdwSeekTable,
[in] BYTE *pbWaveData,
DWORD dwPlayOffset,
XACTLOOPCOUNT nLoopCount,
[out] IXACT3Wave **ppWave);
- HRESULT PrepareStreamingWave(
DWORD dwFlags,
WAVEBANKENTRY entry,
XACT_STREAMING_PARAMETERS streamingParams,
DWORD dwAlignment,
[in] DWORD *pdwSeekTable,
DWORD dwPlayOffset,
XACTLOOPCOUNT nLoopCount,
[out] IXACT3Wave **ppWave);
- HRESULT RegisterNotification(
[in] const XACT_NOTIFICATION_DESCRIPTION *pNotificationDesc);
- HRESULT UnRegisterNotification(
[in] const XACT_NOTIFICATION_DESCRIPTION *pNotificationDesc);
- XACTCATEGORY GetCategory(
[in] LPCSTR szFriendlyName);
- HRESULT Stop(XACTCATEGORY nCategory, DWORD dwFlags);
- HRESULT SetVolume(XACTCATEGORY nCategory, XACTVOLUME nVolume);
- HRESULT Pause(XACTCATEGORY nCategory, BOOL fPause);
- XACTVARIABLEINDEX GetGlobalVariableIndex([in] LPCSTR szFriendlyName);
- HRESULT SetGlobalVariable(
XACTVARIABLEINDEX nIndex,
XACTVARIABLEVALUE nValue);
- HRESULT GetGlobalVariable(
XACTVARIABLEINDEX nIndex,
[out] XACTVARIABLEVALUE *nValue);
+}
+[
- object,
- local
+] +interface IXACT3SoundBank +{
- XACTINDEX GetCueIndex([in] LPCSTR szFriendlyName);
- HRESULT GetNumCues([out] XACTINDEX *pnNumCues);
- HRESULT GetCueProperties(
XACTINDEX nCueIndex,
[out] XACT_CUE_PROPERTIES *pProperties);
- HRESULT Prepare(
XACTINDEX nCueIndex,
DWORD dwFlags,
XACTTIME timeOffset,
[out] IXACT3Cue **ppCue);
- HRESULT Play(
XACTINDEX nCueIndex,
DWORD dwFlags,
XACTTIME timeOffset,
[out] IXACT3Cue **ppCue);
- HRESULT Stop(XACTINDEX nCueIndex, DWORD dwFlags);
- HRESULT Destroy();
- HRESULT GetState([out] DWORD *pdwState);
+}
+[
- object,
- local
+] +interface IXACT3WaveBank +{
- HRESULT Destroy();
- HRESULT GetNumWaves([out] XACTINDEX *pnNumWaves);
- XACTINDEX GetWaveIndex([in] LPCSTR szFriendlyName);
- HRESULT GetWaveProperties(
XACTINDEX nWaveIndex,
[out] XACT_WAVE_PROPERTIES *pWaveProperties);
- HRESULT Prepare(
XACTINDEX nWaveIndex,
DWORD dwFlags,
DWORD dwPlayOffset,
XACTLOOPCOUNT nLoopCount,
[out] IXACT3Wave **ppWave);
- HRESULT Play(
XACTINDEX nWaveIndex,
DWORD dwFlags,
DWORD dwPlayOffset,
XACTLOOPCOUNT nLoopCount,
[out] IXACT3Wave **ppWave);
- HRESULT Stop(XACTINDEX nWaveIndex, DWORD dwFlags);
- HRESULT GetState([out] DWORD *pdwState);
+}
+[
- object,
- local
+] +interface IXACT34Cue +{
- HRESULT Play();
- HRESULT Stop(DWORD dwFlags);
- HRESULT GetState([out] DWORD *pdwState);
- HRESULT Destroy();
- HRESULT SetMatrixCoefficients(
UINT32 uSrcChannelCount,
UINT32 uDstChannelCount,
[in] float *pMatrixCoefficients);
- XACTVARIABLEINDEX GetVariableIndex([in] LPCSTR szFriendlyName);
- HRESULT SetVariable(XACTVARIABLEINDEX nIndex, XACTVARIABLEVALUE nValue);
- HRESULT GetVariable(
XACTVARIABLEINDEX nIndex,
[out] XACTVARIABLEVALUE *nValue);
- HRESULT Pause(BOOL fPause);
- HRESULT GetProperties([out] XACT_CUE_INSTANCE_PROPERTIES **ppProperties);
+}
+[
- object,
- local
+] +interface IXACT3Cue +{
- HRESULT Play();
- HRESULT Stop(DWORD dwFlags);
- HRESULT GetState([out] DWORD *pdwState);
- HRESULT Destroy();
- HRESULT SetMatrixCoefficients(
UINT32 uSrcChannelCount,
UINT32 uDstChannelCount,
[in] float *pMatrixCoefficients);
- XACTVARIABLEINDEX GetVariableIndex([in] LPCSTR szFriendlyName);
- HRESULT SetVariable(XACTVARIABLEINDEX nIndex, XACTVARIABLEVALUE nValue);
- HRESULT GetVariable(
XACTVARIABLEINDEX nIndex,
[out] XACTVARIABLEVALUE *nValue);
- HRESULT Pause(BOOL fPause);
- HRESULT GetProperties([out] XACT_CUE_INSTANCE_PROPERTIES **ppProperties);
- HRESULT SetOutputVoices([in] const XAUDIO2_VOICE_SENDS *pSendList);
- HRESULT SetOutputVoiceMatrix(
[in] IXAudio2Voice *pDestinationVoice,
UINT32 SourceChannels,
UINT32 DestinationChannels,
[in, size_is(SourceChannels * DestinationChannels)] const float *pLevelMatrix);
+}
+[
- object,
- local
+] +interface IXACT3Wave +{
- HRESULT Destroy();
- HRESULT Play();
- HRESULT Stop(DWORD dwFlags);
- HRESULT Pause(BOOL fPause);
- HRESULT GetState([out] DWORD *pdwState);
- HRESULT SetPitch(XACTPITCH pitch);
- HRESULT SetVolume(XACTVOLUME volume);
- HRESULT SetMatrixCoefficients(
UINT32 uSrcChannelCount,
UINT32 uDstChannelCount,
[in] float *pMatrixCoefficients);
- HRESULT GetProperties([out] XACT_WAVE_INSTANCE_PROPERTIES *pProperties);
+}