[PATCH] x3daudio1_7: Stub X3DAudioCalculate

Andrew Eikum aeikum at codeweavers.com
Tue Sep 8 14:02:13 CDT 2015


---

Should fix bug 39214

 dlls/x3daudio1_7/main.c           | 24 +++++++++-
 dlls/x3daudio1_7/x3daudio1_7.spec |  2 +-
 include/Makefile.in               |  1 +
 include/x3daudio.h                | 97 +++++++++++++++++++++++++++++++++++++++
 4 files changed, 122 insertions(+), 2 deletions(-)
 create mode 100644 include/x3daudio.h

diff --git a/dlls/x3daudio1_7/main.c b/dlls/x3daudio1_7/main.c
index 2488e03..eece4fc 100644
--- a/dlls/x3daudio1_7/main.c
+++ b/dlls/x3daudio1_7/main.c
@@ -20,6 +20,7 @@
 
 #include "windef.h"
 #include "winbase.h"
+#include "x3daudio.h"
 
 #include "wine/debug.h"
 
@@ -39,8 +40,29 @@ BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
     return TRUE;
 }
 
-HRESULT CDECL X3DAudioInitialize(UINT32 chanmask, float speedofsound, void *handle)
+HRESULT CDECL X3DAudioInitialize(UINT32 chanmask, float speedofsound,
+        X3DAUDIO_HANDLE handle)
 {
     FIXME("0x%x, %f, %p: Stub!\n", chanmask, speedofsound, handle);
     return S_OK;
 }
+
+void CDECL X3DAudioCalculate(const X3DAUDIO_HANDLE handle,
+        const X3DAUDIO_LISTENER *listener, const X3DAUDIO_EMITTER *emitter,
+        UINT32 flags, X3DAUDIO_DSP_SETTINGS *out)
+{
+    static int once = 0;
+    if(!once){
+        FIXME("%p %p %p 0x%x %p: Stub!\n", handle, listener, emitter, flags, out);
+        ++once;
+    }
+
+    out->LPFDirectCoefficient = 0;
+    out->LPFReverbCoefficient = 0;
+    out->ReverbLevel = 0;
+    out->DopplerFactor = 1;
+    out->EmitterToListenerAngle = 0;
+    out->EmitterToListenerDistance = 0;
+    out->EmitterVelocityComponent = 0;
+    out->ListenerVelocityComponent = 0;
+}
diff --git a/dlls/x3daudio1_7/x3daudio1_7.spec b/dlls/x3daudio1_7/x3daudio1_7.spec
index 2b93838..7432b84 100644
--- a/dlls/x3daudio1_7/x3daudio1_7.spec
+++ b/dlls/x3daudio1_7/x3daudio1_7.spec
@@ -1,2 +1,2 @@
-@ stub X3DAudioCalculate
+@ cdecl X3DAudioCalculate(ptr ptr ptr long ptr)
 @ cdecl X3DAudioInitialize(long float ptr)
diff --git a/include/Makefile.in b/include/Makefile.in
index 1dc912b..f4d853e 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -663,6 +663,7 @@ SRCDIR_INCLUDES = \
 	wsipx.h \
 	wsnwlink.h \
 	wtsapi32.h \
+	x3daudio.h \
 	xcmc.h \
 	xinput.h \
 	xmldom.h \
diff --git a/include/x3daudio.h b/include/x3daudio.h
new file mode 100644
index 0000000..a503507
--- /dev/null
+++ b/include/x3daudio.h
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2015 Andrew Eikum 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
+ */
+
+#ifndef _X3DAUDIO_H
+#define _X3DAUDIO_H
+
+typedef struct X3DAUDIO_VECTOR {
+    float x, y, z;
+} X3DAUDIO_VECTOR;
+
+typedef struct X3DAUDIO_CONE {
+    float InnerAngle;
+    float OuterAngle;
+    float InnerVolume;
+    float OuterVolume;
+    float InnerLPF;
+    float OuterLPF;
+    float InnerReverb;
+    float OuterReverb;
+} X3DAUDIO_CONE;
+
+typedef struct X3DAUDIO_DISTANCE_CURVE_POINT {
+    float Distance;
+    float DSPSetting;
+} X3DAUDIO_DISTANCE_CURVE_POINT;
+
+typedef struct X3DAUDIO_DISTANCE_CURVE {
+    X3DAUDIO_DISTANCE_CURVE_POINT *pPoints;
+    UINT32 PointCount;
+} X3DAUDIO_DISTANCE_CURVE;
+
+typedef struct X3DAUDIO_LISTENER {
+    X3DAUDIO_VECTOR OrientFront;
+    X3DAUDIO_VECTOR OrientTop;
+    X3DAUDIO_VECTOR Position;
+    X3DAUDIO_VECTOR Velocity;
+    X3DAUDIO_CONE *pCone;
+} X3DAUDIO_LISTENER;
+
+typedef struct X3DAUDIO_EMITTER {
+    X3DAUDIO_CONE *pCone;
+    X3DAUDIO_VECTOR OrientFront;
+    X3DAUDIO_VECTOR OrientTop;
+    X3DAUDIO_VECTOR Position;
+    X3DAUDIO_VECTOR Velocity;
+    float InnerRadius;
+    float InnerRadiusAngle;
+    UINT32 ChannelCount;
+    float ChannelRadius;
+    float *pChannelAzimuths;
+    X3DAUDIO_DISTANCE_CURVE *pVolumeCurve;
+    X3DAUDIO_DISTANCE_CURVE *pLFECurve;
+    X3DAUDIO_DISTANCE_CURVE *pLPFDirectCurve;
+    X3DAUDIO_DISTANCE_CURVE *pLPFReverbCurve;
+    X3DAUDIO_DISTANCE_CURVE *pReverbCurve;
+    float CurveDistanceScalar;
+    float DopplerScalar;
+} X3DAUDIO_EMITTER;
+
+typedef struct X3DAUDIO_DSP_SETTINGS {
+    float *pMatrixCoefficients;
+    float *pDelayTimes;
+    UINT32 SrcChannelCount;
+    UINT32 DstChannelCount;
+    float LPFDirectCoefficient;
+    float LPFReverbCoefficient;
+    float ReverbLevel;
+    float DopplerFactor;
+    float EmitterToListenerAngle;
+    float EmitterToListenerDistance;
+    float EmitterVelocityComponent;
+    float ListenerVelocityComponent;
+} X3DAUDIO_DSP_SETTINGS;
+
+#define X3DAUDIO_HANDLE_BYTESIZE 20
+typedef BYTE X3DAUDIO_HANDLE[X3DAUDIO_HANDLE_BYTESIZE];
+
+HRESULT CDECL X3DAudioInitialize(UINT32, float, X3DAUDIO_HANDLE);
+void CDECL X3DAudioCalculate(const X3DAUDIO_HANDLE, const X3DAUDIO_LISTENER *,
+        const X3DAUDIO_EMITTER *, UINT32, X3DAUDIO_DSP_SETTINGS *);
+
+#endif
-- 
2.5.1




More information about the wine-patches mailing list