Added xactengine-initial patchset

This commit is contained in:
Alistair Leslie-Hughes 2020-03-01 15:03:34 +11:00
parent ad3de029e7
commit 2fc5c88068
18 changed files with 3576 additions and 0 deletions

View File

@ -355,6 +355,7 @@ patch_enable_all ()
enable_ws2_32_getaddrinfo="$1"
enable_ws2_32_getsockopt="$1"
enable_wtsapi32_EnumerateProcesses="$1"
enable_xactengine_initial="$1"
}
# Enable or disable a specific patchset
@ -1177,6 +1178,9 @@ patch_enable ()
wtsapi32-EnumerateProcesses)
enable_wtsapi32_EnumerateProcesses="$2"
;;
xactengine-initial)
enable_xactengine_initial="$2"
;;
*)
return 1
;;
@ -7284,6 +7288,62 @@ if test "$enable_wtsapi32_EnumerateProcesses" -eq 1; then
) >> "$patchlist"
fi
# Patchset xactengine-initial
# |
# | This patchset fixes the following Wine bugs:
# | * [#31476] Support Bully Scholarship Edition xactengine3_1.dll.
# | * [#38615] DSA: Drakensang Demo fails on IXACTEngine::Initialize
# | * [#41030] Pac-Man Museum requires xactengine3_7
# | * [#41045] Captain Morgane requires xactengine3_4
# | * [#48684] BlazBlue: Calamity Trigger requires for xactengine 3.3 interface.
# |
# | Modified files:
# | * configure.ac, dlls/xactengine3_0/Makefile.in, dlls/xactengine3_0/xactengine3_0.spec, dlls/xactengine3_1/Makefile.in,
# | dlls/xactengine3_1/xactengine3_1.spec, dlls/xactengine3_2/Makefile.in, dlls/xactengine3_2/xactengine3_2.spec,
# | dlls/xactengine3_3/Makefile.in, dlls/xactengine3_3/xactengine3_3.spec, dlls/xactengine3_4/Makefile.in,
# | dlls/xactengine3_4/xactengine3_4.spec, dlls/xactengine3_5/Makefile.in, dlls/xactengine3_5/xactengine3_5.spec,
# | dlls/xactengine3_6/Makefile.in, dlls/xactengine3_6/xactengine3_6.spec, dlls/xactengine3_7/Makefile.in,
# | dlls/xactengine3_7/xactengine3_7.spec, dlls/xaudio2_7/Makefile.in, dlls/xaudio2_7/tests/Makefile.in,
# | dlls/xaudio2_7/tests/globals.xgs, dlls/xaudio2_7/tests/rsrc.rc, dlls/xaudio2_7/tests/xact.c,
# | dlls/xaudio2_7/tests/xaudio2.c, dlls/xaudio2_7/xact_classes.idl, dlls/xaudio2_7/xact_dll.c, dlls/xaudio2_7/xaudio_dll.c,
# | include/Makefile.in, include/xact3.idl, include/xact3wb.h
# |
if test "$enable_xactengine_initial" -eq 1; then
patch_apply xactengine-initial/0001-include-Add-xact3.idl.patch
patch_apply xactengine-initial/0002-xaudio2-Add-support-for-xactengine3.patch
patch_apply xactengine-initial/0003-xaudio2_7-Support-older-XACT3Engine-interfaces.patch
patch_apply xactengine-initial/0004-xaudio2_7-IXACT3Engine-Initialize-return-valid-error.patch
patch_apply xactengine-initial/0005-xaudio2_7-IXACT3Engine-CreateSoundBank-return-correc.patch
patch_apply xactengine-initial/0006-xaudio2_7-Always-return-S_OK-in-IXACT34Cue-Destroy.patch
patch_apply xactengine-initial/0007-xaudio2_7-Dont-cast-interface-pointers.patch
patch_apply xactengine-initial/0008-include-Add-XACTNOTIFICATIONTYPE_-values.patch
patch_apply xactengine-initial/0009-xaudio2_7-unwrap-structure-based-of-it-s-type.patch
patch_apply xactengine-initial/0010-xaudio2_7-Correct-callback-to-windows-function.patch
patch_apply xactengine-initial/0011-xaudio2_7-Initial-IXACT3Engine-tests.patch
patch_apply xactengine-initial/0012-xaudio2_7-Trace-FAudio-version-being-used.patch
patch_apply xactengine-initial/0013-xaudio2_7-Trace-FAudio-version-being-used.patch
patch_apply xactengine-initial/0014-include-Add-XACTENGINE_-error-codes.patch
patch_apply xactengine-initial/0015-include-Add-XACT-defines.patch
patch_apply xactengine-initial/0016-xaudio2_7-tests-Add-more-tests.patch
(
printf '%s\n' '+ { "Ethan Lee", "include: Add xact3.idl.", 1 },';
printf '%s\n' '+ { "Ethan Lee", "xaudio2: Add support for xactengine3.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "xaudio2_7: Support older XACT3Engine interfaces.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "xaudio2_7: IXACT3Engine Initialize return valid error code.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "xaudio2_7: IXACT3Engine CreateSoundBank return correct HRESULT values.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "xaudio2_7: Always return S_OK in IXACT34Cue Destroy.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "xaudio2_7: Dont cast interface pointers.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "include: Add XACTNOTIFICATIONTYPE_* values.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "xaudio2_7: Unwrap structure based of it'\''s type.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "xaudio2_7: Correct callback to windows function.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "xaudio2_7: Initial IXACT3Engine tests.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "xaudio2_7: Trace FAudio version being used.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "include: Add XACTENGINE_* error codes.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "include: Add XACT defines.", 1 },';
printf '%s\n' '+ { "Alistair Leslie-Hughes", "xaudio2_7/tests: Add more tests.", 1 },';
) >> "$patchlist"
fi
if test "$enable_patchlist" -eq 1; then

View File

@ -0,0 +1,580 @@
From fa4b6d66242136e922620295da4a22a7431d17fe Mon Sep 17 00:00:00 2001
From: Ethan Lee <elee@codeweavers.com>
Date: Wed, 22 Jan 2020 00:12:10 +0000
Subject: [PATCH] include: Add xact3.idl
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
include/Makefile.in | 1 +
include/xact3.idl | 533 ++++++++++++++++++++++++++++++++++++++++++++
include/xact3wb.h | 2 +
3 files changed, 536 insertions(+)
create mode 100644 include/xact3.idl
diff --git a/include/Makefile.in b/include/Makefile.in
index ce0f6fc433..faba1622d9 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -784,6 +784,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..c49718ff39
--- /dev/null
+++ b/include/xact3.idl
@@ -0,0 +1,533 @@
+/*
+ * 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";
+
+import "xact3wb.h";
+
+[
+ uuid(bcc782bc-6492-4c22-8c35-f5d72fe73c6e)
+]
+coclass XACTEngine
+{
+}
+
+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;
+
+#define XACT_RENDERER_ID_LENGTH 0xff
+#define XACT_RENDERER_NAME_LENGTH 0xff
+#define XACT_CUE_NAME_LENGTH 0xff
+
+cpp_quote("#ifndef WAVEBANK_ENTRYNAME_LENGTH")
+#define WAVEBANK_ENTRYNAME_LENGTH 64
+cpp_quote("#endif")
+
+typedef struct XACT_RENDERER_DETAILS
+{
+ WCHAR rendererID[XACT_RENDERER_ID_LENGTH];
+ WCHAR displayName[XACT_RENDERER_NAME_LENGTH];
+ 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_STREAMING_PARAMETERS
+{
+ HANDLE file;
+ DWORD offset;
+ DWORD flags;
+ WORD packetSize;
+} XACT_STREAMING_PARAMETERS;
+
+typedef struct XACT_WAVE_PROPERTIES
+{
+ char friendlyName[WAVEBANK_ENTRYNAME_LENGTH];
+ 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[XACT_CUE_NAME_LENGTH];
+ 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;
+
+typedef 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;
+ } DUMMYUNIONNAME;
+} 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;
+
+
+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(XACTINDEX *pnRendererCount);
+
+ HRESULT GetRendererDetails(
+ XACTINDEX nRendererIndex,
+ XACT_RENDERER_DETAILS *pRendererDetails);
+
+ HRESULT GetFinalMixFormat(WAVEFORMATEXTENSIBLE *pFinalMixFormat);
+
+ HRESULT Initialize(const XACT_RUNTIME_PARAMETERS *pParams);
+
+ HRESULT ShutDown();
+
+ HRESULT DoWork();
+
+ HRESULT CreateSoundBank(
+ const void* pvBuffer,
+ DWORD dwSize,
+ DWORD dwFlags,
+ DWORD dwAllocAttributes,
+ IXACT3SoundBank **ppSoundBank);
+
+ HRESULT CreateInMemoryWaveBank(
+ const void* pvBuffer,
+ DWORD dwSize,
+ DWORD dwFlags,
+ DWORD dwAllocAttributes,
+ IXACT3WaveBank **ppWaveBank);
+
+ HRESULT CreateStreamingWaveBank(
+ const XACT_STREAMING_PARAMETERS *pParms,
+ IXACT3WaveBank **ppWaveBank);
+
+ HRESULT PrepareWave(
+ DWORD dwFlags,
+ LPCSTR szWavePath,
+ WORD wStreamingPacketSize,
+ DWORD dwAlignment,
+ DWORD dwPlayOffset,
+ XACTLOOPCOUNT nLoopCount,
+ IXACT3Wave **ppWave);
+
+ HRESULT PrepareInMemoryWave(
+ DWORD dwFlags,
+ WAVEBANKENTRY entry,
+ DWORD *pdwSeekTable,
+ BYTE *pbWaveData,
+ DWORD dwPlayOffset,
+ XACTLOOPCOUNT nLoopCount,
+ IXACT3Wave **ppWave);
+
+ HRESULT PrepareStreamingWave(
+ DWORD dwFlags,
+ WAVEBANKENTRY entry,
+ XACT_STREAMING_PARAMETERS streamingParams,
+ DWORD dwAlignment,
+ DWORD *pdwSeekTable,
+ DWORD dwPlayOffset,
+ XACTLOOPCOUNT nLoopCount,
+ IXACT3Wave **ppWave);
+
+ HRESULT RegisterNotification(
+ const XACT_NOTIFICATION_DESCRIPTION *pNotificationDesc);
+
+ HRESULT UnRegisterNotification(
+ const XACT_NOTIFICATION_DESCRIPTION *pNotificationDesc);
+
+ XACTCATEGORY GetCategory(
+ LPCSTR szFriendlyName);
+
+ HRESULT Stop(XACTCATEGORY nCategory, DWORD dwFlags);
+
+ HRESULT SetVolume(XACTCATEGORY nCategory, XACTVOLUME nVolume);
+
+ HRESULT Pause(XACTCATEGORY nCategory, BOOL fPause);
+
+ XACTVARIABLEINDEX GetGlobalVariableIndex(LPCSTR szFriendlyName);
+
+ HRESULT SetGlobalVariable(
+ XACTVARIABLEINDEX nIndex,
+ XACTVARIABLEVALUE nValue);
+
+ HRESULT GetGlobalVariable(
+ XACTVARIABLEINDEX nIndex,
+ XACTVARIABLEVALUE *nValue);
+}
+
+[
+ object,
+ local
+]
+interface IXACT3SoundBank
+{
+ XACTINDEX GetCueIndex(LPCSTR szFriendlyName);
+
+ HRESULT GetNumCues(XACTINDEX *pnNumCues);
+
+ HRESULT GetCueProperties(
+ XACTINDEX nCueIndex,
+ XACT_CUE_PROPERTIES *pProperties);
+
+ HRESULT Prepare(
+ XACTINDEX nCueIndex,
+ DWORD dwFlags,
+ XACTTIME timeOffset,
+ IXACT3Cue **ppCue);
+
+ HRESULT Play(
+ XACTINDEX nCueIndex,
+ DWORD dwFlags,
+ XACTTIME timeOffset,
+ IXACT3Cue **ppCue);
+
+ HRESULT Stop(XACTINDEX nCueIndex, DWORD dwFlags);
+
+ HRESULT Destroy();
+
+ HRESULT GetState(DWORD *pdwState);
+}
+
+[
+ object,
+ local
+]
+interface IXACT3WaveBank
+{
+ HRESULT Destroy();
+
+ HRESULT GetNumWaves(XACTINDEX *pnNumWaves);
+
+ XACTINDEX GetWaveIndex(LPCSTR szFriendlyName);
+
+ HRESULT GetWaveProperties(
+ XACTINDEX nWaveIndex,
+ XACT_WAVE_PROPERTIES *pWaveProperties);
+
+ HRESULT Prepare(
+ XACTINDEX nWaveIndex,
+ DWORD dwFlags,
+ DWORD dwPlayOffset,
+ XACTLOOPCOUNT nLoopCount,
+ IXACT3Wave **ppWave);
+
+ HRESULT Play(
+ XACTINDEX nWaveIndex,
+ DWORD dwFlags,
+ DWORD dwPlayOffset,
+ XACTLOOPCOUNT nLoopCount,
+ IXACT3Wave **ppWave);
+
+ HRESULT Stop(XACTINDEX nWaveIndex, DWORD dwFlags);
+
+ HRESULT GetState(DWORD *pdwState);
+}
+
+[
+ object,
+ local
+]
+interface IXACT34Cue
+{
+ HRESULT Play();
+
+ HRESULT Stop(DWORD dwFlags);
+
+ HRESULT GetState(DWORD *pdwState);
+
+ HRESULT Destroy();
+
+ HRESULT SetMatrixCoefficients(
+ UINT32 uSrcChannelCount,
+ UINT32 uDstChannelCount,
+ float *pMatrixCoefficients);
+
+ XACTVARIABLEINDEX GetVariableIndex(LPCSTR szFriendlyName);
+
+ HRESULT SetVariable(XACTVARIABLEINDEX nIndex, XACTVARIABLEVALUE nValue);
+
+ HRESULT GetVariable(
+ XACTVARIABLEINDEX nIndex,
+ XACTVARIABLEVALUE *nValue);
+
+ HRESULT Pause(BOOL fPause);
+
+ HRESULT GetProperties(XACT_CUE_INSTANCE_PROPERTIES **ppProperties);
+}
+
+[
+ object,
+ local
+]
+interface IXACT3Cue
+{
+ HRESULT Play();
+
+ HRESULT Stop(DWORD dwFlags);
+
+ HRESULT GetState(DWORD *pdwState);
+
+ HRESULT Destroy();
+
+ HRESULT SetMatrixCoefficients(
+ UINT32 uSrcChannelCount,
+ UINT32 uDstChannelCount,
+ float *pMatrixCoefficients);
+
+ XACTVARIABLEINDEX GetVariableIndex(LPCSTR szFriendlyName);
+
+ HRESULT SetVariable(XACTVARIABLEINDEX nIndex, XACTVARIABLEVALUE nValue);
+
+ HRESULT GetVariable(
+ XACTVARIABLEINDEX nIndex,
+ XACTVARIABLEVALUE *nValue);
+
+ HRESULT Pause(BOOL fPause);
+
+ HRESULT GetProperties(XACT_CUE_INSTANCE_PROPERTIES **ppProperties);
+
+ HRESULT SetOutputVoices(const XAUDIO2_VOICE_SENDS *pSendList);
+
+ HRESULT SetOutputVoiceMatrix(
+ IXAudio2Voice *pDestinationVoice,
+ UINT32 SourceChannels,
+ UINT32 DestinationChannels,
+ const float *pLevelMatrix);
+}
+
+[
+ object,
+ local
+]
+interface IXACT3Wave
+{
+ HRESULT Destroy();
+
+ HRESULT Play();
+
+ HRESULT Stop(DWORD dwFlags);
+
+ HRESULT Pause(BOOL fPause);
+
+ HRESULT GetState(DWORD *pdwState);
+
+ HRESULT SetPitch(XACTPITCH pitch);
+
+ HRESULT SetVolume(XACTVOLUME volume);
+
+ HRESULT SetMatrixCoefficients(
+ UINT32 uSrcChannelCount,
+ UINT32 uDstChannelCount,
+ float *pMatrixCoefficients);
+
+ HRESULT GetProperties(XACT_WAVE_INSTANCE_PROPERTIES *pProperties);
+}
diff --git a/include/xact3wb.h b/include/xact3wb.h
index b4c5a53d40..130efc9745 100644
--- a/include/xact3wb.h
+++ b/include/xact3wb.h
@@ -18,6 +18,8 @@
#ifndef __XACT3WB_H__
#define __XACT3WB_H__
+#define WAVEBANK_ENTRYNAME_LENGTH 64
+
typedef union WAVEBANKMINIWAVEFORMAT
{
struct
--
2.25.1

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,41 @@
From c7189e9d48079b0f3993ed8de8f774f3e0a7a97e Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 7 Jan 2020 22:14:49 +1100
Subject: [PATCH] xaudio2_7: Support older XACT3Engine interfaces
---
dlls/xaudio2_7/xact_dll.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/dlls/xaudio2_7/xact_dll.c b/dlls/xaudio2_7/xact_dll.c
index 07f866606d..91e3ef0afd 100644
--- a/dlls/xaudio2_7/xact_dll.c
+++ b/dlls/xaudio2_7/xact_dll.c
@@ -39,6 +39,10 @@ WINE_DEFAULT_DEBUG_CHANNEL(xact3);
static HINSTANCE instance;
+#if XACT3_VER >= 0x0301 && XACT3_VER <= 0x304
+DEFINE_GUID(IID_IXACT3Engine301, 0xe72c1b9a, 0xd717, 0x41c0, 0x81, 0xa6, 0x50, 0xeb, 0x56, 0xe8, 0x06, 0x49);
+#endif
+
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD reason, void *pReserved)
{
TRACE("(%p, %d, %p)\n", hinstDLL, reason, pReserved);
@@ -852,7 +856,12 @@ static HRESULT WINAPI IXACT3EngineImpl_QueryInterface(IXACT3Engine *iface,
TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObject);
if(IsEqualGUID(riid, &IID_IUnknown) ||
- IsEqualGUID(riid, &IID_IXACT3Engine)){
+#if XACT3_VER >= 0x0301 && XACT3_VER <= 0x304
+ IsEqualGUID(riid, &IID_IXACT3Engine301)
+#else
+ IsEqualGUID(riid, &IID_IXACT3Engine)
+#endif
+ ){
*ppvObject = &This->IXACT3Engine_iface;
}
else
--
2.25.1

View File

@ -0,0 +1,39 @@
From 3ad019171933268538e16f5ab14e0f7b5f4be5e2 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 8 Jan 2020 08:33:02 +1100
Subject: [PATCH] xaudio2_7: IXACT3Engine Initialize return valid error code
FACTAudioEngine_Initialize returns a uint32_t type, so we need to
convert to a valid HRESULT value.
---
dlls/xaudio2_7/xact_dll.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/xaudio2_7/xact_dll.c b/dlls/xaudio2_7/xact_dll.c
index 91e3ef0afd..1f580519d4 100644
--- a/dlls/xaudio2_7/xact_dll.c
+++ b/dlls/xaudio2_7/xact_dll.c
@@ -934,6 +934,7 @@ static HRESULT WINAPI IXACT3EngineImpl_Initialize(IXACT3Engine *iface,
{
XACT3EngineImpl *This = impl_from_IXACT3Engine(iface);
FACTRuntimeParameters params;
+ UINT ret;
TRACE("(%p)->(%p)\n", This, pParams);
@@ -972,7 +973,11 @@ static HRESULT WINAPI IXACT3EngineImpl_Initialize(IXACT3Engine *iface,
params.fileIOCallbacks.readFileCallback = wrap_readfile;
params.fileIOCallbacks.getOverlappedResultCallback = wrap_getoverlappedresult;
- return FACTAudioEngine_Initialize(This->fact_engine, &params);
+ ret = FACTAudioEngine_Initialize(This->fact_engine, &params);
+ if (ret != 0)
+ FIXME("FACTAudioEngine_Initialize returned %d\n", ret);
+
+ return !ret ? S_OK : E_FAIL;
}
static HRESULT WINAPI IXACT3EngineImpl_ShutDown(IXACT3Engine *iface)
--
2.25.1

View File

@ -0,0 +1,93 @@
From 2335980b1a1e36ce475a99b08498747021b5284c Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 8 Jan 2020 10:39:02 +1100
Subject: [PATCH] xaudio2_7: IXACT3Engine CreateSoundBank return correct
HRESULT values.
---
dlls/xaudio2_7/xact_dll.c | 28 ++++++++++++++++------------
1 file changed, 16 insertions(+), 12 deletions(-)
diff --git a/dlls/xaudio2_7/xact_dll.c b/dlls/xaudio2_7/xact_dll.c
index 1f580519d4..9cec216002 100644
--- a/dlls/xaudio2_7/xact_dll.c
+++ b/dlls/xaudio2_7/xact_dll.c
@@ -1005,21 +1005,23 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateSoundBank(IXACT3Engine *iface,
XACT3EngineImpl *This = impl_from_IXACT3Engine(iface);
XACT3SoundBankImpl *sb;
FACTSoundBank *fsb;
- HRESULT hr;
+ UINT ret;
TRACE("(%p)->(%p, %u, 0x%x, 0x%x, %p)\n", This, pvBuffer, dwSize, dwFlags,
dwAllocAttributes, ppSoundBank);
- hr = FACTAudioEngine_CreateSoundBank(This->fact_engine, pvBuffer, dwSize,
+ ret = FACTAudioEngine_CreateSoundBank(This->fact_engine, pvBuffer, dwSize,
dwFlags, dwAllocAttributes, &fsb);
- if(FAILED(hr))
- return hr;
+ if (ret != 0) {
+ ERR("Failed to CreateInMemoryWaveBank: %d\n", ret);
+ return E_FAIL;
+ }
sb = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*sb));
if (!sb){
FACTSoundBank_Destroy(fsb);
ERR("Failed to allocate XACT3SoundBankImpl!");
- return hr;
+ return E_OUTOFMEMORY;
}
sb->IXACT3SoundBank_iface.lpVtbl = &XACT3SoundBank_Vtbl;
@@ -1028,7 +1030,7 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateSoundBank(IXACT3Engine *iface,
TRACE("Created SoundBank: %p\n", sb);
- return hr;
+ return S_OK;
}
static HRESULT WINAPI IXACT3EngineImpl_CreateInMemoryWaveBank(IXACT3Engine *iface,
@@ -1038,21 +1040,23 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateInMemoryWaveBank(IXACT3Engine *ifac
XACT3EngineImpl *This = impl_from_IXACT3Engine(iface);
XACT3WaveBankImpl *wb;
FACTWaveBank *fwb;
- HRESULT hr;
+ UINT ret;
TRACE("(%p)->(%p, %u, 0x%x, 0x%x, %p)\n", This, pvBuffer, dwSize, dwFlags,
dwAllocAttributes, ppWaveBank);
- hr = FACTAudioEngine_CreateInMemoryWaveBank(This->fact_engine, pvBuffer,
+ ret = FACTAudioEngine_CreateInMemoryWaveBank(This->fact_engine, pvBuffer,
dwSize, dwFlags, dwAllocAttributes, &fwb);
- if(FAILED(hr))
- return hr;
+ if (ret != 0) {
+ ERR("Failed to CreateInMemoryWaveBank: %d\n", ret);
+ return E_FAIL;
+ }
wb = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wb));
if (!wb){
FACTWaveBank_Destroy(fwb);
ERR("Failed to allocate XACT3WaveBankImpl!");
- return hr;
+ return E_OUTOFMEMORY;
}
wb->IXACT3WaveBank_iface.lpVtbl = &XACT3WaveBank_Vtbl;
@@ -1061,7 +1065,7 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateInMemoryWaveBank(IXACT3Engine *ifac
TRACE("Created in-memory WaveBank: %p\n", wb);
- return hr;
+ return S_OK;
}
static HRESULT WINAPI IXACT3EngineImpl_CreateStreamingWaveBank(IXACT3Engine *iface,
--
2.25.1

View File

@ -0,0 +1,32 @@
From 94df3565a9109176ee936416804f325b5fde9627 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 8 Jan 2020 12:34:53 +1100
Subject: [PATCH] xaudio2_7: Always return S_OK in IXACT34Cue Destroy
---
dlls/xaudio2_7/xact_dll.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/dlls/xaudio2_7/xact_dll.c b/dlls/xaudio2_7/xact_dll.c
index 9cec216002..2bf6eaf374 100644
--- a/dlls/xaudio2_7/xact_dll.c
+++ b/dlls/xaudio2_7/xact_dll.c
@@ -320,13 +320,12 @@ static HRESULT WINAPI IXACT34CueImpl_GetState(IXACT34Cue *iface, DWORD *pdwState
static HRESULT WINAPI IXACT34CueImpl_Destroy(IXACT34Cue *iface)
{
XACT3CueImpl *This = impl_from_IXACT34Cue(iface);
- HRESULT hr;
TRACE("(%p)\n", iface);
- hr = FACTCue_Destroy(This->fact_cue);
+ FACTCue_Destroy(This->fact_cue);
HeapFree(GetProcessHeap(), 0, This);
- return hr;
+ return S_OK;
}
static HRESULT WINAPI IXACT34CueImpl_SetMatrixCoefficients(IXACT34Cue *iface,
--
2.25.1

View File

@ -0,0 +1,123 @@
From 28886253b9ea693b42b4e89325c4643a1c8baca4 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 8 Jan 2020 20:51:09 +1100
Subject: [PATCH] xaudio2_7: Dont cast interface pointers
---
dlls/xaudio2_7/xact_dll.c | 51 ++++++++++++++++++++++++++-------------
1 file changed, 34 insertions(+), 17 deletions(-)
diff --git a/dlls/xaudio2_7/xact_dll.c b/dlls/xaudio2_7/xact_dll.c
index 2bf6eaf374..6ed67c3a67 100644
--- a/dlls/xaudio2_7/xact_dll.c
+++ b/dlls/xaudio2_7/xact_dll.c
@@ -763,7 +763,7 @@ static HRESULT WINAPI IXACT3WaveBankImpl_Prepare(IXACT3WaveBank *iface,
wave->IXACT3Wave_iface.lpVtbl = &XACT3Wave_Vtbl;
wave->fact_wave = fwave;
- *ppWave = (IXACT3Wave*)wave;
+ *ppWave = &wave->IXACT3Wave_iface;
TRACE("Created Wave: %p\n", wave);
@@ -804,7 +804,9 @@ static HRESULT WINAPI IXACT3WaveBankImpl_Play(IXACT3WaveBank *iface,
wave->IXACT3Wave_iface.lpVtbl = &XACT3Wave_Vtbl;
wave->fact_wave = fwave;
- *ppWave = (IXACT3Wave*)wave;
+ *ppWave = &wave->IXACT3Wave_iface;
+
+ TRACE("Created Wave: %p\n", wave);
}
return hr;
@@ -1025,7 +1027,7 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateSoundBank(IXACT3Engine *iface,
sb->IXACT3SoundBank_iface.lpVtbl = &XACT3SoundBank_Vtbl;
sb->fact_soundbank = fsb;
- *ppSoundBank = (IXACT3SoundBank*)sb;
+ *ppSoundBank = &sb->IXACT3SoundBank_iface;
TRACE("Created SoundBank: %p\n", sb);
@@ -1060,7 +1062,7 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateInMemoryWaveBank(IXACT3Engine *ifac
wb->IXACT3WaveBank_iface.lpVtbl = &XACT3WaveBank_Vtbl;
wb->fact_wavebank = fwb;
- *ppWaveBank = (IXACT3WaveBank*)wb;
+ *ppWaveBank = &wb->IXACT3WaveBank_iface;
TRACE("Created in-memory WaveBank: %p\n", wb);
@@ -1104,7 +1106,7 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateStreamingWaveBank(IXACT3Engine *ifa
wb->IXACT3WaveBank_iface.lpVtbl = &XACT3WaveBank_Vtbl;
wb->fact_wavebank = fwb;
- *ppWaveBank = (IXACT3WaveBank*)wb;
+ *ppWaveBank = &wb->IXACT3WaveBank_iface;
TRACE("Created streaming WaveBank: %p\n", wb);
@@ -1145,7 +1147,11 @@ static HRESULT WINAPI IXACT3EngineImpl_PrepareStreamingWave(IXACT3Engine *iface,
static inline void unwrap_notificationdesc(FACTNotificationDescription *fd,
const XACT_NOTIFICATION_DESCRIPTION *xd)
{
+ memset(fd, 0, sizeof(*fd));
/* We have to unwrap the FACT object first! */
+
+ FIXME("Type %d\n", xd->type);
+
fd->type = xd->type;
fd->flags = xd->flags;
fd->cueIndex = xd->cueIndex;
@@ -1153,24 +1159,35 @@ static inline void unwrap_notificationdesc(FACTNotificationDescription *fd,
fd->pvContext = xd->pvContext;
if (xd->pCue != NULL)
- fd->pCue = ((XACT3CueImpl*) xd->pCue)->fact_cue;
- else
- fd->pCue = NULL;
+ {
+ XACT3CueImpl *cur = impl_from_IXACT3Cue(xd->pCue);
+ if (cur)
+ fd->pCue = cur->fact_cue;
+ }
if (xd->pSoundBank != NULL)
- fd->pSoundBank = ((XACT3SoundBankImpl*) xd->pSoundBank)->fact_soundbank;
- else
- fd->pSoundBank = NULL;
+ {
+ XACT3SoundBankImpl *sound = impl_from_IXACT3SoundBank(xd->pSoundBank);
+ if (sound)
+ fd->pSoundBank = sound->fact_soundbank;
+ }
if (xd->pWaveBank != NULL)
- fd->pWaveBank = ((XACT3WaveBankImpl*) xd->pWaveBank)->fact_wavebank;
- else
- fd->pWaveBank = NULL;
+ {
+ XACT3WaveBankImpl *bank = impl_from_IXACT3WaveBank(xd->pWaveBank);
+ if (bank)
+ fd->pWaveBank = bank->fact_wavebank;
+ }
if (xd->pWave != NULL)
- fd->pWave = ((XACT3WaveImpl*) xd->pWave)->fact_wave;
- else
- fd->pWave = NULL;
+ {
+ XACT3WaveImpl *wave = impl_from_IXACT3Wave(xd->pWave);
+ FIXME("Wave %p\n", wave);
+ if (wave)
+ {
+ fd->pWave = wave->fact_wave;
+ }
+ }
}
static HRESULT WINAPI IXACT3EngineImpl_RegisterNotification(IXACT3Engine *iface,
--
2.25.1

View File

@ -0,0 +1,45 @@
From 5975c1051ef759adc1f8303fde7e3b60b0535ff7 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 9 Jan 2020 08:30:23 +1100
Subject: [PATCH] include: Add XACTNOTIFICATIONTYPE_* values
---
include/xact3.idl | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/include/xact3.idl b/include/xact3.idl
index c49718ff39..e05f476cb9 100644
--- a/include/xact3.idl
+++ b/include/xact3.idl
@@ -266,10 +266,24 @@ typedef struct XACT_RUNTIME_PARAMETERS
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;
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_CUEPREPARED = 1;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_CUEPLAY = 2;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_CUESTOP = 3;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_CUEDESTROYED = 4;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_MARKER = 5;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_SOUNDBANKDESTROYED = 6;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEBANKDESTROYED = 7;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_LOCALVARIABLECHANGED = 8;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_GLOBALVARIABLECHANGED = 9;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_GUICONNECTED = 10;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_GUIDISCONNECTED = 11;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEPREPARED = 12;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEPLAY = 13;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVESTOP = 14;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVELOOPED = 15;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEDESTROYED = 16;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEBANKPREPARED = 17;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEBANKSTREAMING_INVALIDCONTENT = 18;")
[
object,
--
2.25.1

View File

@ -0,0 +1,120 @@
From 259e956699ed667257c575a68c97d9eca2320d3d Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 9 Jan 2020 09:06:01 +1100
Subject: [PATCH] xaudio2_7: unwrap structure based of it's type.
---
dlls/xaudio2_7/xact_dll.c | 68 +++++++++++++++++++++++++++++++++++----
1 file changed, 61 insertions(+), 7 deletions(-)
diff --git a/dlls/xaudio2_7/xact_dll.c b/dlls/xaudio2_7/xact_dll.c
index 6ed67c3a67..92434a7084 100644
--- a/dlls/xaudio2_7/xact_dll.c
+++ b/dlls/xaudio2_7/xact_dll.c
@@ -1144,42 +1144,96 @@ static HRESULT WINAPI IXACT3EngineImpl_PrepareStreamingWave(IXACT3Engine *iface,
return S_OK;
}
+enum { NOTIFY_SoundBank = 0x01,
+ NOTIFY_WaveBank = 0x02,
+ NOTIFY_Cue = 0x04,
+ NOTIFY_Wave = 0x08,
+ NOTIFY_cueIndex = 0x10,
+ NOTIFY_waveIndex = 0x20 };
+
static inline void unwrap_notificationdesc(FACTNotificationDescription *fd,
const XACT_NOTIFICATION_DESCRIPTION *xd)
{
+ DWORD flags = 0;
memset(fd, 0, sizeof(*fd));
/* We have to unwrap the FACT object first! */
- FIXME("Type %d\n", xd->type);
+ TRACE("Type %d\n", xd->type);
+ switch (xd->type)
+ {
+ /* Supports None */
+ case (int)XACTNOTIFICATIONTYPE_GLOBALVARIABLECHANGED:
+ case (int)XACTNOTIFICATIONTYPE_GUICONNECTED:
+ case (int)XACTNOTIFICATIONTYPE_GUIDISCONNECTED:
+ break;
+
+ /* Supports SoundBank, Cue index, Cue instance */
+ case (int)XACTNOTIFICATIONTYPE_CUEPREPARED:
+ case (int)XACTNOTIFICATIONTYPE_CUEPLAY:
+ case (int)XACTNOTIFICATIONTYPE_CUESTOP:
+ case (int)XACTNOTIFICATIONTYPE_CUEDESTROYED:
+ case (int)XACTNOTIFICATIONTYPE_MARKER:
+ case (int)XACTNOTIFICATIONTYPE_LOCALVARIABLECHANGED:
+ flags = NOTIFY_SoundBank | NOTIFY_cueIndex | NOTIFY_Cue;
+ break;
+
+ /* Supports WaveBank */
+ case (int)XACTNOTIFICATIONTYPE_WAVEBANKDESTROYED:
+ case (int)XACTNOTIFICATIONTYPE_WAVEBANKPREPARED:
+ case (int)XACTNOTIFICATIONTYPE_WAVEBANKSTREAMING_INVALIDCONTENT:
+ flags = NOTIFY_WaveBank;
+ break;
+
+ /* Supports NOTIFY_SoundBank */
+ case (int)XACTNOTIFICATIONTYPE_SOUNDBANKDESTROYED:
+ flags = NOTIFY_SoundBank;
+ break;
+
+ /* Supports WaveBank, Wave index, Wave instance */
+ case (int)XACTNOTIFICATIONTYPE_WAVEPREPARED:
+ case (int)XACTNOTIFICATIONTYPE_WAVEDESTROYED:
+ flags = NOTIFY_WaveBank | NOTIFY_waveIndex | NOTIFY_Wave;
+ break;
+
+ /* Supports SoundBank, SoundBank, Cue index, Cue instance, WaveBank, Wave instance */
+ case (int)XACTNOTIFICATIONTYPE_WAVEPLAY:
+ case (int)XACTNOTIFICATIONTYPE_WAVESTOP:
+ case (int)XACTNOTIFICATIONTYPE_WAVELOOPED:
+ flags = NOTIFY_SoundBank | NOTIFY_cueIndex | NOTIFY_Cue | NOTIFY_WaveBank | NOTIFY_Wave;
+ break;
+ };
fd->type = xd->type;
fd->flags = xd->flags;
- fd->cueIndex = xd->cueIndex;
- fd->waveIndex = xd->waveIndex;
fd->pvContext = xd->pvContext;
- if (xd->pCue != NULL)
+ if (flags & NOTIFY_cueIndex)
+ fd->cueIndex = xd->cueIndex;
+ if (flags & NOTIFY_waveIndex)
+ fd->waveIndex = xd->waveIndex;
+
+ if (flags & NOTIFY_Cue && xd->pCue != NULL)
{
XACT3CueImpl *cur = impl_from_IXACT3Cue(xd->pCue);
if (cur)
fd->pCue = cur->fact_cue;
}
- if (xd->pSoundBank != NULL)
+ if (flags & NOTIFY_SoundBank && xd->pSoundBank != NULL)
{
XACT3SoundBankImpl *sound = impl_from_IXACT3SoundBank(xd->pSoundBank);
if (sound)
fd->pSoundBank = sound->fact_soundbank;
}
- if (xd->pWaveBank != NULL)
+ if (flags & NOTIFY_WaveBank && xd->pWaveBank != NULL)
{
XACT3WaveBankImpl *bank = impl_from_IXACT3WaveBank(xd->pWaveBank);
if (bank)
fd->pWaveBank = bank->fact_wavebank;
}
- if (xd->pWave != NULL)
+ if (flags & NOTIFY_Wave && xd->pWave != NULL)
{
XACT3WaveImpl *wave = impl_from_IXACT3Wave(xd->pWave);
FIXME("Wave %p\n", wave);
--
2.25.1

View File

@ -0,0 +1,78 @@
From 885782f9e28d085b0d1b14e80ae4f9d440537f2b Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 14 Jan 2020 08:30:00 +1100
Subject: [PATCH] xaudio2_7: Correct callback to windows function.
The unix library cannot directly call the windows callback
due to calling conventions.
---
dlls/xaudio2_7/xact_dll.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/dlls/xaudio2_7/xact_dll.c b/dlls/xaudio2_7/xact_dll.c
index 92434a7084..dfe74cebc2 100644
--- a/dlls/xaudio2_7/xact_dll.c
+++ b/dlls/xaudio2_7/xact_dll.c
@@ -108,6 +108,7 @@ typedef struct _XACT3EngineImpl {
XACT_READFILE_CALLBACK pReadFile;
XACT_GETOVERLAPPEDRESULT_CALLBACK pGetOverlappedResult;
+ XACT_NOTIFICATION_CALLBACK notification_callback;
} XACT3EngineImpl;
typedef struct wrap_readfile_struct {
@@ -930,6 +931,25 @@ static HRESULT WINAPI IXACT3EngineImpl_GetFinalMixFormat(IXACT3Engine *iface,
(FAudioWaveFormatExtensible*) pFinalMixFormat);
}
+static void FACTCALL fact_notification_cb(const FACTNotification *pNotification)
+{
+ XACT3EngineImpl *engine = (XACT3EngineImpl *)pNotification->pvContext;
+
+ /* Older versions of FAudio don't pass through the context */
+ if (!engine)
+ {
+ WARN("Notification context is NULL\n");
+ return;
+ }
+
+ if (pNotification->type == XACTNOTIFICATIONTYPE_SOUNDBANKDESTROYED)
+ {
+ FIXME("Callback XACTNOTIFICATIONTYPE_SOUNDBANKDESTROYED\n");
+ }
+ else
+ FIXME("Unsupported callback type %d\n", pNotification->type);
+}
+
static HRESULT WINAPI IXACT3EngineImpl_Initialize(IXACT3Engine *iface,
const XACT_RUNTIME_PARAMETERS *pParams)
{
@@ -973,6 +993,9 @@ static HRESULT WINAPI IXACT3EngineImpl_Initialize(IXACT3Engine *iface,
GetOverlappedResult;
params.fileIOCallbacks.readFileCallback = wrap_readfile;
params.fileIOCallbacks.getOverlappedResultCallback = wrap_getoverlappedresult;
+ params.fnNotificationCallback = fact_notification_cb;
+
+ This->notification_callback = (XACT_NOTIFICATION_CALLBACK)pParams->fnNotificationCallback;
ret = FACTAudioEngine_Initialize(This->fact_engine, &params);
if (ret != 0)
@@ -1253,6 +1276,7 @@ static HRESULT WINAPI IXACT3EngineImpl_RegisterNotification(IXACT3Engine *iface,
TRACE("(%p)->(%p)\n", This, pNotificationDesc);
unwrap_notificationdesc(&fdesc, pNotificationDesc);
+ fdesc.pvContext = This;
return FACTAudioEngine_RegisterNotification(This->fact_engine, &fdesc);
}
@@ -1265,6 +1289,7 @@ static HRESULT WINAPI IXACT3EngineImpl_UnRegisterNotification(IXACT3Engine *ifac
TRACE("(%p)->(%p)\n", This, pNotificationDesc);
unwrap_notificationdesc(&fdesc, pNotificationDesc);
+ fdesc.pvContext = This;
return FACTAudioEngine_UnRegisterNotification(This->fact_engine, &fdesc);
}
--
2.25.1

View File

@ -0,0 +1,133 @@
From 88e7f19d0ae49fca34d50fbe9c73e8fd0425e964 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 14 Jan 2020 13:42:48 +1100
Subject: [PATCH] xaudio2_7: Initial IXACT3Engine tests
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/xaudio2_7/tests/Makefile.in | 1 +
dlls/xaudio2_7/tests/xact.c | 88 ++++++++++++++++++++++++++++++++
dlls/xaudio2_7/tests/xaudio2.c | 2 +-
3 files changed, 90 insertions(+), 1 deletion(-)
create mode 100644 dlls/xaudio2_7/tests/xact.c
diff --git a/dlls/xaudio2_7/tests/Makefile.in b/dlls/xaudio2_7/tests/Makefile.in
index ba56d94a1f..ecd728d659 100644
--- a/dlls/xaudio2_7/tests/Makefile.in
+++ b/dlls/xaudio2_7/tests/Makefile.in
@@ -2,4 +2,5 @@ TESTDLL = xaudio2_7.dll
IMPORTS = ole32
C_SRCS = \
+ xact.c \
xaudio2.c
diff --git a/dlls/xaudio2_7/tests/xact.c b/dlls/xaudio2_7/tests/xact.c
new file mode 100644
index 0000000000..afe8e4d83a
--- /dev/null
+++ b/dlls/xaudio2_7/tests/xact.c
@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2020 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+#include <windows.h>
+#include <math.h>
+
+#define COBJMACROS
+#include "wine/test.h"
+
+#include "xact3.h"
+
+#include "initguid.h"
+DEFINE_GUID(IID_IXACT3Engine301, 0xe72c1b9a, 0xd717, 0x41c0, 0x81, 0xa6, 0x50, 0xeb, 0x56, 0xe8, 0x06, 0x49);
+
+struct xact_interfaces
+{
+ REFGUID clsid;
+ REFIID iid;
+ HRESULT expected;
+ BOOL todo;
+} xact_interfaces[] =
+{
+ {&CLSID_XACTEngine30, &IID_IXACT3Engine301, E_NOINTERFACE, TRUE },
+ {&CLSID_XACTEngine30, &IID_IXACT3Engine, E_NOINTERFACE, TRUE },
+
+ /* Version 3.1 to 3.4 use the same inteface */
+ {&CLSID_XACTEngine31, &IID_IXACT3Engine301, S_OK },
+ {&CLSID_XACTEngine32, &IID_IXACT3Engine301, S_OK },
+ {&CLSID_XACTEngine33, &IID_IXACT3Engine301, S_OK },
+ {&CLSID_XACTEngine34, &IID_IXACT3Engine301, S_OK },
+
+ /* Version 3.5 to 3.7 use the same inteface */
+ {&CLSID_XACTEngine35, &IID_IXACT3Engine301, E_NOINTERFACE },
+ {&CLSID_XACTEngine35, &IID_IXACT3Engine, S_OK },
+
+ {&CLSID_XACTEngine36, &IID_IXACT3Engine301, E_NOINTERFACE },
+ {&CLSID_XACTEngine36, &IID_IXACT3Engine, S_OK },
+
+ {&CLSID_XACTEngine37, &IID_IXACT3Engine301, E_NOINTERFACE },
+ {&CLSID_XACTEngine37, &IID_IXACT3Engine, S_OK },
+ {&CLSID_XACTEngine37, &IID_IUnknown, S_OK },
+};
+
+static void test_interfaces(void)
+{
+ IUnknown *unk;
+ HRESULT hr;
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(xact_interfaces); i++)
+ {
+ hr = CoCreateInstance(xact_interfaces[i].clsid, NULL, CLSCTX_INPROC_SERVER,
+ xact_interfaces[i].iid, (void**)&unk);
+ if (hr == REGDB_E_CLASSNOTREG || (hr != xact_interfaces[i].expected &&
+ xact_interfaces[i].todo))
+ {
+ trace("%d not registered. Skipping\n", wine_dbgstr_guid(xact_interfaces[i].clsid) );
+ continue;
+ }
+ ok(hr == xact_interfaces[i].expected, "%d, Unexpected value 0x%08x\n", i, hr);
+ if (hr == S_OK)
+ IUnknown_Release(unk);
+ }
+}
+
+START_TEST(xact)
+{
+ CoInitialize(NULL);
+
+ test_interfaces();
+
+ CoUninitialize();
+}
diff --git a/dlls/xaudio2_7/tests/xaudio2.c b/dlls/xaudio2_7/tests/xaudio2.c
index f2bffdf29f..05b1dc3aba 100644
--- a/dlls/xaudio2_7/tests/xaudio2.c
+++ b/dlls/xaudio2_7/tests/xaudio2.c
@@ -22,7 +22,7 @@
#define COBJMACROS
#include "wine/test.h"
#include "initguid.h"
-#include "xaudio2.h"
+#include "xact3.h"
#include "xaudio2fx.h"
#include "xapo.h"
#include "xapofx.h"
--
2.25.1

View File

@ -0,0 +1,26 @@
From 0b54c7d231cc8ba9cde2bd5cda542ec61ba86fdf Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 14 Jan 2020 15:47:43 +1100
Subject: [PATCH] xaudio2_7: Trace FAudio version being used
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/xaudio2_7/xact_dll.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/dlls/xaudio2_7/xact_dll.c b/dlls/xaudio2_7/xact_dll.c
index dfe74cebc2..4c576d87ba 100644
--- a/dlls/xaudio2_7/xact_dll.c
+++ b/dlls/xaudio2_7/xact_dll.c
@@ -52,6 +52,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD reason, void *pReserved)
case DLL_PROCESS_ATTACH:
instance = hinstDLL;
DisableThreadLibraryCalls( hinstDLL );
+
+ TRACE("Using FAudio version %d\n", FAudioLinkedVersion() );
break;
}
return TRUE;
--
2.25.1

View File

@ -0,0 +1,26 @@
From 9b14a6c11c5d720682965f0dc92c3f3a5d92a345 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 14 Jan 2020 15:47:15 +1100
Subject: [PATCH] xaudio2_7: Trace FAudio version being used
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/xaudio2_7/xaudio_dll.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index a87e0124d3..ae18a72e2b 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -90,6 +90,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD reason, void *pReserved)
case DLL_PROCESS_ATTACH:
instance = hinstDLL;
DisableThreadLibraryCalls( hinstDLL );
+
+ TRACE("Using FAudio version %d\n", FAudioLinkedVersion() );
break;
}
return TRUE;
--
2.25.1

View File

@ -0,0 +1,66 @@
From 554e9f407e5e722c88b703be987c3ac30dc6a41c Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Thu, 16 Jan 2020 13:46:14 +1100
Subject: [PATCH] include: Add XACTENGINE_* error codes
---
include/xact3.idl | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/include/xact3.idl b/include/xact3.idl
index e05f476cb9..87fd2e86f5 100644
--- a/include/xact3.idl
+++ b/include/xact3.idl
@@ -545,3 +545,49 @@ interface IXACT3Wave
HRESULT GetProperties(XACT_WAVE_INSTANCE_PROPERTIES *pProperties);
}
+
+cpp_quote("#define FACILITY_XACTENGINE 0xAC7")
+cpp_quote("#define XACTENGINEERROR(n) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_XACTENGINE, n)")
+
+cpp_quote("#define XACTENGINE_E_OUTOFMEMORY E_OUTOFMEMORY")
+cpp_quote("#define XACTENGINE_E_INVALIDARG E_INVALIDARG")
+cpp_quote("#define XACTENGINE_E_NOTIMPL E_NOTIMPL")
+cpp_quote("#define XACTENGINE_E_FAIL E_FAIL")
+
+cpp_quote("#define XACTENGINE_E_ALREADYINITIALIZED XACTENGINEERROR(0x001)")
+cpp_quote("#define XACTENGINE_E_NOTINITIALIZED XACTENGINEERROR(0x002)")
+cpp_quote("#define XACTENGINE_E_EXPIRED XACTENGINEERROR(0x003)")
+cpp_quote("#define XACTENGINE_E_NONOTIFICATIONCALLBACK XACTENGINEERROR(0x004)")
+cpp_quote("#define XACTENGINE_E_NOTIFICATIONREGISTERED XACTENGINEERROR(0x005)")
+cpp_quote("#define XACTENGINE_E_INVALIDUSAGE XACTENGINEERROR(0x006)")
+cpp_quote("#define XACTENGINE_E_INVALIDDATA XACTENGINEERROR(0x007)")
+cpp_quote("#define XACTENGINE_E_INSTANCELIMITFAILTOPLAY XACTENGINEERROR(0x008)")
+cpp_quote("#define XACTENGINE_E_NOGLOBALSETTINGS XACTENGINEERROR(0x009)")
+cpp_quote("#define XACTENGINE_E_INVALIDVARIABLEINDEX XACTENGINEERROR(0x00a)")
+cpp_quote("#define XACTENGINE_E_INVALIDCATEGORY XACTENGINEERROR(0x00b)")
+cpp_quote("#define XACTENGINE_E_INVALIDCUEINDEX XACTENGINEERROR(0x00c)")
+cpp_quote("#define XACTENGINE_E_INVALIDWAVEINDEX XACTENGINEERROR(0x00d)")
+cpp_quote("#define XACTENGINE_E_INVALIDTRACKINDEX XACTENGINEERROR(0x00e)")
+cpp_quote("#define XACTENGINE_E_INVALIDSOUNDOFFSETORINDEX XACTENGINEERROR(0x00f)")
+cpp_quote("#define XACTENGINE_E_READFILE XACTENGINEERROR(0x010)")
+cpp_quote("#define XACTENGINE_E_UNKNOWNEVENT XACTENGINEERROR(0x011)")
+cpp_quote("#define XACTENGINE_E_INCALLBACK XACTENGINEERROR(0x012)")
+cpp_quote("#define XACTENGINE_E_NOWAVEBANK XACTENGINEERROR(0x013)")
+cpp_quote("#define XACTENGINE_E_SELECTVARIATION XACTENGINEERROR(0x014)")
+cpp_quote("#define XACTENGINE_E_MULTIPLEAUDITIONENGINES XACTENGINEERROR(0x015)")
+cpp_quote("#define XACTENGINE_E_WAVEBANKNOTPREPARED XACTENGINEERROR(0x016)")
+cpp_quote("#define XACTENGINE_E_NORENDERER XACTENGINEERROR(0x017)")
+cpp_quote("#define XACTENGINE_E_INVALIDENTRYCOUNT XACTENGINEERROR(0x018)")
+cpp_quote("#define XACTENGINE_E_SEEKTIMEBEYONDCUEEND XACTENGINEERROR(0x019)")
+cpp_quote("#define XACTENGINE_E_SEEKTIMEBEYONDWAVEEND XACTENGINEERROR(0x01a)")
+cpp_quote("#define XACTENGINE_E_NOFRIENDLYNAMES XACTENGINEERROR(0x01b)")
+
+cpp_quote("#define XACTENGINE_E_AUDITION_WRITEFILE XACTENGINEERROR(0x101)")
+cpp_quote("#define XACTENGINE_E_AUDITION_NOSOUNDBANK XACTENGINEERROR(0x102)")
+cpp_quote("#define XACTENGINE_E_AUDITION_INVALIDRPCINDEX XACTENGINEERROR(0x103)")
+cpp_quote("#define XACTENGINE_E_AUDITION_MISSINGDATA XACTENGINEERROR(0x104)")
+cpp_quote("#define XACTENGINE_E_AUDITION_UNKNOWNCOMMAND XACTENGINEERROR(0x105)")
+cpp_quote("#define XACTENGINE_E_AUDITION_INVALIDDSPINDEX XACTENGINEERROR(0x106)")
+cpp_quote("#define XACTENGINE_E_AUDITION_MISSINGWAVE XACTENGINEERROR(0x107)")
+cpp_quote("#define XACTENGINE_E_AUDITION_CREATEDIRECTORYFAILED XACTENGINEERROR(0x108)")
+cpp_quote("#define XACTENGINE_E_AUDITION_INVALIDSESSION XACTENGINEERROR(0x109)")
--
2.25.1

View File

@ -0,0 +1,67 @@
From ccb258005d6e7c6be189ef19c7919caea0502336 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 18 Jan 2020 18:45:24 +1100
Subject: [PATCH] include: Add XACT defines
---
include/xact3.idl | 37 +++++++++++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/include/xact3.idl b/include/xact3.idl
index 87fd2e86f5..c193ecf831 100644
--- a/include/xact3.idl
+++ b/include/xact3.idl
@@ -21,6 +21,9 @@ import "xaudio2.idl";
import "xact3wb.h";
+cpp_quote("#include <limits.h>")
+cpp_quote("#include <float.h>")
+
[
uuid(bcc782bc-6492-4c22-8c35-f5d72fe73c6e)
]
@@ -285,6 +288,40 @@ cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEDESTROYED
cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEBANKPREPARED = 17;")
cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_WAVEBANKSTREAMING_INVALIDCONTENT = 18;")
+cpp_quote("static const XACTTIME XACTTIME_MIN = INT_MIN;")
+cpp_quote("static const XACTTIME XACTTIME_MAX = INT_MAX;")
+cpp_quote("static const XACTTIME XACTTIME_INFINITE = INT_MAX;")
+cpp_quote("static const XACTINSTANCELIMIT XACTINSTANCELIMIT_INFINITE = 0xff;")
+cpp_quote("static const XACTINSTANCELIMIT XACTINSTANCELIMIT_MIN = 0x00;")
+cpp_quote("static const XACTINSTANCELIMIT XACTINSTANCELIMIT_MAX = 0xfe;")
+cpp_quote("static const XACTINDEX XACTINDEX_MIN = 0x00;")
+cpp_quote("static const XACTINDEX XACTINDEX_MAX = 0xfffe;")
+cpp_quote("static const XACTINDEX XACTINDEX_INVALID = 0xffff;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_MIN = 0x00;")
+cpp_quote("static const XACTNOTIFICATIONTYPE XACTNOTIFICATIONTYPE_MAX = 0xff;")
+cpp_quote("static const XACTVARIABLEVALUE XACTVARIABLEVALUE_MIN = -FLT_MAX;")
+cpp_quote("static const XACTVARIABLEVALUE XACTVARIABLEVALUE_MAX = FLT_MAX;")
+cpp_quote("static const XACTVARIABLEINDEX XACTVARIABLEINDEX_MIN = 0x0000;")
+cpp_quote("static const XACTVARIABLEINDEX XACTVARIABLEINDEX_MAX = 0xfffe;")
+cpp_quote("static const XACTVARIABLEINDEX XACTVARIABLEINDEX_INVALID = 0xffff;")
+cpp_quote("static const XACTCATEGORY XACTCATEGORY_MIN = 0x0;")
+cpp_quote("static const XACTCATEGORY XACTCATEGORY_MAX = 0xfffe;")
+cpp_quote("static const XACTCATEGORY XACTCATEGORY_INVALID = 0xffff;")
+cpp_quote("static const XACTCHANNEL XACTCHANNEL_MIN = 0;")
+cpp_quote("static const XACTCHANNEL XACTCHANNEL_MAX = 0xff;")
+cpp_quote("static const XACTPITCH XACTPITCH_MIN = -1200;")
+cpp_quote("static const XACTPITCH XACTPITCH_MAX = 1200;")
+cpp_quote("static const XACTPITCH XACTPITCH_MIN_TOTAL = -2400;")
+cpp_quote("static const XACTPITCH XACTPITCH_MAX_TOTAL = 2400;")
+cpp_quote("static const XACTVOLUME XACTVOLUME_MIN = 0.0f;")
+cpp_quote("static const XACTVOLUME XACTVOLUME_MAX = 16777216.0f;")
+cpp_quote("static const XACTVARIABLEVALUE XACTPARAMETERVALUE_MIN = -FLT_MAX;")
+cpp_quote("static const XACTVARIABLEVALUE XACTPARAMETERVALUE_MAX = FLT_MAX;")
+cpp_quote("static const XACTLOOPCOUNT XACTLOOPCOUNT_MIN = 0x00;")
+cpp_quote("static const XACTLOOPCOUNT XACTLOOPCOUNT_MAX = 0xfe;")
+cpp_quote("static const XACTLOOPCOUNT XACTLOOPCOUNT_INFINITE = 0xff;")
+cpp_quote("static const DWORD XACTWAVEALIGNMENT_MIN = 2048;")
+
[
object,
local,
--
2.25.1

View File

@ -0,0 +1,217 @@
From 26d4f62fcf18beb2ffc6b5bdd55b058b375f5c54 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Sat, 18 Jan 2020 18:50:34 +1100
Subject: [PATCH] xaudio2_7/tests: Add more tests
---
dlls/xaudio2_7/tests/Makefile.in | 5 +-
dlls/xaudio2_7/tests/globals.xgs | Bin 0 -> 440 bytes
dlls/xaudio2_7/tests/rsrc.rc | 22 +++++++
dlls/xaudio2_7/tests/xact.c | 99 ++++++++++++++++++++++++++-----
4 files changed, 111 insertions(+), 15 deletions(-)
create mode 100644 dlls/xaudio2_7/tests/globals.xgs
create mode 100644 dlls/xaudio2_7/tests/rsrc.rc
diff --git a/dlls/xaudio2_7/tests/Makefile.in b/dlls/xaudio2_7/tests/Makefile.in
index ecd728d659..1bb39cc562 100644
--- a/dlls/xaudio2_7/tests/Makefile.in
+++ b/dlls/xaudio2_7/tests/Makefile.in
@@ -1,6 +1,9 @@
TESTDLL = xaudio2_7.dll
-IMPORTS = ole32
+IMPORTS = ole32 x3daudio1_7
C_SRCS = \
xact.c \
xaudio2.c
+
+RC_SRCS = \
+ rsrc.rc
diff --git a/dlls/xaudio2_7/tests/globals.xgs b/dlls/xaudio2_7/tests/globals.xgs
new file mode 100644
index 0000000000000000000000000000000000000000..37bd75b44d64fdf0862ba41c5548ec140f6607e6
GIT binary patch
literal 440
zcmZ8cF;2rk5FFb;L=nLwsF0vai3CxsL@7cLMuL*V*@R0jXUjgf$Uoo@e1L`@Af=?E
z-~&8>iq5R>EJ(Q1&d!YXR&zIlsDF$@e3d63Q8j;i_ksW|?DKVJ#BIT~;`-!jd%zLb
zH}h-m)%sztc3%9-GGL7bdyU7f4FAOKyuTsZZmjbPbb2hxQ)iTCyY)*e4$QC_W68qX
zjKPuo#&H4buxwgv+0X-(+zEw{rlL>=qav3vd<6d%0Uox0J@?-kFW5q6*F0E!wD`oh
zgJ;Xni)F8%q0WuaG3DqQBjUxCToNuxk;uvNaVAL{VPvAadZq|rlBSBX3u)r}C>Ba&
Sh*F}-cp4>zo*<NNBYptThnF`1
literal 0
HcmV?d00001
diff --git a/dlls/xaudio2_7/tests/rsrc.rc b/dlls/xaudio2_7/tests/rsrc.rc
new file mode 100644
index 0000000000..2c1961c727
--- /dev/null
+++ b/dlls/xaudio2_7/tests/rsrc.rc
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2020 Alistair Leslie-Hughes
+ *
+ * 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
+ */
+
+#include "windef.h"
+
+/* @makedep: globals.xgs*/
+globals.xgs RCDATA "globals.xgs"
diff --git a/dlls/xaudio2_7/tests/xact.c b/dlls/xaudio2_7/tests/xact.c
index afe8e4d83a..881513668b 100644
--- a/dlls/xaudio2_7/tests/xact.c
+++ b/dlls/xaudio2_7/tests/xact.c
@@ -18,14 +18,25 @@
#include <windows.h>
#include <math.h>
+#include <limits.h>
+#include <float.h>
#define COBJMACROS
#include "wine/test.h"
#include "xact3.h"
+#include "x3daudio.h"
#include "initguid.h"
-DEFINE_GUID(IID_IXACT3Engine301, 0xe72c1b9a, 0xd717, 0x41c0, 0x81, 0xa6, 0x50, 0xeb, 0x56, 0xe8, 0x06, 0x49);
+DEFINE_GUID(IID_IXACT3Engine31, 0xe72c1b9a, 0xd717, 0x41c0, 0x81, 0xa6, 0x50, 0xeb, 0x56, 0xe8, 0x06, 0x49);
+
+DEFINE_GUID(CLSID_XACTEngine30, 0x3b80ee2a, 0xb0f5, 0x4780, 0x9e,0x30, 0x90,0xcb,0x39,0x68,0x5b,0x03);
+DEFINE_GUID(CLSID_XACTEngine31, 0x962f5027, 0x99be, 0x4692, 0xa4,0x68, 0x85,0x80,0x2c,0xf8,0xde,0x61);
+DEFINE_GUID(CLSID_XACTEngine32, 0xd3332f02, 0x3dd0, 0x4de9, 0x9a,0xec, 0x20,0xd8,0x5c,0x41,0x11,0xb6);
+DEFINE_GUID(CLSID_XACTEngine33, 0x94c1affa, 0x66e7, 0x4961, 0x95,0x21, 0xcf,0xde,0xf3,0x12,0x8d,0x4f);
+DEFINE_GUID(CLSID_XACTEngine34, 0x0977d092, 0x2d95, 0x4e43, 0x8d,0x42, 0x9d,0xdc,0xc2,0x54,0x5e,0xd5);
+DEFINE_GUID(CLSID_XACTEngine35, 0x074b110f, 0x7f58, 0x4743, 0xae,0xa5, 0x12,0xf1,0x5b,0x50,0x74,0xed);
+DEFINE_GUID(CLSID_XACTEngine36, 0x248d8a3b, 0x6256, 0x44d3, 0xa0,0x18, 0x2a,0xc9,0x6c,0x45,0x9f,0x47);
struct xact_interfaces
{
@@ -35,25 +46,25 @@ struct xact_interfaces
BOOL todo;
} xact_interfaces[] =
{
- {&CLSID_XACTEngine30, &IID_IXACT3Engine301, E_NOINTERFACE, TRUE },
- {&CLSID_XACTEngine30, &IID_IXACT3Engine, E_NOINTERFACE, TRUE },
+ {&CLSID_XACTEngine30, &IID_IXACT3Engine31, E_NOINTERFACE, TRUE },
+ {&CLSID_XACTEngine30, &IID_IXACT3Engine, E_NOINTERFACE, TRUE },
/* Version 3.1 to 3.4 use the same inteface */
- {&CLSID_XACTEngine31, &IID_IXACT3Engine301, S_OK },
- {&CLSID_XACTEngine32, &IID_IXACT3Engine301, S_OK },
- {&CLSID_XACTEngine33, &IID_IXACT3Engine301, S_OK },
- {&CLSID_XACTEngine34, &IID_IXACT3Engine301, S_OK },
+ {&CLSID_XACTEngine31, &IID_IXACT3Engine31, S_OK },
+ {&CLSID_XACTEngine32, &IID_IXACT3Engine31, S_OK },
+ {&CLSID_XACTEngine33, &IID_IXACT3Engine31, S_OK },
+ {&CLSID_XACTEngine34, &IID_IXACT3Engine31, S_OK },
/* Version 3.5 to 3.7 use the same inteface */
- {&CLSID_XACTEngine35, &IID_IXACT3Engine301, E_NOINTERFACE },
- {&CLSID_XACTEngine35, &IID_IXACT3Engine, S_OK },
+ {&CLSID_XACTEngine35, &IID_IXACT3Engine31, E_NOINTERFACE },
+ {&CLSID_XACTEngine35, &IID_IXACT3Engine, S_OK },
- {&CLSID_XACTEngine36, &IID_IXACT3Engine301, E_NOINTERFACE },
- {&CLSID_XACTEngine36, &IID_IXACT3Engine, S_OK },
+ {&CLSID_XACTEngine36, &IID_IXACT3Engine31, E_NOINTERFACE },
+ {&CLSID_XACTEngine36, &IID_IXACT3Engine, S_OK },
- {&CLSID_XACTEngine37, &IID_IXACT3Engine301, E_NOINTERFACE },
- {&CLSID_XACTEngine37, &IID_IXACT3Engine, S_OK },
- {&CLSID_XACTEngine37, &IID_IUnknown, S_OK },
+ {&CLSID_XACTEngine, &IID_IXACT3Engine31, E_NOINTERFACE },
+ {&CLSID_XACTEngine, &IID_IXACT3Engine, S_OK },
+ {&CLSID_XACTEngine, &IID_IUnknown, S_OK },
};
static void test_interfaces(void)
@@ -78,11 +89,71 @@ static void test_interfaces(void)
}
}
+static void test_global_properties(void)
+{
+ HRESULT hr;
+ IXACT3Engine *engine;
+ XACTVARIABLEINDEX index;
+ XACTVARIABLEVALUE value;
+ HRSRC res;
+ void *ptr;
+ XACT_RUNTIME_PARAMETERS xparams = {0};
+ WAVEFORMATEXTENSIBLE format;
+ X3DAUDIO_HANDLE instance = {0};
+
+ hr = CoCreateInstance(&CLSID_XACTEngine, NULL, CLSCTX_INPROC_SERVER, &IID_IXACT3Engine, (void**)&engine);
+
+ if (FAILED(hr))
+ {
+ win_skip("IXACT3Engine Unsupported.\n");
+ return;
+ }
+
+ index = IXACT3Engine_GetGlobalVariableIndex(engine, "SpeedOfSound");
+ ok(index == XACTVARIABLEINDEX_INVALID , "Found variable 0x%08x\n", index);
+
+ res = FindResourceW(NULL, L"globals.xgs", (LPCWSTR)RT_RCDATA);
+
+ ptr = LockResource(LoadResource(GetModuleHandleA(NULL), res));
+
+ xparams.lookAheadTime = 250;
+ xparams.globalSettingsBufferSize = SizeofResource( GetModuleHandleA(NULL), res);
+ xparams.pGlobalSettingsBuffer = ptr;
+ hr = IXACT3Engine_Initialize(engine, &xparams);
+ ok(hr == S_OK ||
+ hr == XAUDIO2_E_INVALID_CALL /* Vista */, "got 0x%08x\n", hr);
+ if (FAILED(hr))
+ goto end;
+
+ index = IXACT3Engine_GetGlobalVariableIndex(engine, "SpeedOfSound");
+ ok(index != XACTVARIABLEINDEX_INVALID, "Failed to find variable %d\n", index);
+
+ value = 0.1f;
+ hr = IXACT3Engine_GetGlobalVariable(engine, index, &value);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(value == 0.0f, "got %f\n", value);
+
+ hr = IXACT3Engine_GetFinalMixFormat(engine, &format);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+
+ /* Invalid SpeedOfSound value */
+ X3DAudioInitialize(format.dwChannelMask, value, instance);
+ ok(instance[0] != 0, "got 0x%08x\n", instance[0]);
+
+ hr = IXACT3Engine_GetGlobalVariable(engine, index, &value);
+ ok(hr == S_OK, "got 0x%08x\n", hr);
+ ok(value == 0.0f, "got %f\n", value);
+
+end:
+ IXACT3Engine_Release(engine);
+}
+
START_TEST(xact)
{
CoInitialize(NULL);
test_interfaces();
+ test_global_properties();
CoUninitialize();
}
--
2.25.1

View File

@ -0,0 +1,6 @@
Fixes: [31476] Support Bully Scholarship Edition xactengine3_1.dll.
Fixes: [38615] DSA: Drakensang Demo fails on IXACTEngine::Initialize
Fixes: [41030] Pac-Man Museum requires xactengine3_7
Fixes: [41045] Captain Morgane requires xactengine3_4
Fixes: [48684] BlazBlue: Calamity Trigger requires for xactengine 3.3 interface.