diff --git a/dlls/x3daudio1_7/main.c b/dlls/x3daudio1_7/main.c index 2488e036912..eece4fcf103 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 2b93838fa9d..7432b84094d 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 1dc912ba2d8..f4d853e4af3 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 00000000000..a503507a40d --- /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