From 2d04be72f7667b5acaca254dfed58d8549cf73a8 Mon Sep 17 00:00:00 2001 From: Rok Mandeljc Date: Fri, 21 Mar 2003 00:42:38 +0000 Subject: [PATCH] Stub implementation of the dmusic dll. --- configure | 3 +- configure.ac | 1 + dlls/Makefile.in | 14 + dlls/dmusic/.cvsignore | 4 + dlls/dmusic/Makefile.in | 28 ++ dlls/dmusic/dmusic.c | 160 +++++++++ dlls/dmusic/dmusic.spec | 4 + dlls/dmusic/dmusic8.c | 141 ++++++++ dlls/dmusic/dmusic_buffer.c | 162 +++++++++ dlls/dmusic/dmusic_collection.c | 85 +++++ dlls/dmusic/dmusic_dlinstrument.c | 73 ++++ dlls/dmusic/dmusic_download.c | 78 +++++ dlls/dmusic/dmusic_instrument.c | 85 +++++ dlls/dmusic/dmusic_main.c | 171 +++++++++ dlls/dmusic/dmusic_port.c | 183 ++++++++++ dlls/dmusic/dmusic_portdl.c | 113 ++++++ dlls/dmusic/dmusic_private.h | 324 +++++++++++++++++ dlls/dmusic/dmusic_thru.c | 78 +++++ dlls/dmusic/reference_clock.c | 100 ++++++ include/Makefile.in | 5 + include/dls1.h | 191 ++++++++++ include/dmdls.h | 197 +++++++++++ include/dmerror.h | 164 +++++++++ include/dmusbuff.h | 45 +++ include/dmusicc.h | 709 ++++++++++++++++++++++++++++++++++++++ libs/uuid/dxguid.c | 1 + winedefault.reg | 13 + 27 files changed, 3131 insertions(+), 1 deletion(-) create mode 100644 dlls/dmusic/.cvsignore create mode 100644 dlls/dmusic/Makefile.in create mode 100644 dlls/dmusic/dmusic.c create mode 100644 dlls/dmusic/dmusic.spec create mode 100644 dlls/dmusic/dmusic8.c create mode 100644 dlls/dmusic/dmusic_buffer.c create mode 100644 dlls/dmusic/dmusic_collection.c create mode 100644 dlls/dmusic/dmusic_dlinstrument.c create mode 100644 dlls/dmusic/dmusic_download.c create mode 100644 dlls/dmusic/dmusic_instrument.c create mode 100644 dlls/dmusic/dmusic_main.c create mode 100644 dlls/dmusic/dmusic_port.c create mode 100644 dlls/dmusic/dmusic_portdl.c create mode 100644 dlls/dmusic/dmusic_private.h create mode 100644 dlls/dmusic/dmusic_thru.c create mode 100644 dlls/dmusic/reference_clock.c create mode 100644 include/dls1.h create mode 100644 include/dmdls.h create mode 100644 include/dmerror.h create mode 100644 include/dmusbuff.h create mode 100644 include/dmusicc.h diff --git a/configure b/configure index 92250c3ce90..7d9c097b742 100755 --- a/configure +++ b/configure @@ -15683,7 +15683,7 @@ MAKE_TEST_RULES=dlls/Maketest.rules MAKE_PROG_RULES=programs/Makeprog.rules - ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules dlls/Maketest.rules programs/Makeprog.rules Makefile dlls/Makefile dlls/advapi32/Makefile dlls/advapi32/tests/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/cabinet/Makefile dlls/comcat/Makefile dlls/comctl32/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/ctl3d/Makefile dlls/d3d8/Makefile dlls/d3dim/Makefile dlls/d3dx8/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dinput8/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dsound/Makefile dlls/dsound/tests/Makefile dlls/gdi/Makefile dlls/gdi/tests/Makefile dlls/glu32/Makefile dlls/icmp/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile dlls/msdmo/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msvcrt/Makefile dlls/msvcrt/tests/Makefile dlls/msvcrt20/Makefile dlls/msvideo/Makefile dlls/msvideo/msrle32/Makefile dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile dlls/ole32/Makefile dlls/oleaut32/Makefile dlls/oleaut32/tests/Makefile dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/rpcrt4/tests/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shell32/tests/Makefile dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/shlwapi/tests/Makefile dlls/snmpapi/Makefile dlls/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/urlmon/tests/Makefile dlls/user/Makefile dlls/user/tests/Makefile dlls/version/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile dlls/winedos/Makefile dlls/wineps/Makefile dlls/wininet/Makefile dlls/wininet/tests/Makefile dlls/winmm/Makefile dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile dlls/winmm/midimap/Makefile dlls/winmm/tests/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile dlls/winmm/winenas/Makefile dlls/winmm/winejack/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile dlls/winsock/tests/Makefile dlls/winspool/Makefile dlls/winspool/tests/Makefile dlls/wintab32/Makefile dlls/wintrust/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile include/Makefile library/Makefile libs/Makefile libs/port/Makefile libs/uuid/Makefile miscemu/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile programs/notepad/Makefile programs/osversioncheck/Makefile programs/progman/Makefile programs/regapi/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/regtest/Makefile programs/rpcss/Makefile programs/rundll32/Makefile programs/start/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineboot/Makefile programs/wineconsole/Makefile programs/winedbg/Makefile programs/winefile/Makefile programs/winemine/Makefile programs/winepath/Makefile programs/winhelp/Makefile programs/winver/Makefile server/Makefile tools/Makefile tools/widl/Makefile tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile tools/wmc/Makefile tools/wpp/Makefile tools/wrc/Makefile unicode/Makefile" + ac_config_files="$ac_config_files Make.rules dlls/Makedll.rules dlls/Maketest.rules programs/Makeprog.rules Makefile dlls/Makefile dlls/advapi32/Makefile dlls/advapi32/tests/Makefile dlls/avicap32/Makefile dlls/avifil32/Makefile dlls/cabinet/Makefile dlls/comcat/Makefile dlls/comctl32/Makefile dlls/commdlg/Makefile dlls/crtdll/Makefile dlls/crypt32/Makefile dlls/ctl3d/Makefile dlls/d3d8/Makefile dlls/d3dim/Makefile dlls/d3dx8/Makefile dlls/dciman32/Makefile dlls/ddraw/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dinput8/Makefile dlls/dmusic/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dsound/Makefile dlls/dsound/tests/Makefile dlls/gdi/Makefile dlls/gdi/tests/Makefile dlls/glu32/Makefile dlls/icmp/Makefile dlls/imagehlp/Makefile dlls/imm32/Makefile dlls/kernel/Makefile dlls/kernel/tests/Makefile dlls/lzexpand/Makefile dlls/mapi32/Makefile dlls/mpr/Makefile dlls/msacm/Makefile dlls/msacm/imaadp32/Makefile dlls/msacm/msadp32/Makefile dlls/msacm/msg711/Makefile dlls/msacm/winemp3/Makefile dlls/msdmo/Makefile dlls/msimg32/Makefile dlls/msisys/Makefile dlls/msnet32/Makefile dlls/msvcrt/Makefile dlls/msvcrt/tests/Makefile dlls/msvcrt20/Makefile dlls/msvideo/Makefile dlls/msvideo/msrle32/Makefile dlls/netapi32/Makefile dlls/netapi32/tests/Makefile dlls/ntdll/Makefile dlls/ntdll/tests/Makefile dlls/odbc32/Makefile dlls/ole32/Makefile dlls/oleaut32/Makefile dlls/oleaut32/tests/Makefile dlls/olecli/Makefile dlls/oledlg/Makefile dlls/olepro32/Makefile dlls/olesvr/Makefile dlls/opengl32/Makefile dlls/psapi/Makefile dlls/qcap/Makefile dlls/quartz/Makefile dlls/rasapi32/Makefile dlls/richedit/Makefile dlls/rpcrt4/Makefile dlls/rpcrt4/tests/Makefile dlls/serialui/Makefile dlls/setupapi/Makefile dlls/shdocvw/Makefile dlls/shell32/Makefile dlls/shell32/tests/Makefile dlls/shfolder/Makefile dlls/shlwapi/Makefile dlls/shlwapi/tests/Makefile dlls/snmpapi/Makefile dlls/sti/Makefile dlls/tapi32/Makefile dlls/ttydrv/Makefile dlls/twain/Makefile dlls/url/Makefile dlls/urlmon/Makefile dlls/urlmon/tests/Makefile dlls/user/Makefile dlls/user/tests/Makefile dlls/version/Makefile dlls/win32s/Makefile dlls/winaspi/Makefile dlls/winedos/Makefile dlls/wineps/Makefile dlls/wininet/Makefile dlls/wininet/tests/Makefile dlls/winmm/Makefile dlls/winmm/joystick/Makefile dlls/winmm/mcianim/Makefile dlls/winmm/mciavi/Makefile dlls/winmm/mcicda/Makefile dlls/winmm/mciseq/Makefile dlls/winmm/mciwave/Makefile dlls/winmm/midimap/Makefile dlls/winmm/tests/Makefile dlls/winmm/wavemap/Makefile dlls/winmm/winealsa/Makefile dlls/winmm/winearts/Makefile dlls/winmm/wineaudioio/Makefile dlls/winmm/winenas/Makefile dlls/winmm/winejack/Makefile dlls/winmm/wineoss/Makefile dlls/winnls/Makefile dlls/winsock/Makefile dlls/winsock/tests/Makefile dlls/winspool/Makefile dlls/winspool/tests/Makefile dlls/wintab32/Makefile dlls/wintrust/Makefile dlls/wow32/Makefile dlls/wsock32/Makefile dlls/x11drv/Makefile documentation/Makefile include/Makefile library/Makefile libs/Makefile libs/port/Makefile libs/uuid/Makefile miscemu/Makefile programs/Makefile programs/avitools/Makefile programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/expand/Makefile programs/notepad/Makefile programs/osversioncheck/Makefile programs/progman/Makefile programs/regapi/Makefile programs/regedit/Makefile programs/regsvr32/Makefile programs/regtest/Makefile programs/rpcss/Makefile programs/rundll32/Makefile programs/start/Makefile programs/uninstaller/Makefile programs/view/Makefile programs/wcmd/Makefile programs/wineboot/Makefile programs/wineconsole/Makefile programs/winedbg/Makefile programs/winefile/Makefile programs/winemine/Makefile programs/winepath/Makefile programs/winhelp/Makefile programs/winver/Makefile server/Makefile tools/Makefile tools/widl/Makefile tools/winapi/Makefile tools/winebuild/Makefile tools/winedump/Makefile tools/wmc/Makefile tools/wpp/Makefile tools/wrc/Makefile unicode/Makefile" cat >confcache <<\_ACEOF @@ -16238,6 +16238,7 @@ do "dlls/devenum/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/devenum/Makefile" ;; "dlls/dinput/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dinput/Makefile" ;; "dlls/dinput8/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dinput8/Makefile" ;; + "dlls/dmusic/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dmusic/Makefile" ;; "dlls/dplay/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dplay/Makefile" ;; "dlls/dplayx/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dplayx/Makefile" ;; "dlls/dsound/Makefile" ) CONFIG_FILES="$CONFIG_FILES dlls/dsound/Makefile" ;; diff --git a/configure.ac b/configure.ac index 2cce51b8339..e7eb162c893 100644 --- a/configure.ac +++ b/configure.ac @@ -1410,6 +1410,7 @@ dlls/ddraw/Makefile dlls/devenum/Makefile dlls/dinput/Makefile dlls/dinput8/Makefile +dlls/dmusic/Makefile dlls/dplay/Makefile dlls/dplayx/Makefile dlls/dsound/Makefile diff --git a/dlls/Makefile.in b/dlls/Makefile.in index 954322bf76b..aa56fe2a362 100644 --- a/dlls/Makefile.in +++ b/dlls/Makefile.in @@ -30,6 +30,7 @@ BASEDIRS = \ devenum \ dinput \ dinput8 \ + dmusic \ dplay \ dplayx \ dsound \ @@ -197,6 +198,7 @@ all: \ devenum.dll$(DLLEXT) \ dinput.dll$(DLLEXT) \ dinput8.dll$(DLLEXT) \ + dmusic.dll$(DLLEXT) \ dplay.dll$(DLLEXT) \ dplayx.dll$(DLLEXT) \ dsound.dll$(DLLEXT) \ @@ -335,6 +337,9 @@ dinput.dll$(DLLEXT): dinput/dinput.dll$(DLLEXT) dinput8.dll$(DLLEXT): dinput8/dinput8.dll$(DLLEXT) $(RM) $@ && $(LN_S) dinput8/dinput8.dll$(DLLEXT) $@ +dmusic.dll$(DLLEXT): dmusic/dmusic.dll$(DLLEXT) + $(RM) $@ && $(LN_S) dmusic/dmusic.dll$(DLLEXT) $@ + dplay.dll$(DLLEXT): dplay/dplay.dll$(DLLEXT) $(RM) $@ && $(LN_S) dplay/dplay.dll$(DLLEXT) $@ @@ -615,6 +620,7 @@ IMPORT_LIBS = \ libdevenum \ libdinput \ libdinput8 \ + libdmusic \ libdplay \ libdplayx \ libdsound \ @@ -771,6 +777,11 @@ libdinput8.def: dinput8/dinput8.spec.def libdinput8.a: dinput8/dinput8.spec.def $(DLLTOOL) -k -l $@ -d dinput8/dinput8.spec.def +libdmusic.def: dmusic/dmusic.spec.def + $(RM) $@ && $(LN_S) dmusic/dmusic.spec.def $@ +libdmusic.a: dmusic/dmusic.spec.def + $(DLLTOOL) -k -l $@ -d dmusic/dmusic.spec.def + libdplay.def: dplay/dplay.spec.def $(RM) $@ && $(LN_S) dplay/dplay.spec.def $@ libdplay.a: dplay/dplay.spec.def @@ -1114,6 +1125,7 @@ ddraw/ddraw.spec.def: $(WINEBUILD) devenum/devenum.spec.def: $(WINEBUILD) dinput/dinput.spec.def: $(WINEBUILD) dinput8/dinput8.spec.def: $(WINEBUILD) +dmusic/dmusic.spec.def: $(WINEBUILD) dplay/dplay.spec.def: $(WINEBUILD) dplayx/dplayx.spec.def: $(WINEBUILD) dsound/dsound.spec.def: $(WINEBUILD) @@ -1203,6 +1215,7 @@ ddraw/ddraw.dll$(DLLEXT): ddraw devenum/devenum.dll$(DLLEXT): devenum dinput/dinput.dll$(DLLEXT): dinput dinput8/dinput8.dll$(DLLEXT): dinput8 +dmusic/dmusic.dll$(DLLEXT): dmusic dplay/dplay.dll$(DLLEXT): dplay dplayx/dplayx.dll$(DLLEXT): dplayx dsound/dsound.dll$(DLLEXT): dsound @@ -1308,6 +1321,7 @@ ddraw/__install__: ddraw.dll$(DLLEXT) devenum/__install__: devenum.dll$(DLLEXT) dinput/__install__: dinput.dll$(DLLEXT) dinput8/__install__: dinput8.dll$(DLLEXT) +dmusic/__install__: dmusic.dll$(DLLEXT) dplay/__install__: dplay.dll$(DLLEXT) dplayx/__install__: dplayx.dll$(DLLEXT) dsound/__install__: dsound.dll$(DLLEXT) diff --git a/dlls/dmusic/.cvsignore b/dlls/dmusic/.cvsignore new file mode 100644 index 00000000000..cb7ca89c8f6 --- /dev/null +++ b/dlls/dmusic/.cvsignore @@ -0,0 +1,4 @@ +Makefile +dmusic.dll.dbg.c +dmusic.spec.c +dmusic.spec.def diff --git a/dlls/dmusic/Makefile.in b/dlls/dmusic/Makefile.in new file mode 100644 index 00000000000..86abc69fe2e --- /dev/null +++ b/dlls/dmusic/Makefile.in @@ -0,0 +1,28 @@ +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../.. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +MODULE = dmusic.dll +IMPORTS = user32 kernel32 +EXTRALIBS = $(LIBUUID) + +LDDLLFLAGS = @LDDLLFLAGS@ +SYMBOLFILE = $(MODULE).tmp.o + +C_SRCS = \ + dmusic.c \ + dmusic8.c \ + dmusic_buffer.c \ + dmusic_collection.c \ + dmusic_dlinstrument.c \ + dmusic_download.c \ + dmusic_instrument.c \ + dmusic_main.c \ + dmusic_port.c \ + dmusic_portdl.c \ + dmusic_thru.c \ + reference_clock.c + +@MAKE_DLL_RULES@ + +### Dependencies: diff --git a/dlls/dmusic/dmusic.c b/dlls/dmusic/dmusic.c new file mode 100644 index 00000000000..01a119c2fad --- /dev/null +++ b/dlls/dmusic/dmusic.c @@ -0,0 +1,160 @@ +/* IDirectMusic Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* for ClassFactory */ +HRESULT WINAPI DMUSIC_CreateDirectMusic (LPCGUID lpcGUID, LPDIRECTMUSIC *ppDM, LPUNKNOWN pUnkOuter) +{ + IDirectMusicImpl *dmusic; + + TRACE("(%p,%p,%p)\n",lpcGUID, ppDM, pUnkOuter); + + + dmusic = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectMusicImpl)); + if (NULL == dmusic) + { + *ppDM = (LPDIRECTMUSIC)NULL; + return E_OUTOFMEMORY; + } + + dmusic->lpVtbl = &DirectMusic_Vtbl; + dmusic->ref = 1; + + *ppDM = (LPDIRECTMUSIC)dmusic; + return S_OK; + + WARN("No interface found\n"); + return E_NOINTERFACE; +} + +/* IDirectMusic IUnknown parts follow: */ +HRESULT WINAPI IDirectMusicImpl_QueryInterface (LPDIRECTMUSIC iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusicImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusic)) + { + IDirectMusicImpl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IDirectMusicImpl_AddRef (LPDIRECTMUSIC iface) +{ + ICOM_THIS(IDirectMusicImpl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusicImpl_Release (LPDIRECTMUSIC iface) +{ + ICOM_THIS(IDirectMusicImpl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusic Interface follow: */ +HRESULT WINAPI IDirectMusicImpl_EnumPort (LPDIRECTMUSIC iface, DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicImpl_CreateMusicBuffer (LPDIRECTMUSIC iface, LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER** ppBuffer, LPUNKNOWN pUnkOuter) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicImpl_CreatePort (LPDIRECTMUSIC iface, REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT* ppPort, LPUNKNOWN pUnkOuter) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicImpl_EnumMasterClock (LPDIRECTMUSIC iface, DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicImpl_GetMasterClock (LPDIRECTMUSIC iface, LPGUID pguidClock, IReferenceClock** ppReferenceClock) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicImpl_SetMasterClock (LPDIRECTMUSIC iface, REFGUID rguidClock) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicImpl_Activate (LPDIRECTMUSIC iface, BOOL fEnable) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicImpl_GetDefaultPort (LPDIRECTMUSIC iface, LPGUID pguidPort) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicImpl_SetDirectSound (LPDIRECTMUSIC iface, LPDIRECTSOUND pDirectSound, HWND hWnd) +{ + FIXME("stub\n"); + return DS_OK; +} + +ICOM_VTABLE(IDirectMusic) DirectMusic_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusicImpl_QueryInterface, + IDirectMusicImpl_AddRef, + IDirectMusicImpl_Release, + IDirectMusicImpl_EnumPort, + IDirectMusicImpl_CreateMusicBuffer, + IDirectMusicImpl_CreatePort, + IDirectMusicImpl_EnumMasterClock, + IDirectMusicImpl_GetMasterClock, + IDirectMusicImpl_SetMasterClock, + IDirectMusicImpl_Activate, + IDirectMusicImpl_GetDefaultPort, + IDirectMusicImpl_SetDirectSound +}; diff --git a/dlls/dmusic/dmusic.spec b/dlls/dmusic/dmusic.spec new file mode 100644 index 00000000000..139cce8aaac --- /dev/null +++ b/dlls/dmusic/dmusic.spec @@ -0,0 +1,4 @@ +@ stdcall DllCanUnloadNow() DMUSIC_DllCanUnloadNow +@ stdcall DllGetClassObject(ptr ptr ptr) DMUSIC_DllGetClassObject +@ stdcall DllRegisterServer() DMUSIC_DllRegisterServer +@ stdcall DllUnregisterServer() DMUSIC_DllUnregisterServer diff --git a/dlls/dmusic/dmusic8.c b/dlls/dmusic/dmusic8.c new file mode 100644 index 00000000000..443771a4abb --- /dev/null +++ b/dlls/dmusic/dmusic8.c @@ -0,0 +1,141 @@ +/* IDirectMusic8 Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* IDirectMusic8 IUnknown parts follow: */ +HRESULT WINAPI IDirectMusic8Impl_QueryInterface (LPDIRECTMUSIC8 iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusic8Impl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusic8)) + { + IDirectMusic8Impl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IDirectMusic8Impl_AddRef (LPDIRECTMUSIC8 iface) +{ + ICOM_THIS(IDirectMusic8Impl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusic8Impl_Release (LPDIRECTMUSIC8 iface) +{ + ICOM_THIS(IDirectMusic8Impl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusic8 Interface follow: */ +HRESULT WINAPI IDirectMusic8Impl_EnumPort (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusic8Impl_CreateMusicBuffer (LPDIRECTMUSIC8 iface, LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER** ppBuffer, LPUNKNOWN pUnkOuter) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusic8Impl_CreatePort (LPDIRECTMUSIC8 iface, REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT* ppPort, LPUNKNOWN pUnkOuter) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusic8Impl_EnumMasterClock (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusic8Impl_GetMasterClock (LPDIRECTMUSIC8 iface, LPGUID pguidClock, IReferenceClock** ppReferenceClock) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusic8Impl_SetMasterClock (LPDIRECTMUSIC8 iface, REFGUID rguidClock) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusic8Impl_Activate (LPDIRECTMUSIC8 iface, BOOL fEnable) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusic8Impl_GetDefaultPort (LPDIRECTMUSIC8 iface, LPGUID pguidPort) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusic8Impl_SetDirectSound (LPDIRECTMUSIC8 iface, LPDIRECTSOUND pDirectSound, HWND hWnd) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusic8Impl_SetExternalMasterClock (LPDIRECTMUSIC8 iface, IReferenceClock* pClock) +{ + FIXME("stub\n"); + return DS_OK; +} + +ICOM_VTABLE(IDirectMusic8) DirectMusic8_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusic8Impl_QueryInterface, + IDirectMusic8Impl_AddRef, + IDirectMusic8Impl_Release, + IDirectMusic8Impl_EnumPort, + IDirectMusic8Impl_CreateMusicBuffer, + IDirectMusic8Impl_CreatePort, + IDirectMusic8Impl_EnumMasterClock, + IDirectMusic8Impl_GetMasterClock, + IDirectMusic8Impl_SetMasterClock, + IDirectMusic8Impl_Activate, + IDirectMusic8Impl_GetDefaultPort, + IDirectMusic8Impl_SetDirectSound, + IDirectMusic8Impl_SetExternalMasterClock +}; diff --git a/dlls/dmusic/dmusic_buffer.c b/dlls/dmusic/dmusic_buffer.c new file mode 100644 index 00000000000..45f57ed8a35 --- /dev/null +++ b/dlls/dmusic/dmusic_buffer.c @@ -0,0 +1,162 @@ +/* IDirectMusicBuffer Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* IDirectMusicBuffer IUnknown parts follow: */ +HRESULT WINAPI IDirectMusicBufferImpl_QueryInterface (LPDIRECTMUSICBUFFER iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusicBufferImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicBuffer)) + { + IDirectMusicBufferImpl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IDirectMusicBufferImpl_AddRef (LPDIRECTMUSICBUFFER iface) +{ + ICOM_THIS(IDirectMusicBufferImpl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusicBufferImpl_Release (LPDIRECTMUSICBUFFER iface) +{ + ICOM_THIS(IDirectMusicBufferImpl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusicBuffer Interface follow: */ +HRESULT WINAPI IDirectMusicBufferImpl_Flush (LPDIRECTMUSICBUFFER iface) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_TotalTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prtTime) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_PackStructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_PackUnstructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_ResetReadPtr (LPDIRECTMUSICBUFFER iface) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_GetNextEvent (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt, LPDWORD pdwChannelGroup, LPDWORD pdwLength, LPBYTE* ppData) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_GetRawBufferPtr (LPDIRECTMUSICBUFFER iface, LPBYTE* ppData) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_GetStartTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_GetUsedBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_GetMaxBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_GetBufferFormat (LPDIRECTMUSICBUFFER iface, LPGUID pGuidFormat) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_SetStartTime (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicBufferImpl_SetUsedBytes (LPDIRECTMUSICBUFFER iface, DWORD cb) +{ + FIXME("stub\n"); + return DS_OK; +} + +ICOM_VTABLE(IDirectMusicBuffer) DirectMusicBuffer_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusicBufferImpl_QueryInterface, + IDirectMusicBufferImpl_AddRef, + IDirectMusicBufferImpl_Release, + IDirectMusicBufferImpl_Flush, + IDirectMusicBufferImpl_TotalTime, + IDirectMusicBufferImpl_PackStructured, + IDirectMusicBufferImpl_PackUnstructured, + IDirectMusicBufferImpl_ResetReadPtr, + IDirectMusicBufferImpl_GetNextEvent, + IDirectMusicBufferImpl_GetRawBufferPtr, + IDirectMusicBufferImpl_GetStartTime, + IDirectMusicBufferImpl_GetUsedBytes, + IDirectMusicBufferImpl_GetMaxBytes, + IDirectMusicBufferImpl_GetBufferFormat, + IDirectMusicBufferImpl_SetStartTime, + IDirectMusicBufferImpl_SetUsedBytes +}; diff --git a/dlls/dmusic/dmusic_collection.c b/dlls/dmusic/dmusic_collection.c new file mode 100644 index 00000000000..c24453c0a7d --- /dev/null +++ b/dlls/dmusic/dmusic_collection.c @@ -0,0 +1,85 @@ +/* IDirectMusicCollection Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* IDirectMusicCollection IUnknown parts follow: */ +HRESULT WINAPI IDirectMusicCollectionImpl_QueryInterface (LPDIRECTMUSICCOLLECTION iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusicCollectionImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicCollection)) + { + IDirectMusicCollectionImpl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IDirectMusicCollectionImpl_AddRef (LPDIRECTMUSICCOLLECTION iface) +{ + ICOM_THIS(IDirectMusicCollectionImpl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusicCollectionImpl_Release (LPDIRECTMUSICCOLLECTION iface) +{ + ICOM_THIS(IDirectMusicCollectionImpl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusicCollection Interface follow: */ +HRESULT WINAPI IDirectMusicCollectionImpl_GetInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwPatch, IDirectMusicInstrument** ppInstrument) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicCollectionImpl_EnumInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwIndex, DWORD* pdwPatch, LPWSTR pwszName, DWORD dwNameLen) +{ + FIXME("stub\n"); + return DS_OK; +} + +ICOM_VTABLE(IDirectMusicCollection) DirectMusicCollection_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusicCollectionImpl_QueryInterface, + IDirectMusicCollectionImpl_AddRef, + IDirectMusicCollectionImpl_Release, + IDirectMusicCollectionImpl_GetInstrument, + IDirectMusicCollectionImpl_EnumInstrument +}; diff --git a/dlls/dmusic/dmusic_dlinstrument.c b/dlls/dmusic/dmusic_dlinstrument.c new file mode 100644 index 00000000000..60309fd86f3 --- /dev/null +++ b/dlls/dmusic/dmusic_dlinstrument.c @@ -0,0 +1,73 @@ +/* IDirectMusicDownloadedInstrument Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* IDirectMusicDownloadedInstrument IUnknown parts follow: */ +HRESULT WINAPI IDirectMusicDownloadedInstrumentImpl_QueryInterface (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusicDownloadedInstrumentImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicDownloadedInstrument)) + { + IDirectMusicDownloadedInstrumentImpl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_AddRef (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface) +{ + ICOM_THIS(IDirectMusicDownloadedInstrumentImpl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_Release (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface) +{ + ICOM_THIS(IDirectMusicDownloadedInstrumentImpl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusicDownloadedInstrument Interface follow: */ +/* none at this time */ + +ICOM_VTABLE(IDirectMusicDownloadedInstrument) DirectMusicDownloadedInstrument_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusicDownloadedInstrumentImpl_QueryInterface, + IDirectMusicDownloadedInstrumentImpl_AddRef, + IDirectMusicDownloadedInstrumentImpl_Release +}; diff --git a/dlls/dmusic/dmusic_download.c b/dlls/dmusic/dmusic_download.c new file mode 100644 index 00000000000..bd8b63e48fe --- /dev/null +++ b/dlls/dmusic/dmusic_download.c @@ -0,0 +1,78 @@ +/* IDirectMusicDownload Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* IDirectMusicDownload IUnknown parts follow: */ +HRESULT WINAPI IDirectMusicDownloadImpl_QueryInterface (LPDIRECTMUSICDOWNLOAD iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusicDownloadImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicDownload)) + { + IDirectMusicDownloadImpl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IDirectMusicDownloadImpl_AddRef (LPDIRECTMUSICDOWNLOAD iface) +{ + ICOM_THIS(IDirectMusicDownloadImpl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusicDownloadImpl_Release (LPDIRECTMUSICDOWNLOAD iface) +{ + ICOM_THIS(IDirectMusicDownloadImpl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusicDownload Interface follow: */ +HRESULT WINAPI IDirectMusicDownloadImpl_GetBuffer (LPDIRECTMUSICDOWNLOAD iface, void** ppvBuffer, DWORD* pdwSize) +{ + FIXME("stub\n"); + return DS_OK; +} + +ICOM_VTABLE(IDirectMusicDownload) DirectMusicDownload_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusicDownloadImpl_QueryInterface, + IDirectMusicDownloadImpl_AddRef, + IDirectMusicDownloadImpl_Release, + IDirectMusicDownloadImpl_GetBuffer +}; diff --git a/dlls/dmusic/dmusic_instrument.c b/dlls/dmusic/dmusic_instrument.c new file mode 100644 index 00000000000..9a151ac73ea --- /dev/null +++ b/dlls/dmusic/dmusic_instrument.c @@ -0,0 +1,85 @@ +/* IDirectMusicInstrument Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* IDirectMusicInstrument IUnknown parts follow: */ +HRESULT WINAPI IDirectMusicInstrumentImpl_QueryInterface (LPDIRECTMUSICINSTRUMENT iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusicInstrumentImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicInstrument)) + { + IDirectMusicInstrumentImpl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IDirectMusicInstrumentImpl_AddRef (LPDIRECTMUSICINSTRUMENT iface) +{ + ICOM_THIS(IDirectMusicInstrumentImpl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusicInstrumentImpl_Release (LPDIRECTMUSICINSTRUMENT iface) +{ + ICOM_THIS(IDirectMusicInstrumentImpl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusicInstrument Interface follow: */ +HRESULT WINAPI IDirectMusicInstrumentImpl_GetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD* pdwPatch) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicInstrumentImpl_SetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD dwPatch) +{ + FIXME("stub\n"); + return DS_OK; +} + +ICOM_VTABLE(IDirectMusicInstrument) DirectMusicInstrument_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusicInstrumentImpl_QueryInterface, + IDirectMusicInstrumentImpl_AddRef, + IDirectMusicInstrumentImpl_Release, + IDirectMusicInstrumentImpl_GetPatch, + IDirectMusicInstrumentImpl_SetPatch +}; diff --git a/dlls/dmusic/dmusic_main.c b/dlls/dmusic/dmusic_main.c new file mode 100644 index 00000000000..07508b248ee --- /dev/null +++ b/dlls/dmusic/dmusic_main.c @@ -0,0 +1,171 @@ +/* DirectMusic Main + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + + +/****************************************************************** + * DirectMusic ClassFactory + * + * + */ + +extern HRESULT WINAPI DMUSIC_CreateDirectMusic (LPCGUID lpcGUID, LPDIRECTMUSIC *ppDM, LPUNKNOWN pUnkOuter); + +typedef struct +{ + /* IUnknown fields */ + ICOM_VFIELD(IClassFactory); + DWORD ref; +} IClassFactoryImpl; + +static HRESULT WINAPI DMCF_QueryInterface(LPCLASSFACTORY iface,REFIID riid,LPVOID *ppobj) +{ + ICOM_THIS(IClassFactoryImpl,iface); + + FIXME("(%p)->(%s,%p),stub!\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +static ULONG WINAPI DMCF_AddRef(LPCLASSFACTORY iface) +{ + ICOM_THIS(IClassFactoryImpl,iface); + return ++(This->ref); +} + +static ULONG WINAPI DMCF_Release(LPCLASSFACTORY iface) +{ + ICOM_THIS(IClassFactoryImpl,iface); + /* static class, won't be freed */ + return --(This->ref); +} + +static HRESULT WINAPI DMCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pOuter, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IClassFactoryImpl,iface); + + TRACE ("(%p)->(%p,%s,%p)\n",This,pOuter,debugstr_guid(riid),ppobj); + if (IsEqualGUID (&IID_IDirectMusic, riid)) + { + return DMUSIC_CreateDirectMusic (riid, (LPDIRECTMUSIC*)ppobj, pOuter); + } + + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +static HRESULT WINAPI DMCF_LockServer(LPCLASSFACTORY iface,BOOL dolock) +{ + ICOM_THIS(IClassFactoryImpl,iface); + FIXME("(%p)->(%d),stub!\n",This,dolock); + return S_OK; +} + +static ICOM_VTABLE(IClassFactory) DMCF_Vtbl = { + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + DMCF_QueryInterface, + DMCF_AddRef, + DMCF_Release, + DMCF_CreateInstance, + DMCF_LockServer +}; + +static IClassFactoryImpl DMUSIC_CF = {&DMCF_Vtbl, 1 }; + +/****************************************************************** + * DllMain + * + * + */ +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + if (fdwReason == DLL_PROCESS_ATTACH) + { + /* FIXME: Initialisation */ + FIXME("stub\n"); + } + else if (fdwReason == DLL_PROCESS_DETACH) + { + /* FIXME: Cleanup */ + FIXME("stub\n"); + } + + return TRUE; +} + + +/****************************************************************** + * DllCanUnloadNow (DMUSIC.1) + * + * + */ +HRESULT WINAPI DMUSIC_DllCanUnloadNow(void) +{ + FIXME("(void): stub\n"); + + return S_FALSE; +} + + +/****************************************************************** + * DllGetClassObject (DMUSIC.2) + * + * + */ +HRESULT WINAPI DMUSIC_DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) +{ + TRACE("(%p,%p,%p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); + if (IsEqualCLSID (&IID_IClassFactory, riid)) + { + *ppv = (LPVOID)&DMUSIC_CF; + IClassFactory_AddRef((IClassFactory*)*ppv); + return S_OK; + } + + WARN("(%p,%p,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); + return CLASS_E_CLASSNOTAVAILABLE; +} + + +/****************************************************************** + * DllRegisterServer (DMUSIC.3) + * + * + */ +HRESULT WINAPI DMUSIC_DllRegisterServer(void) +{ + FIXME("(void): stub\n"); + + return S_OK; +} + + +/****************************************************************** + * DllUnregisterServer (DMUSIC.4) + * + * + */ +HRESULT WINAPI DMUSIC_DllUnregisterServer(void) +{ + FIXME("(void): stub\n"); + + return S_OK; +} diff --git a/dlls/dmusic/dmusic_port.c b/dlls/dmusic/dmusic_port.c new file mode 100644 index 00000000000..a22f6bd614d --- /dev/null +++ b/dlls/dmusic/dmusic_port.c @@ -0,0 +1,183 @@ +/* IDirectMusicPort Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* IDirectMusicPort IUnknown parts follow: */ +HRESULT WINAPI IDirectMusicPortImpl_QueryInterface (LPDIRECTMUSICPORT iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusicPortImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicPort)) + { + IDirectMusicPortImpl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IDirectMusicPortImpl_AddRef (LPDIRECTMUSICPORT iface) +{ + ICOM_THIS(IDirectMusicPortImpl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusicPortImpl_Release (LPDIRECTMUSICPORT iface) +{ + ICOM_THIS(IDirectMusicPortImpl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusicPort Interface follow: */ +HRESULT WINAPI IDirectMusicPortImpl_PlayBuffer (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_SetReadNotificationHandle (LPDIRECTMUSICPORT iface, HANDLE hEvent) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_Read (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_DownloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicInstrument* pInstrument, IDirectMusicDownloadedInstrument** ppDownloadedInstrument, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_UnloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicDownloadedInstrument *pDownloadedInstrument) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_GetLatencyClock (LPDIRECTMUSICPORT iface, IReferenceClock** ppClock) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_GetRunningStats (LPDIRECTMUSICPORT iface, LPDMUS_SYNTHSTATS pStats) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_GetCaps (LPDIRECTMUSICPORT iface, LPDMUS_PORTCAPS pPortCaps) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_DeviceIoControl (LPDIRECTMUSICPORT iface, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_SetNumChannelGroups (LPDIRECTMUSICPORT iface, DWORD dwChannelGroups) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_GetNumChannelGroups (LPDIRECTMUSICPORT iface, LPDWORD pdwChannelGroups) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_Activate (LPDIRECTMUSICPORT iface, BOOL fActive) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_SetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_GetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_SetDirectSound (LPDIRECTMUSICPORT iface, LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortImpl_GetFormat (LPDIRECTMUSICPORT iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize) +{ + FIXME("stub\n"); + return DS_OK; +} + +ICOM_VTABLE(IDirectMusicPort) DirectMusicPort_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusicPortImpl_QueryInterface, + IDirectMusicPortImpl_AddRef, + IDirectMusicPortImpl_Release, + IDirectMusicPortImpl_PlayBuffer, + IDirectMusicPortImpl_SetReadNotificationHandle, + IDirectMusicPortImpl_Read, + IDirectMusicPortImpl_DownloadInstrument, + IDirectMusicPortImpl_UnloadInstrument, + IDirectMusicPortImpl_GetLatencyClock, + IDirectMusicPortImpl_GetRunningStats, + IDirectMusicPortImpl_GetCaps, + IDirectMusicPortImpl_DeviceIoControl, + IDirectMusicPortImpl_SetNumChannelGroups, + IDirectMusicPortImpl_GetNumChannelGroups, + IDirectMusicPortImpl_Activate, + IDirectMusicPortImpl_SetChannelPriority, + IDirectMusicPortImpl_GetChannelPriority, + IDirectMusicPortImpl_SetDirectSound, + IDirectMusicPortImpl_GetFormat +}; diff --git a/dlls/dmusic/dmusic_portdl.c b/dlls/dmusic/dmusic_portdl.c new file mode 100644 index 00000000000..e5261305a46 --- /dev/null +++ b/dlls/dmusic/dmusic_portdl.c @@ -0,0 +1,113 @@ +/* IDirectMusicPortDownload Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* IDirectMusicPortDownload IUnknown parts follow: */ +HRESULT WINAPI IDirectMusicPortDownloadImpl_QueryInterface (LPDIRECTMUSICPORTDOWNLOAD iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusicPortDownloadImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicPortDownload)) + { + IDirectMusicPortDownloadImpl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IDirectMusicPortDownloadImpl_AddRef (LPDIRECTMUSICPORTDOWNLOAD iface) +{ + ICOM_THIS(IDirectMusicPortDownloadImpl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusicPortDownloadImpl_Release (LPDIRECTMUSICPORTDOWNLOAD iface) +{ + ICOM_THIS(IDirectMusicPortDownloadImpl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusicPortDownload Interface follow: */ +HRESULT WINAPI IDirectMusicPortDownloadImpl_GetBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwDLId, IDirectMusicDownload** ppIDMDownload) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortDownloadImpl_AllocateBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwSize, IDirectMusicDownload** ppIDMDownload) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortDownloadImpl_GetDLId (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwStartDLId, DWORD dwCount) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortDownloadImpl_GetAppend (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwAppend) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortDownloadImpl_Download (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IDirectMusicPortDownloadImpl_Unload (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload) +{ + FIXME("stub\n"); + return DS_OK; +} + +ICOM_VTABLE(IDirectMusicPortDownload) DirectMusicPortDownload_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusicPortDownloadImpl_QueryInterface, + IDirectMusicPortDownloadImpl_AddRef, + IDirectMusicPortDownloadImpl_Release, + IDirectMusicPortDownloadImpl_GetBuffer, + IDirectMusicPortDownloadImpl_AllocateBuffer, + IDirectMusicPortDownloadImpl_GetDLId, + IDirectMusicPortDownloadImpl_GetAppend, + IDirectMusicPortDownloadImpl_Download, + IDirectMusicPortDownloadImpl_Unload +}; diff --git a/dlls/dmusic/dmusic_private.h b/dlls/dmusic/dmusic_private.h new file mode 100644 index 00000000000..a2ef841b29e --- /dev/null +++ b/dlls/dmusic/dmusic_private.h @@ -0,0 +1,324 @@ +/* DirectMusic Private Include + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __WINE_DMUSIC_PRIVATE_H +#define __WINE_DMUSIC_PRIVATE_H + +#include "config.h" +#include "windef.h" +#include "wine/debug.h" +#include "winbase.h" +#include "winnt.h" +#include "dmusicc.h" +#include "dsound.h" + +/***************************************************************************** + * Interfaces + */ +typedef struct IDirectMusicImpl IDirectMusicImpl; +typedef struct IDirectMusic8Impl IDirectMusic8Impl; +typedef struct IDirectMusicBufferImpl IDirectMusicBufferImpl; +typedef struct IDirectMusicInstrumentImpl IDirectMusicInstrumentImpl; +typedef struct IDirectMusicDownloadedInstrumentImpl IDirectMusicDownloadedInstrumentImpl; +typedef struct IDirectMusicCollectionImpl IDirectMusicCollectionImpl; +typedef struct IDirectMusicDownloadImpl IDirectMusicDownloadImpl; +typedef struct IDirectMusicPortDownloadImpl IDirectMusicPortDownloadImpl; +typedef struct IDirectMusicPortImpl IDirectMusicPortImpl; +typedef struct IDirectMusicThruImpl IDirectMusicThruImpl; +typedef struct IReferenceClockImpl IReferenceClockImpl; + +/***************************************************************************** + * Predeclare the interface implementation structures + */ +extern ICOM_VTABLE(IDirectMusic) DirectMusic_Vtbl; +extern ICOM_VTABLE(IDirectMusic8) DirectMusic8_Vtbl; +extern ICOM_VTABLE(IDirectMusicBuffer) DirectMusicBuffer_Vtbl; +extern ICOM_VTABLE(IDirectMusicInstrument) DirectMusicInstrument_Vtbl; +extern ICOM_VTABLE(IDirectMusicDownloadedInstrument) DirectMusicDownloadedInstrument_Vtbl; +extern ICOM_VTABLE(IDirectMusicCollection) DirectMusicCollection_Vtbl; +extern ICOM_VTABLE(IDirectMusicDownload) DirectMusicDownload_Vtbl; +extern ICOM_VTABLE(IDirectMusicPortDownload) DirectMusicPortDownload_Vtbl; +extern ICOM_VTABLE(IDirectMusicPort) DirectMusicPort_Vtbl; +extern ICOM_VTABLE(IDirectMusicThru) DirectMusicThru_Vtbl; +extern ICOM_VTABLE(IReferenceClock) ReferenceClock_Vtbl; + +/***************************************************************************** + * IDirectMusicImpl implementation structure + */ +struct IDirectMusicImpl +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusic); + DWORD ref; + + /* IDirectMusicImpl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IDirectMusicImpl_QueryInterface (LPDIRECTMUSIC iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IDirectMusicImpl_AddRef (LPDIRECTMUSIC iface); +extern ULONG WINAPI IDirectMusicImpl_Release (LPDIRECTMUSIC iface); +/* IDirectMusicImpl: */ +extern HRESULT WINAPI IDirectMusicImpl_EnumPort (LPDIRECTMUSIC iface, DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps); +extern HRESULT WINAPI IDirectMusicImpl_CreateMusicBuffer (LPDIRECTMUSIC iface, LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER** ppBuffer, LPUNKNOWN pUnkOuter); +extern HRESULT WINAPI IDirectMusicImpl_CreatePort (LPDIRECTMUSIC iface, REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT* ppPort, LPUNKNOWN pUnkOuter); +extern HRESULT WINAPI IDirectMusicImpl_EnumMasterClock (LPDIRECTMUSIC iface, DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo); +extern HRESULT WINAPI IDirectMusicImpl_GetMasterClock (LPDIRECTMUSIC iface, LPGUID pguidClock, IReferenceClock** ppReferenceClock); +extern HRESULT WINAPI IDirectMusicImpl_SetMasterClock (LPDIRECTMUSIC iface, REFGUID rguidClock); +extern HRESULT WINAPI IDirectMusicImpl_Activate (LPDIRECTMUSIC iface, BOOL fEnable); +extern HRESULT WINAPI IDirectMusicImpl_GetDefaultPort (LPDIRECTMUSIC iface, LPGUID pguidPort); +extern HRESULT WINAPI IDirectMusicImpl_SetDirectSound (LPDIRECTMUSIC iface, LPDIRECTSOUND pDirectSound, HWND hWnd); + +/***************************************************************************** + * IDirectMusic8Impl implementation structure + */ +struct IDirectMusic8Impl +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusic8); + DWORD ref; + + /* IDirectMusic8Impl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IDirectMusic8Impl_QueryInterface (LPDIRECTMUSIC8 iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IDirectMusic8Impl_AddRef (LPDIRECTMUSIC8 iface); +extern ULONG WINAPI IDirectMusic8Impl_Release (LPDIRECTMUSIC8 iface); +/* IDirectMusic8Impl: */ +extern HRESULT WINAPI IDirectMusic8Impl_EnumPort (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_PORTCAPS pPortCaps); +extern HRESULT WINAPI IDirectMusic8Impl_CreateMusicBuffer (LPDIRECTMUSIC8 iface, LPDMUS_BUFFERDESC pBufferDesc, LPDIRECTMUSICBUFFER** ppBuffer, LPUNKNOWN pUnkOuter); +extern HRESULT WINAPI IDirectMusic8Impl_CreatePort (LPDIRECTMUSIC8 iface, REFCLSID rclsidPort, LPDMUS_PORTPARAMS pPortParams, LPDIRECTMUSICPORT* ppPort, LPUNKNOWN pUnkOuter); +extern HRESULT WINAPI IDirectMusic8Impl_EnumMasterClock (LPDIRECTMUSIC8 iface, DWORD dwIndex, LPDMUS_CLOCKINFO lpClockInfo); +extern HRESULT WINAPI IDirectMusic8Impl_GetMasterClock (LPDIRECTMUSIC8 iface, LPGUID pguidClock, IReferenceClock** ppReferenceClock); +extern HRESULT WINAPI IDirectMusic8Impl_SetMasterClock (LPDIRECTMUSIC8 iface, REFGUID rguidClock); +extern HRESULT WINAPI IDirectMusic8Impl_Activate (LPDIRECTMUSIC8 iface, BOOL fEnable); +extern HRESULT WINAPI IDirectMusic8Impl_GetDefaultPort (LPDIRECTMUSIC8 iface, LPGUID pguidPort); +extern HRESULT WINAPI IDirectMusic8Impl_SetDirectSound (LPDIRECTMUSIC8 iface, LPDIRECTSOUND pDirectSound, HWND hWnd); +extern HRESULT WINAPI IDirectMusic8Impl_SetExternalMasterClock (LPDIRECTMUSIC8 iface, IReferenceClock* pClock); + +/***************************************************************************** + * IDirectMusicBufferImpl implementation structure + */ +struct IDirectMusicBufferImpl +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusicBuffer); + DWORD ref; + + /* IDirectMusicBufferImpl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IDirectMusicBufferImpl_QueryInterface (LPDIRECTMUSICBUFFER iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IDirectMusicBufferImpl_AddRef (LPDIRECTMUSICBUFFER iface); +extern ULONG WINAPI IDirectMusicBufferImpl_Release (LPDIRECTMUSICBUFFER iface); +/* IDirectMusicBufferImpl: */ +extern HRESULT WINAPI IDirectMusicBufferImpl_Flush (LPDIRECTMUSICBUFFER iface); +extern HRESULT WINAPI IDirectMusicBufferImpl_TotalTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prtTime); +extern HRESULT WINAPI IDirectMusicBufferImpl_PackStructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD dwChannelMessage); +extern HRESULT WINAPI IDirectMusicBufferImpl_PackUnstructured (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt, DWORD dwChannelGroup, DWORD cb, LPBYTE lpb); +extern HRESULT WINAPI IDirectMusicBufferImpl_ResetReadPtr (LPDIRECTMUSICBUFFER iface); +extern HRESULT WINAPI IDirectMusicBufferImpl_GetNextEvent (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt, LPDWORD pdwChannelGroup, LPDWORD pdwLength, LPBYTE* ppData); +extern HRESULT WINAPI IDirectMusicBufferImpl_GetRawBufferPtr (LPDIRECTMUSICBUFFER iface, LPBYTE* ppData); +extern HRESULT WINAPI IDirectMusicBufferImpl_GetStartTime (LPDIRECTMUSICBUFFER iface, LPREFERENCE_TIME prt); +extern HRESULT WINAPI IDirectMusicBufferImpl_GetUsedBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb); +extern HRESULT WINAPI IDirectMusicBufferImpl_GetMaxBytes (LPDIRECTMUSICBUFFER iface, LPDWORD pcb); +extern HRESULT WINAPI IDirectMusicBufferImpl_GetBufferFormat (LPDIRECTMUSICBUFFER iface, LPGUID pGuidFormat); +extern HRESULT WINAPI IDirectMusicBufferImpl_SetStartTime (LPDIRECTMUSICBUFFER iface, REFERENCE_TIME rt); +extern HRESULT WINAPI IDirectMusicBufferImpl_SetUsedBytes (LPDIRECTMUSICBUFFER iface, DWORD cb); + +/***************************************************************************** + * IDirectMusicInstrumentImpl implementation structure + */ +struct IDirectMusicInstrumentImpl +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusicInstrument); + DWORD ref; + + /* IDirectMusicInstrumentImpl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IDirectMusicInstrumentImpl_QueryInterface (LPDIRECTMUSICINSTRUMENT iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IDirectMusicInstrumentImpl_AddRef (LPDIRECTMUSICINSTRUMENT iface); +extern ULONG WINAPI IDirectMusicInstrumentImpl_Release (LPDIRECTMUSICINSTRUMENT iface); +/* IDirectMusicInstrumentImpl: */ +extern HRESULT WINAPI IDirectMusicInstrumentImpl_GetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD* pdwPatch); +extern HRESULT WINAPI IDirectMusicInstrumentImpl_SetPatch (LPDIRECTMUSICINSTRUMENT iface, DWORD dwPatch); + +/***************************************************************************** + * IDirectMusicDownloadedInstrumentImpl implementation structure + */ +struct IDirectMusicDownloadedInstrumentImpl +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusicDownloadedInstrument); + DWORD ref; + + /* IDirectMusicDownloadedInstrumentImpl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IDirectMusicDownloadedInstrumentImpl_QueryInterface (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_AddRef (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface); +extern ULONG WINAPI IDirectMusicDownloadedInstrumentImpl_Release (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface); +/* IDirectMusicDownloadedInstrumentImpl: */ +/* none yet */ + +/***************************************************************************** + * IDirectMusicCollectionImpl implementation structure + */ +struct IDirectMusicCollectionImpl +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusicCollection); + DWORD ref; + + /* IDirectMusicCollectionImpl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IDirectMusicCollectionImpl_QueryInterface (LPDIRECTMUSICCOLLECTION iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IDirectMusicCollectionImpl_AddRef (LPDIRECTMUSICCOLLECTION iface); +extern ULONG WINAPI IDirectMusicCollectionImpl_Release (LPDIRECTMUSICCOLLECTION iface); +/* IDirectMusicImpl: */ +HRESULT WINAPI IDirectMusicCollectionImpl_GetInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwPatch, IDirectMusicInstrument** ppInstrument); +HRESULT WINAPI IDirectMusicCollectionImpl_EnumInstrument (LPDIRECTMUSICCOLLECTION iface, DWORD dwIndex, DWORD* pdwPatch, LPWSTR pwszName, DWORD dwNameLen); + +/***************************************************************************** + * IDirectMusicDownloadImpl implementation structure + */ +struct IDirectMusicDownloadImpl +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusicDownload); + DWORD ref; + + /* IDirectMusicDownloadImpl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IDirectMusicDownloadImpl_QueryInterface (LPDIRECTMUSICDOWNLOAD iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IDirectMusicDownloadImpl_AddRef (LPDIRECTMUSICDOWNLOAD iface); +extern ULONG WINAPI IDirectMusicDownloadImpl_Release (LPDIRECTMUSICDOWNLOAD iface); +/* IDirectMusicImpl: */ +extern HRESULT WINAPI IDirectMusicDownloadImpl_GetBuffer (LPDIRECTMUSICDOWNLOAD iface, void** ppvBuffer, DWORD* pdwSize); + +/***************************************************************************** + * IDirectMusicPortDownloadImpl implementation structure + */ +struct IDirectMusicPortDownloadImpl +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusicPortDownload); + DWORD ref; + + /* IDirectMusicPortDownloadImpl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IDirectMusicPortDownloadImpl_QueryInterface (LPDIRECTMUSICPORTDOWNLOAD iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IDirectMusicPortDownloadImpl_AddRef (LPDIRECTMUSICPORTDOWNLOAD iface); +extern ULONG WINAPI IDirectMusicPortDownloadImpl_Release (LPDIRECTMUSICPORTDOWNLOAD iface); +/* IDirectMusicPortDownloadImpl: */ +extern HRESULT WINAPI IDirectMusicPortDownloadImpl_GetBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwDLId, IDirectMusicDownload** ppIDMDownload); +extern HRESULT WINAPI IDirectMusicPortDownloadImpl_AllocateBuffer (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD dwSize, IDirectMusicDownload** ppIDMDownload); +extern HRESULT WINAPI IDirectMusicPortDownloadImpl_GetDLId (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwStartDLId, DWORD dwCount); +extern HRESULT WINAPI IDirectMusicPortDownloadImpl_GetAppend (LPDIRECTMUSICPORTDOWNLOAD iface, DWORD* pdwAppend); +extern HRESULT WINAPI IDirectMusicPortDownloadImpl_Download (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload); +extern HRESULT WINAPI IDirectMusicPortDownloadImpl_Unload (LPDIRECTMUSICPORTDOWNLOAD iface, IDirectMusicDownload* pIDMDownload); + +/***************************************************************************** + * IDirectMusicPortImpl implementation structure + */ +struct IDirectMusicPortImpl +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusicPort); + DWORD ref; + + /* IDirectMusicPortImpl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IDirectMusicPortImpl_QueryInterface (LPDIRECTMUSICPORT iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IDirectMusicPortImpl_AddRef (LPDIRECTMUSICPORT iface); +extern ULONG WINAPI IDirectMusicPortImpl_Release (LPDIRECTMUSICPORT iface); +/* IDirectMusicPortDownloadImpl: */ +extern HRESULT WINAPI IDirectMusicPortImpl_PlayBuffer (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer); +extern HRESULT WINAPI IDirectMusicPortImpl_SetReadNotificationHandle (LPDIRECTMUSICPORT iface, HANDLE hEvent); +extern HRESULT WINAPI IDirectMusicPortImpl_Read (LPDIRECTMUSICPORT iface, LPDIRECTMUSICBUFFER pBuffer); +extern HRESULT WINAPI IDirectMusicPortImpl_DownloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicInstrument* pInstrument, IDirectMusicDownloadedInstrument** ppDownloadedInstrument, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges); +extern HRESULT WINAPI IDirectMusicPortImpl_UnloadInstrument (LPDIRECTMUSICPORT iface, IDirectMusicDownloadedInstrument *pDownloadedInstrument); +extern HRESULT WINAPI IDirectMusicPortImpl_GetLatencyClock (LPDIRECTMUSICPORT iface, IReferenceClock** ppClock); +extern HRESULT WINAPI IDirectMusicPortImpl_GetRunningStats (LPDIRECTMUSICPORT iface, LPDMUS_SYNTHSTATS pStats); +extern HRESULT WINAPI IDirectMusicPortImpl_GetCaps (LPDIRECTMUSICPORT iface, LPDMUS_PORTCAPS pPortCaps); +extern HRESULT WINAPI IDirectMusicPortImpl_DeviceIoControl (LPDIRECTMUSICPORT iface, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); +extern HRESULT WINAPI IDirectMusicPortImpl_SetNumChannelGroups (LPDIRECTMUSICPORT iface, DWORD dwChannelGroups); +extern HRESULT WINAPI IDirectMusicPortImpl_GetNumChannelGroups (LPDIRECTMUSICPORT iface, LPDWORD pdwChannelGroups); +extern HRESULT WINAPI IDirectMusicPortImpl_Activate (LPDIRECTMUSICPORT iface, BOOL fActive); +extern HRESULT WINAPI IDirectMusicPortImpl_SetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority); +extern HRESULT WINAPI IDirectMusicPortImpl_GetChannelPriority (LPDIRECTMUSICPORT iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority); +extern HRESULT WINAPI IDirectMusicPortImpl_SetDirectSound (LPDIRECTMUSICPORT iface, LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer); +extern HRESULT WINAPI IDirectMusicPortImpl_GetFormat (LPDIRECTMUSICPORT iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize); + +/***************************************************************************** + * IDirectMusicThruImpl implementation structure + */ +struct IDirectMusicThruImpl +{ + /* IUnknown fields */ + ICOM_VFIELD(IDirectMusicThru); + DWORD ref; + + /* IDirectMusicThruImpl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IDirectMusicThruImpl_QueryInterface (LPDIRECTMUSICTHRU iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IDirectMusicThruImpl_AddRef (LPDIRECTMUSICTHRU iface); +extern ULONG WINAPI IDirectMusicThruImpl_Release (LPDIRECTMUSICTHRU iface); +/* IDirectMusicPortDownloadImpl: */ +extern HRESULT WINAPI ThruChannel (LPDIRECTMUSICTHRU iface, DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort); + +/***************************************************************************** + * IReferenceClockImpl implementation structure + */ +struct IReferenceClockImpl +{ + /* IUnknown fields */ + ICOM_VFIELD(IReferenceClock); + DWORD ref; + + /* IReferenceClockImpl fields */ +}; + +/* IUnknown: */ +extern HRESULT WINAPI IReferenceClockImpl_QueryInterface (LPREFERENCECLOCK iface, REFIID riid, LPVOID *ppobj); +extern ULONG WINAPI IReferenceClockImpl_AddRef (LPREFERENCECLOCK iface); +extern ULONG WINAPI IReferenceClockImpl_Release (LPREFERENCECLOCK iface); +/* IReferenceClock: */ +extern HRESULT WINAPI IReferenceClockImpl_GetTime (LPREFERENCECLOCK iface, REFERENCE_TIME* pTime); +extern HRESULT WINAPI IReferenceClockImpl_AdviseTime (LPREFERENCECLOCK iface, REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD* pdwAdviseCookie); +extern HRESULT WINAPI IReferenceClockImpl_AdvisePeriodic (LPREFERENCECLOCK iface, REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD* pdwAdviseCookie); +extern HRESULT WINAPI IReferenceClockImpl_Unadvise (LPREFERENCECLOCK iface, DWORD dwAdviseCookie); + +#endif /* __WINE_DMUSIC_PRIVATE_H */ diff --git a/dlls/dmusic/dmusic_thru.c b/dlls/dmusic/dmusic_thru.c new file mode 100644 index 00000000000..26711b50c0f --- /dev/null +++ b/dlls/dmusic/dmusic_thru.c @@ -0,0 +1,78 @@ +/* IDirectMusicThru Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* IDirectMusicThru IUnknown parts follow: */ +HRESULT WINAPI IDirectMusicThruImpl_QueryInterface (LPDIRECTMUSICTHRU iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IDirectMusicThruImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicThru)) + { + IDirectMusicThruImpl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IDirectMusicThruImpl_AddRef (LPDIRECTMUSICTHRU iface) +{ + ICOM_THIS(IDirectMusicThruImpl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IDirectMusicThruImpl_Release (LPDIRECTMUSICTHRU iface) +{ + ICOM_THIS(IDirectMusicThruImpl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IDirectMusicThru Interface follow: */ +HRESULT WINAPI IDirectMusicThruImpl_ThruChannel (LPDIRECTMUSICTHRU iface, DWORD dwSourceChannelGroup, DWORD dwSourceChannel, DWORD dwDestinationChannelGroup, DWORD dwDestinationChannel, LPDIRECTMUSICPORT pDestinationPort) +{ + FIXME("stub\n"); + return DS_OK; +} + +ICOM_VTABLE(IDirectMusicThru) DirectMusicThru_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IDirectMusicThruImpl_QueryInterface, + IDirectMusicThruImpl_AddRef, + IDirectMusicThruImpl_Release, + IDirectMusicThruImpl_ThruChannel +}; diff --git a/dlls/dmusic/reference_clock.c b/dlls/dmusic/reference_clock.c new file mode 100644 index 00000000000..9f4678ecb8b --- /dev/null +++ b/dlls/dmusic/reference_clock.c @@ -0,0 +1,100 @@ +/* + * IReferenceClock Implementation + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "wine/debug.h" + +#include "dmusic_private.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dmusic); + +/* IReferenceClock IUnknown parts follow: */ +HRESULT WINAPI IReferenceClockImpl_QueryInterface (LPREFERENCECLOCK iface, REFIID riid, LPVOID *ppobj) +{ + ICOM_THIS(IReferenceClockImpl,iface); + + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IReferenceClock)) + { + IReferenceClockImpl_AddRef(iface); + *ppobj = This; + return DS_OK; + } + WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj); + return E_NOINTERFACE; +} + +ULONG WINAPI IReferenceClockImpl_AddRef (LPREFERENCECLOCK iface) +{ + ICOM_THIS(IReferenceClockImpl,iface); + TRACE("(%p) : AddRef from %ld\n", This, This->ref); + return ++(This->ref); +} + +ULONG WINAPI IReferenceClockImpl_Release (LPREFERENCECLOCK iface) +{ + ICOM_THIS(IReferenceClockImpl,iface); + ULONG ref = --This->ref; + TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref); + if (ref == 0) + { + HeapFree(GetProcessHeap(), 0, This); + } + return ref; +} + +/* IReferenceClock Interface follow: */ +HRESULT WINAPI IReferenceClockImpl_GetTime (LPREFERENCECLOCK iface, REFERENCE_TIME* pTime) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IReferenceClockImpl_AdviseTime (LPREFERENCECLOCK iface, REFERENCE_TIME baseTime, REFERENCE_TIME streamTime, HANDLE hEvent, DWORD* pdwAdviseCookie) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IReferenceClockImpl_AdvisePeriodic (LPREFERENCECLOCK iface, REFERENCE_TIME startTime, REFERENCE_TIME periodTime, HANDLE hSemaphore, DWORD* pdwAdviseCookie) +{ + FIXME("stub\n"); + return DS_OK; +} + +HRESULT WINAPI IReferenceClockImpl_Unadvise (LPREFERENCECLOCK iface, DWORD dwAdviseCookie) +{ + FIXME("stub\n"); + return DS_OK; +} + +ICOM_VTABLE(IReferenceClock) ReferenceClock_Vtbl = +{ + ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE + IReferenceClockImpl_QueryInterface, + IReferenceClockImpl_AddRef, + IReferenceClockImpl_Release, + IReferenceClockImpl_GetTime, + IReferenceClockImpl_AdviseTime, + IReferenceClockImpl_AdvisePeriodic, + IReferenceClockImpl_Unadvise +}; diff --git a/include/Makefile.in b/include/Makefile.in index 9d8d3058955..4bc16c1f4b1 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -39,9 +39,14 @@ WINDOWS_INCLUDES = \ dinput.h \ dispdib.h \ dlgs.h \ + dls1.h \ + dmdls.h \ + dmerror.h \ dmo.h \ dmoreg.h \ dmort.h \ + dmusbuff.h \ + dmusicc.h \ docobj.h \ dplay.h \ dplobby.h \ diff --git a/include/dls1.h b/include/dls1.h new file mode 100644 index 00000000000..89c3b2620ff --- /dev/null +++ b/include/dls1.h @@ -0,0 +1,191 @@ +/* Defines and Structures for Instrument Collection Form RIFF DLS + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __WINE_INCLUDE_DLS1_H +#define __WINE_INCLUDE_DLS1_H + +/***************************************************************************** + * FOURCC's + */ +#define FOURCC_DLS mmioFOURCC('D','L','S',' ') +#define FOURCC_DLID mmioFOURCC('d','l','i','d') +#define FOURCC_COLH mmioFOURCC('c','o','l','h') +#define FOURCC_WVPL mmioFOURCC('w','v','p','l') +#define FOURCC_PTBL mmioFOURCC('p','t','b','l') +#define FOURCC_PATH mmioFOURCC('p','a','t','h') +#define FOURCC_wave mmioFOURCC('w','a','v','e') +#define FOURCC_LINS mmioFOURCC('l','i','n','s') +#define FOURCC_INS mmioFOURCC('i','n','s',' ') +#define FOURCC_INSH mmioFOURCC('i','n','s','h') +#define FOURCC_LRGN mmioFOURCC('l','r','g','n') +#define FOURCC_RGN mmioFOURCC('r','g','n',' ') +#define FOURCC_RGNH mmioFOURCC('r','g','n','h') +#define FOURCC_LART mmioFOURCC('l','a','r','t') +#define FOURCC_ART1 mmioFOURCC('a','r','t','1') +#define FOURCC_WLNK mmioFOURCC('w','l','n','k') +#define FOURCC_WSMP mmioFOURCC('w','s','m','p') +#define FOURCC_VERS mmioFOURCC('v','e','r','s') + +/***************************************************************************** + * Definitions + */ +#define CONN_SRC_NONE 0x0000 +#define CONN_SRC_LFO 0x0001 +#define CONN_SRC_KEYONVELOCITY 0x0002 +#define CONN_SRC_KEYNUMBER 0x0003 +#define CONN_SRC_EG1 0x0004 +#define CONN_SRC_EG2 0x0005 +#define CONN_SRC_PITCHWHEEL 0x0006 +#define CONN_SRC_CC1 0x0081 +#define CONN_SRC_CC7 0x0087 +#define CONN_SRC_CC10 0x008a +#define CONN_SRC_CC11 0x008b + +#define CONN_DST_NONE 0x0000 +#define CONN_DST_ATTENUATION 0x0001 +#define CONN_DST_PITCH 0x0003 +#define CONN_DST_PAN 0x0004 +#define CONN_DST_LFO_FREQUENCY 0x0104 +#define CONN_DST_LFO_STARTDELAY 0x0105 +#define CONN_DST_EG1_ATTACKTIME 0x0206 +#define CONN_DST_EG1_DECAYTIME 0x0207 +#define CONN_DST_EG1_RELEASETIME 0x0209 +#define CONN_DST_EG1_SUSTAINLEVEL 0x020a +#define CONN_DST_EG2_ATTACKTIME 0x030a +#define CONN_DST_EG2_DECAYTIME 0x030b +#define CONN_DST_EG2_RELEASETIME 0x030d +#define CONN_DST_EG2_SUSTAINLEVEL 0x030e + +#define CONN_TRN_NONE 0x0000 +#define CONN_TRN_CONCAVE 0x0001 + +#define F_INSTRUMENT_DRUMS 0x80000000 +#define F_RGN_OPTION_SELFNONEXCLUSIVE 0x0001 + +#define WAVELINK_CHANNEL_LEFT 0x0001l +#define WAVELINK_CHANNEL_RIGHT 0x0002l + +#define F_WAVELINK_PHASE_MASTER 0x0001 +#define POOL_CUE_NULL 0xffffffffl + +#define F_WSMP_NO_TRUNCATION 0x0001l +#define F_WSMP_NO_COMPRESSION 0x0002l + +#define WLOOP_TYPE_FORWARD 0 + +/***************************************************************************** + * Structures + */ +typedef struct _DLSID +{ + ULONG ulData1; + USHORT usData2; + USHORT usData3; + BYTE abData4[8]; +} DLSID, *LPDLSID; + +typedef struct _DLSVERSION +{ DWORD dwVersionMS; + DWORD dwVersionLS; +} DLSVERSION, *LPDLSVERSION; + +typedef struct _CONNECTION +{ + USHORT usSource; + USHORT usControl; + USHORT usDestination; + USHORT usTransform; + LONG lScale; +} CONNECTION, *LPCONNECTION; + +typedef struct _CONNECTIONLIST +{ + ULONG cbSize; + ULONG cConnections; +} CONNECTIONLIST, *LPCONNECTIONLIST; + +typedef struct _RGNRANGE +{ + USHORT usLow; + USHORT usHigh; +} RGNRANGE, *LPRGNRANGE; + +typedef struct _MIDILOCALE +{ + ULONG ulBank; + ULONG ulInstrument; +} MIDILOCALE, *LPMIDILOCALE; + +typedef struct _RGNHEADER +{ + RGNRANGE RangeKey; + RGNRANGE RangeVelocity; + USHORT fusOptions; + USHORT usKeyGroup; +} RGNHEADER, *LPRGNHEADER; + +typedef struct _INSTHEADER +{ + ULONG cRegions; + MIDILOCALE Locale; +} INSTHEADER, *LPINSTHEADER; + +typedef struct _DLSHEADER +{ + ULONG cInstruments; +} DLSHEADER, *LPDLSHEADER; + +typedef struct _WAVELINK +{ + USHORT fusOptions; + USHORT usPhaseGroup; + ULONG ulChannel; + ULONG ulTableIndex; +} WAVELINK, *LPWAVELINK; + +typedef struct _POOLCUE +{ + ULONG ulOffset; +} POOLCUE, *LPPOOLCUE; + +typedef struct _POOLTABLE +{ + ULONG cbSize; + ULONG cCues; +} POOLTABLE, *LPPOOLTABLE; + +typedef struct _rwsmp +{ + ULONG cbSize; + USHORT usUnityNote; + SHORT sFineTune; + LONG lAttenuation; + ULONG fulOptions; + ULONG cSampleLoops; +} WSMPL, *LPWSMPL; + +typedef struct _rloop +{ + ULONG cbSize; + ULONG ulType; + ULONG ulStart; + ULONG ulLength; +} WLOOP, *LPWLOOP; + +#endif /* __WINE_INCLUDE_DLS1_H */ diff --git a/include/dmdls.h b/include/dmdls.h new file mode 100644 index 00000000000..6bb0b582094 --- /dev/null +++ b/include/dmdls.h @@ -0,0 +1,197 @@ +/* DirectMusic DLS Download Definitions + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __WINE_DMUSIC_DLS_H +#define __WINE_DMUSIC_DLS_H + +#include "dls1.h" + +typedef long PCENT, GCENT, TCENT, PERCENT; +typedef LONGLONG REFERENCE_TIME, *LPREFERENCE_TIME; +/* +#ifndef MAKE_FOURCC +#define MAKEFOURCC(ch0, ch1, ch2, ch3) \ + ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \ + ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 )) +typedef DWORD FOURCC; +#endif*/ + +/***************************************************************************** + * Definitions + */ +#define DMUS_DOWNLOADINFO_INSTRUMENT 1 +#define DMUS_DOWNLOADINFO_WAVE 2 +#define DMUS_DOWNLOADINFO_INSTRUMENT2 3 +#define DMUS_DOWNLOADINFO_WAVEARTICULATION 4 +#define DMUS_DOWNLOADINFO_STREAMINGWAVE 5 +#define DMUS_DOWNLOADINFO_ONESHOTWAVE 6 + +#define DMUS_DEFAULT_SIZE_OFFSETTABLE 1 + +#define DMUS_INSTRUMENT_GM_INSTRUMENT (1 << 0) + +#define DMUS_MIN_DATA_SIZE 4 + +/***************************************************************************** + * Structures + */ +typedef struct _DMUS_DOWNLOADINFO +{ + DWORD dwDLType; + DWORD dwDLId; + DWORD dwNumOffsetTableEntries; + DWORD cbSize; +} DMUS_DOWNLOADINFO; + +typedef struct _DMUS_OFFSETTABLE +{ + ULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE]; +} DMUS_OFFSETTABLE; + +typedef struct _DMUS_INSTRUMENT +{ + ULONG ulPatch; + ULONG ulFirstRegionIdx; + ULONG ulGlobalArtIdx; + ULONG ulFirstExtCkIdx; + ULONG ulCopyrightIdx; + ULONG ulFlags; +} DMUS_INSTRUMENT; + +typedef struct _DMUS_REGION +{ + RGNRANGE RangeKey; + RGNRANGE RangeVelocity; + USHORT fusOptions; + USHORT usKeyGroup; + ULONG ulRegionArtIdx; + ULONG ulNextRegionIdx; + ULONG ulFirstExtCkIdx; + WAVELINK WaveLink; + WSMPL WSMP; + WLOOP WLOOP[1]; +} DMUS_REGION; + +typedef struct _DMUS_LFOPARAMS +{ + PCENT pcFrequency; + TCENT tcDelay; + GCENT gcVolumeScale; + PCENT pcPitchScale; + GCENT gcMWToVolume; + PCENT pcMWToPitch; +} DMUS_LFOPARAMS; + +typedef struct _DMUS_VEGPARAMS +{ + TCENT tcAttack; + TCENT tcDecay; + PERCENT ptSustain; + TCENT tcRelease; + TCENT tcVel2Attack; + TCENT tcKey2Decay; +} DMUS_VEGPARAMS; + +typedef struct _DMUS_PEGPARAMS +{ + TCENT tcAttack; + TCENT tcDecay; + PERCENT ptSustain; + TCENT tcRelease; + TCENT tcVel2Attack; + TCENT tcKey2Decay; + PCENT pcRange; +} DMUS_PEGPARAMS; + +typedef struct _DMUS_MSCPARAMS +{ + PERCENT ptDefaultPan; +} DMUS_MSCPARAMS; + +typedef struct _DMUS_ARTICPARAMS +{ + DMUS_LFOPARAMS LFO; + DMUS_VEGPARAMS VolEG; + DMUS_PEGPARAMS PitchEG; + DMUS_MSCPARAMS Misc; +} DMUS_ARTICPARAMS; + +typedef struct _DMUS_ARTICULATION +{ + ULONG ulArt1Idx; + ULONG ulFirstExtCkIdx; +} DMUS_ARTICULATION; + +typedef struct _DMUS_ARTICULATION2 +{ + ULONG ulArtIdx; + ULONG ulFirstExtCkIdx; + ULONG ulNextArtIdx; +} DMUS_ARTICULATION2; + +typedef struct _DMUS_EXTENSIONCHUNK +{ + ULONG cbSize; + ULONG ulNextExtCkIdx; + FOURCC ExtCkID; + BYTE byExtCk[DMUS_MIN_DATA_SIZE]; +} DMUS_EXTENSIONCHUNK; + + +typedef struct _DMUS_COPYRIGHT +{ + ULONG cbSize; + BYTE byCopyright[DMUS_MIN_DATA_SIZE]; +} DMUS_COPYRIGHT; + +typedef struct _DMUS_WAVEDATA +{ + ULONG cbSize; + BYTE byData[DMUS_MIN_DATA_SIZE]; +} DMUS_WAVEDATA; + +typedef struct _DMUS_WAVE +{ + ULONG ulFirstExtCkIdx; + ULONG ulCopyrightIdx; + ULONG ulWaveDataIdx; + WAVEFORMATEX WaveformatEx; +} DMUS_WAVE; + +typedef struct _DMUS_NOTERANGE +{ + DWORD dwLowNote; + DWORD dwHighNote; +} DMUS_NOTERANGE, *LPDMUS_NOTERANGE; + +typedef struct _DMUS_WAVEARTDL +{ + ULONG ulDownloadIdIdx; + ULONG ulBus; + ULONG ulBuffers; + ULONG ulMasterDLId; + USHORT usOptions; +} DMUS_WAVEARTDL, *LPDMUS_WAVEARTDL; + +typedef struct _DMUS_WAVEDL +{ + ULONG cbWaveData; +} DMUS_WAVEDL, *LPDMUS_WAVEDL; + +#endif /* __WINE_DMUSIC_DLS_H */ diff --git a/include/dmerror.h b/include/dmerror.h new file mode 100644 index 00000000000..adae948a5f9 --- /dev/null +++ b/include/dmerror.h @@ -0,0 +1,164 @@ +/* DirectMusic Error Codes + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __WINE_DMUSIC_ERROR_H +#define __WINE_DMUSIC_ERROR_H + +/***************************************************************************** + * Error code handling + */ +#define FACILITY_DIRECTMUSIC 0x878 +#define DMUS_ERRBASE 0x1000 + +#ifndef MAKE_HRESULT +#define MAKE_HRESULT(sev,fac,code) \ + ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) ) +#endif + +#define MAKE_DMHRESULTSUCCESS(code) MAKE_HRESULT(0, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code))) +#define MAKE_DMHRESULTERROR(code) MAKE_HRESULT(1, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code))) + +/***************************************************************************** + * Error codes + */ + +#define DMUS_S_PARTIALLOAD MAKE_DMHRESULTSUCCESS(0x091) +#define DMUS_S_PARTIALDOWNLOAD MAKE_DMHRESULTSUCCESS(0x092) +#define DMUS_S_REQUEUE MAKE_DMHRESULTSUCCESS(0x200) +#define DMUS_S_FREE MAKE_DMHRESULTSUCCESS(0x201) +#define DMUS_S_END MAKE_DMHRESULTSUCCESS(0x202) +#define DMUS_S_STRING_TRUNCATED MAKE_DMHRESULTSUCCESS(0x210) +#define DMUS_S_LAST_TOOL MAKE_DMHRESULTSUCCESS(0x211) +#define DMUS_S_OVER_CHORD MAKE_DMHRESULTSUCCESS(0x212) +#define DMUS_S_UP_OCTAVE MAKE_DMHRESULTSUCCESS(0x213) +#define DMUS_S_DOWN_OCTAVE MAKE_DMHRESULTSUCCESS(0x214) +#define DMUS_S_NOBUFFERCONTROL MAKE_DMHRESULTSUCCESS(0x215) +#define DMUS_S_GARBAGE_COLLECTED MAKE_DMHRESULTSUCCESS(0x216) + +#define DMUS_E_DRIVER_FAILED MAKE_DMHRESULTERROR(0x0101) +#define DMUS_E_PORTS_OPEN MAKE_DMHRESULTERROR(0x0102) +#define DMUS_E_DEVICE_IN_USE MAKE_DMHRESULTERROR(0x0103) +#define DMUS_E_INSUFFICIENTBUFFER MAKE_DMHRESULTERROR(0x0104) +#define DMUS_E_BUFFERNOTSET MAKE_DMHRESULTERROR(0x0105) +#define DMUS_E_BUFFERNOTAVAILABLE MAKE_DMHRESULTERROR(0x0106) +#define DMUS_E_NOTADLSCOL MAKE_DMHRESULTERROR(0x0108) +#define DMUS_E_INVALIDOFFSET MAKE_DMHRESULTERROR(0x0109) +#define DMUS_E_ALREADY_LOADED MAKE_DMHRESULTERROR(0x0111) +#define DMUS_E_INVALIDPOS MAKE_DMHRESULTERROR(0x0113) +#define DMUS_E_INVALIDPATCH MAKE_DMHRESULTERROR(0x0114) +#define DMUS_E_CANNOTSEEK MAKE_DMHRESULTERROR(0x0115) +#define DMUS_E_CANNOTWRITE MAKE_DMHRESULTERROR(0x0116) +#define DMUS_E_CHUNKNOTFOUND MAKE_DMHRESULTERROR(0x0117) +#define DMUS_E_INVALID_DOWNLOADID MAKE_DMHRESULTERROR(0x0119) +#define DMUS_E_NOT_DOWNLOADED_TO_PORT MAKE_DMHRESULTERROR(0x0120) +#define DMUS_E_ALREADY_DOWNLOADED MAKE_DMHRESULTERROR(0x0121) +#define DMUS_E_UNKNOWN_PROPERTY MAKE_DMHRESULTERROR(0x0122) +#define DMUS_E_SET_UNSUPPORTED MAKE_DMHRESULTERROR(0x0123) +#define DMUS_E_GET_UNSUPPORTED MAKE_DMHRESULTERROR(0x0124) +#define DMUS_E_NOTMONO MAKE_DMHRESULTERROR(0x0125) +#define DMUS_E_BADARTICULATION MAKE_DMHRESULTERROR(0x0126) +#define DMUS_E_BADINSTRUMENT MAKE_DMHRESULTERROR(0x0127) +#define DMUS_E_BADWAVELINK MAKE_DMHRESULTERROR(0x0128) +#define DMUS_E_NOARTICULATION MAKE_DMHRESULTERROR(0x0129) +#define DMUS_E_NOTPCM MAKE_DMHRESULTERROR(0x012A) +#define DMUS_E_BADWAVE MAKE_DMHRESULTERROR(0x012B) +#define DMUS_E_BADOFFSETTABLE MAKE_DMHRESULTERROR(0x012C) +#define DMUS_E_UNKNOWNDOWNLOAD MAKE_DMHRESULTERROR(0x012D) +#define DMUS_E_NOSYNTHSINK MAKE_DMHRESULTERROR(0x012E) +#define DMUS_E_ALREADYOPEN MAKE_DMHRESULTERROR(0x012F) +#define DMUS_E_ALREADYCLOSED MAKE_DMHRESULTERROR(0x0130) +#define DMUS_E_SYNTHNOTCONFIGURED MAKE_DMHRESULTERROR(0x0131) +#define DMUS_E_SYNTHACTIVE MAKE_DMHRESULTERROR(0x0132) +#define DMUS_E_CANNOTREAD MAKE_DMHRESULTERROR(0x0133) +#define DMUS_E_DMUSIC_RELEASED MAKE_DMHRESULTERROR(0x0134) +#define DMUS_E_BUFFER_EMPTY MAKE_DMHRESULTERROR(0x0135) +#define DMUS_E_BUFFER_FULL MAKE_DMHRESULTERROR(0x0136) +#define DMUS_E_PORT_NOT_CAPTURE MAKE_DMHRESULTERROR(0x0137) +#define DMUS_E_PORT_NOT_RENDER MAKE_DMHRESULTERROR(0x0138) +#define DMUS_E_DSOUND_NOT_SET MAKE_DMHRESULTERROR(0x0139) +#define DMUS_E_ALREADY_ACTIVATED MAKE_DMHRESULTERROR(0x013A) +#define DMUS_E_INVALIDBUFFER MAKE_DMHRESULTERROR(0x013B) +#define DMUS_E_WAVEFORMATNOTSUPPORTED MAKE_DMHRESULTERROR(0x013C) +#define DMUS_E_SYNTHINACTIVE MAKE_DMHRESULTERROR(0x013D) +#define DMUS_E_DSOUND_ALREADY_SET MAKE_DMHRESULTERROR(0x013E) +#define DMUS_E_INVALID_EVENT MAKE_DMHRESULTERROR(0x013F) +#define DMUS_E_UNSUPPORTED_STREAM MAKE_DMHRESULTERROR(0x0150) +#define DMUS_E_ALREADY_INITED MAKE_DMHRESULTERROR(0x0151) +#define DMUS_E_INVALID_BAND MAKE_DMHRESULTERROR(0x0152) +#define DMUS_E_TRACK_HDR_NOT_FIRST_CK MAKE_DMHRESULTERROR(0x0155) +#define DMUS_E_TOOL_HDR_NOT_FIRST_CK MAKE_DMHRESULTERROR(0x0156) +#define DMUS_E_INVALID_TRACK_HDR MAKE_DMHRESULTERROR(0x0157) +#define DMUS_E_INVALID_TOOL_HDR MAKE_DMHRESULTERROR(0x0158) +#define DMUS_E_ALL_TOOLS_FAILED MAKE_DMHRESULTERROR(0x0159) +#define DMUS_E_ALL_TRACKS_FAILED MAKE_DMHRESULTERROR(0x0160) +#define DMUS_E_NOT_FOUND MAKE_DMHRESULTERROR(0x0161) +#define DMUS_E_NOT_INIT MAKE_DMHRESULTERROR(0x0162) +#define DMUS_E_TYPE_DISABLED MAKE_DMHRESULTERROR(0x0163) +#define DMUS_E_TYPE_UNSUPPORTED MAKE_DMHRESULTERROR(0x0164) +#define DMUS_E_TIME_PAST MAKE_DMHRESULTERROR(0x0165) +#define DMUS_E_TRACK_NOT_FOUND MAKE_DMHRESULTERROR(0x0166) +#define DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT MAKE_DMHRESULTERROR(0x0167) +#define DMUS_E_NO_MASTER_CLOCK MAKE_DMHRESULTERROR(0x0170) +#define DMUS_E_LOADER_NOCLASSID MAKE_DMHRESULTERROR(0x0180) +#define DMUS_E_LOADER_BADPATH MAKE_DMHRESULTERROR(0x0181) +#define DMUS_E_LOADER_FAILEDOPEN MAKE_DMHRESULTERROR(0x0182) +#define DMUS_E_LOADER_FORMATNOTSUPPORTED MAKE_DMHRESULTERROR(0x0183) +#define DMUS_E_LOADER_FAILEDCREATE MAKE_DMHRESULTERROR(0x0184) +#define DMUS_E_LOADER_OBJECTNOTFOUND MAKE_DMHRESULTERROR(0x0185) +#define DMUS_E_LOADER_NOFILENAME MAKE_DMHRESULTERROR(0x0186) +#define DMUS_E_INVALIDFILE MAKE_DMHRESULTERROR(0x0200) +#define DMUS_E_ALREADY_EXISTS MAKE_DMHRESULTERROR(0x0201) +#define DMUS_E_OUT_OF_RANGE MAKE_DMHRESULTERROR(0x0202) +#define DMUS_E_SEGMENT_INIT_FAILED MAKE_DMHRESULTERROR(0x0203) +#define DMUS_E_ALREADY_SENT MAKE_DMHRESULTERROR(0x0204) +#define DMUS_E_CANNOT_FREE MAKE_DMHRESULTERROR(0x0205) +#define DMUS_E_CANNOT_OPEN_PORT MAKE_DMHRESULTERROR(0x0206) +#define DMUS_E_CANNOT_CONVERT MAKE_DMHRESULTERROR(0x0207) +#define DMUS_E_DESCEND_CHUNK_FAIL MAKE_DMHRESULTERROR(0x0210) +#define DMUS_E_NOT_LOADED MAKE_DMHRESULTERROR(0x0211) +#define DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE MAKE_DMHRESULTERROR(0x0213) +#define DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE MAKE_DMHRESULTERROR(0x0214) +#define DMUS_E_SCRIPT_ERROR_IN_SCRIPT MAKE_DMHRESULTERROR(0x0215) +#define DMUS_E_SCRIPT_CANTLOAD_OLEAUT32 MAKE_DMHRESULTERROR(0x0216) +#define DMUS_E_SCRIPT_LOADSCRIPT_ERROR MAKE_DMHRESULTERROR(0x0217) +#define DMUS_E_SCRIPT_INVALID_FILE MAKE_DMHRESULTERROR(0x0218) +#define DMUS_E_INVALID_SCRIPTTRACK MAKE_DMHRESULTERROR(0x0219) +#define DMUS_E_SCRIPT_VARIABLE_NOT_FOUND MAKE_DMHRESULTERROR(0x021A) +#define DMUS_E_SCRIPT_ROUTINE_NOT_FOUND MAKE_DMHRESULTERROR(0x021B) +#define DMUS_E_SCRIPT_CONTENT_READONLY MAKE_DMHRESULTERROR(0x021C) +#define DMUS_E_SCRIPT_NOT_A_REFERENCE MAKE_DMHRESULTERROR(0x021D) +#define DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED MAKE_DMHRESULTERROR(0x021E) +#define DMUS_E_INVALID_SEGMENTTRIGGERTRACK MAKE_DMHRESULTERROR(0x0220) +#define DMUS_E_INVALID_LYRICSTRACK MAKE_DMHRESULTERROR(0x0221) +#define DMUS_E_INVALID_PARAMCONTROLTRACK MAKE_DMHRESULTERROR(0x0222) +#define DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR MAKE_DMHRESULTERROR(0x0223) +#define DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR MAKE_DMHRESULTERROR(0x0224) +#define DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE MAKE_DMHRESULTERROR(0x0225) +#define DMUS_E_AUDIOPATHS_NOT_VALID MAKE_DMHRESULTERROR(0x0226) +#define DMUS_E_AUDIOPATHS_IN_USE MAKE_DMHRESULTERROR(0x0227) +#define DMUS_E_NO_AUDIOPATH_CONFIG MAKE_DMHRESULTERROR(0x0228) +#define DMUS_E_AUDIOPATH_INACTIVE MAKE_DMHRESULTERROR(0x0229) +#define DMUS_E_AUDIOPATH_NOBUFFER MAKE_DMHRESULTERROR(0x022A) +#define DMUS_E_AUDIOPATH_NOPORT MAKE_DMHRESULTERROR(0x022B) +#define DMUS_E_NO_AUDIOPATH MAKE_DMHRESULTERROR(0x022C) +#define DMUS_E_INVALIDCHUNK MAKE_DMHRESULTERROR(0x022D) +#define DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER MAKE_DMHRESULTERROR(0x022E) +#define DMUS_E_INVALID_CONTAINER_OBJECT MAKE_DMHRESULTERROR(0x022F) + +#endif /* __WINE_DMUSIC_ERROR_H */ diff --git a/include/dmusbuff.h b/include/dmusbuff.h new file mode 100644 index 00000000000..1298cfee8a1 --- /dev/null +++ b/include/dmusbuff.h @@ -0,0 +1,45 @@ +/* DirectMusic Buffer Format + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __WINE_DMUSIC_BUFFER_H +#define __WINE_DMUSIC_BUFFER_H + +#include "pshpack4.h" + +/***************************************************************************** + * Definitions + */ +#define DMUS_EVENT_STRUCTURED 0x00000001 +#define QWORD_ALIGN(x) (((x) + 7) & ~7) +#define DMUS_EVENT_SIZE(cb) QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb) + +/***************************************************************************** + * Structures + */ +typedef struct _DMUS_EVENTHEADER +{ + DWORD cbEvent; + DWORD dwChannelGroup; + REFERENCE_TIME rtDelta; + DWORD dwFlags; +} DMUS_EVENTHEADER, *LPDMUS_EVENTHEADER; + +#include "poppack.h" + +#endif /* __WINE_DMUSIC_BUFFER_H */ diff --git a/include/dmusicc.h b/include/dmusicc.h new file mode 100644 index 00000000000..7fd802a8a58 --- /dev/null +++ b/include/dmusicc.h @@ -0,0 +1,709 @@ +/* DirectMusic Core API Stuff + * + * Copyright (C) 2003 Rok Mandeljc + * + * This program 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 Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 Library General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#ifndef __WINE_DMUSIC_CORE_H +#define __WINE_DMUSIC_CORE_H + +#include "objbase.h" + +#include "mmsystem.h" +#include "dsound.h" + +#include "dls1.h" +#include "dmerror.h" +#include "dmdls.h" +#include "dmusbuff.h" + +/*#include "pshpack8.h" */ + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/***************************************************************************** + * Predeclare the interfaces + */ +DEFINE_GUID(CLSID_DirectMusic, 0x636b9f10, 0x0c7d, 0x11d1, 0x95, 0xb2, 0x00, 0x20, 0xaf, 0xdc, 0x74, 0x21); +DEFINE_GUID(CLSID_DirectMusicCollection, 0x480ff4b0, 0x28b2, 0x11d1, 0xbe, 0xf7, 0x0, 0xc0, 0x4f, 0xbf, 0x8f, 0xef); +DEFINE_GUID(CLSID_DirectMusicSynth, 0x58C2B4D0, 0x46E7, 0x11D1, 0x89, 0xAC, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29); + +DEFINE_GUID(IID_IReferenceClock, 0x56a86897,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70); +typedef struct IReferenceClock IReferenceClock, *LPREFERENCECLOCK; +DEFINE_GUID(IID_IDirectMusic, 0x6536115a,0x7b2d,0x11d2,0xba,0x18,0x00,0x00,0xf8,0x75,0xac,0x12); +typedef struct IDirectMusic IDirectMusic, *LPDIRECTMUSIC; +DEFINE_GUID(IID_IDirectMusicBuffer, 0xd2ac2878,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd); +typedef struct IDirectMusicBuffer IDirectMusicBuffer, *LPDIRECTMUSICBUFFER, IDirectMusicBuffer8, *LPDIRECTMUSICBUFFER8; +DEFINE_GUID(IID_IDirectMusicPort, 0x08f2d8c9,0x37c2,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12); +#define IID_IDirectMusicPort8 IID_IDirectMusicPort +typedef struct IDirectMusicPort IDirectMusicPort, *LPDIRECTMUSICPORT, IDirectMusicPort8, *LPDIRECTMUSICPORT8; +DEFINE_GUID(IID_IDirectMusicThru, 0xced153e7,0x3606,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12); +#define IID_IDirectMusicThru8 IID_IDirectMusicThru +typedef struct IDirectMusicThru IDirectMusicThru, *LPDIRECTMUSICTHRU, IDirectMusicThru8, *LPDIRECTMUSICTHRU8; +DEFINE_GUID(IID_IDirectMusicPortDownload, 0xd2ac287a,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd); +typedef struct IDirectMusicPortDownload IDirectMusicPortDownload, *LPDIRECTMUSICPORTDOWNLOAD, IDirectMusicPortDownload8, *LPDIRECTMUSICPORTDOWNLOAD8; +#define IID_IDirectMusicPortDownload8 IID_IDirectMusicPortDownload +DEFINE_GUID(IID_IDirectMusicDownload, 0xd2ac287b,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd); +#define IID_IDirectMusicDownload8 IID_IDirectMusicDownload +typedef struct IDirectMusicDownload IDirectMusicDownload, *LPDIRECTMUSICDOWNLOAD, IDirectMusicDownload8, *LPDIRECTMUSICDOWNLOAD8; +DEFINE_GUID(IID_IDirectMusicCollection, 0xd2ac287c,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd); +#define IID_IDirectMusicCollection8 IID_IDirectMusicCollection +typedef struct IDirectMusicCollection IDirectMusicCollection, *LPDIRECTMUSICCOLLECTION, IDirectMusicCollection8, *LPDIRECTMUSICCOLLECTION8; +DEFINE_GUID(IID_IDirectMusicInstrument, 0xd2ac287d,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd); +#define IID_IDirectMusicInstrument8 IID_IDirectMusicInstrument +typedef struct IDirectMusicInstrument IDirectMusicInstrument, *LPDIRECTMUSICINSTRUMENT, IDirectMusicInstrument8, *LPDIRECTMUSICINSTRUMENT8; +DEFINE_GUID(IID_IDirectMusicDownloadedInstrument, 0xd2ac287e,0xb39b,0x11d1,0x87,0x4,0x0,0x60,0x8,0x93,0xb1,0xbd); +#define IID_IDirectMusicDownloadedInstrument8 IID_IDirectMusicDownloadedInstrument +typedef struct IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument, *LPDIRECTMUSICDOWNLOADEDINSTRUMENT, IDirectMusicDownloadedInstrument8, *LPDIRECTMUSICDOWNLOADEDINSTRUMENT8; +DEFINE_GUID(IID_IDirectMusic2, 0x6fc2cae1,0xbc78,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6); +DEFINE_GUID(IID_IDirectMusic8, 0x2d3629f7,0x813d,0x4939,0x85,0x08,0xf0,0x5c,0x6b,0x75,0xfd,0x97); +typedef struct IDirectMusic8 IDirectMusic8, *LPDIRECTMUSIC8; + +DEFINE_GUID(GUID_DMUS_PROP_GM_Hardware, 0x178f2f24,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); +DEFINE_GUID(GUID_DMUS_PROP_GS_Hardware, 0x178f2f25,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); +DEFINE_GUID(GUID_DMUS_PROP_XG_Hardware, 0x178f2f26,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); +DEFINE_GUID(GUID_DMUS_PROP_XG_Capable, 0x6496aba1,0x61b0,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6); +DEFINE_GUID(GUID_DMUS_PROP_GS_Capable, 0x6496aba2,0x61b0,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6); +DEFINE_GUID(GUID_DMUS_PROP_DLS1, 0x178f2f27,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac,0x12); +DEFINE_GUID(GUID_DMUS_PROP_DLS2, 0xf14599e5,0x4689,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6); +DEFINE_GUID(GUID_DMUS_PROP_INSTRUMENT2, 0x865fd372,0x9f67,0x11d2,0x87,0x2a,0x0,0x60,0x8,0x93,0xb1,0xbd); +DEFINE_GUID(GUID_DMUS_PROP_SynthSink_DSOUND, 0xaa97844,0xc877,0x11d1,0x87,0xc,0x0,0x60,0x8,0x93,0xb1,0xbd); +DEFINE_GUID(GUID_DMUS_PROP_SynthSink_WAVE, 0xaa97845,0xc877,0x11d1,0x87,0xc,0x0,0x60,0x8,0x93,0xb1,0xbd); +DEFINE_GUID(GUID_DMUS_PROP_SampleMemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8,0x75,0xac, 0x12); +DEFINE_GUID(GUID_DMUS_PROP_SamplePlaybackRate, 0x2a91f713,0xa4bf,0x11d2,0xbb,0xdf,0x0,0x60,0x8,0x33,0xdb,0xd8); +DEFINE_GUID(GUID_DMUS_PROP_WriteLatency, 0x268a0fa0,0x60f2,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6); +DEFINE_GUID(GUID_DMUS_PROP_WritePeriod, 0x268a0fa1,0x60f2,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6); +DEFINE_GUID(GUID_DMUS_PROP_MemorySize, 0x178f2f28,0xc364,0x11d1,0xa7,0x60,0x00,0x00,0xf8, 0x75, 0xac, 0x12); +DEFINE_GUID(GUID_DMUS_PROP_WavesReverb, 0x4cb5622,0x32e5,0x11d2,0xaf,0xa6,0x0,0xaa,0x0,0x24,0xd8,0xb6); +DEFINE_GUID(GUID_DMUS_PROP_Effects, 0xcda8d611,0x684a,0x11d2,0x87,0x1e,0x0,0x60,0x8,0x93,0xb1,0xbd); +DEFINE_GUID(GUID_DMUS_PROP_LegacyCaps, 0xcfa7cdc2,0x00a1,0x11d2,0xaa,0xd5,0x00,0x00,0xf8,0x75,0xac,0x12); +DEFINE_GUID(GUID_DMUS_PROP_Volume, 0xfedfae25L,0xe46e,0x11d1,0xaa,0xce,0x00,0x00,0xf8,0x75,0xac,0x12); + +typedef ULONGLONG SAMPLE_TIME, *LPSAMPLE_TIME; +typedef ULONGLONG SAMPLE_POSITION; + +#define DMUS_MAX_DESCRIPTION 128 +#define DMUS_MAX_DRIVER 128 + +typedef struct _DMUS_BUFFERDESC +{ + DWORD dwSize; + DWORD dwFlags; + GUID guidBufferFormat; + DWORD cbBuffer; +} DMUS_BUFFERDESC, *LPDMUS_BUFFERDESC; + +#define DMUS_EFFECT_NONE 0x00000000 +#define DMUS_EFFECT_REVERB 0x00000001 +#define DMUS_EFFECT_CHORUS 0x00000002 +#define DMUS_EFFECT_DELAY 0x00000004 + +#define DMUS_PC_INPUTCLASS (0) +#define DMUS_PC_OUTPUTCLASS (1) + +#define DMUS_PC_DLS (0x00000001) +#define DMUS_PC_EXTERNAL (0x00000002) +#define DMUS_PC_SOFTWARESYNTH (0x00000004) +#define DMUS_PC_MEMORYSIZEFIXED (0x00000008) +#define DMUS_PC_GMINHARDWARE (0x00000010) +#define DMUS_PC_GSINHARDWARE (0x00000020) +#define DMUS_PC_XGINHARDWARE (0x00000040) +#define DMUS_PC_DIRECTSOUND (0x00000080) +#define DMUS_PC_SHAREABLE (0x00000100) +#define DMUS_PC_DLS2 (0x00000200) +#define DMUS_PC_AUDIOPATH (0x00000400) +#define DMUS_PC_WAVE (0x00000800) + +#define DMUS_PC_SYSTEMMEMORY (0x7FFFFFFF) + +typedef struct _DMUS_PORTCAPS +{ + DWORD dwSize; + DWORD dwFlags; + GUID guidPort; + DWORD dwClass; + DWORD dwType; + DWORD dwMemorySize; + DWORD dwMaxChannelGroups; + DWORD dwMaxVoices; + DWORD dwMaxAudioChannels; + DWORD dwEffectFlags; + WCHAR wszDescription[DMUS_MAX_DESCRIPTION]; +} DMUS_PORTCAPS, *LPDMUS_PORTCAPS; + +#define DMUS_PORT_WINMM_DRIVER (0) +#define DMUS_PORT_USER_MODE_SYNTH (1) +#define DMUS_PORT_KERNEL_MODE (2) + +#define DMUS_PORTPARAMS_VOICES 0x00000001 +#define DMUS_PORTPARAMS_CHANNELGROUPS 0x00000002 +#define DMUS_PORTPARAMS_AUDIOCHANNELS 0x00000004 +#define DMUS_PORTPARAMS_SAMPLERATE 0x00000008 +#define DMUS_PORTPARAMS_EFFECTS 0x00000020 +#define DMUS_PORTPARAMS_SHARE 0x00000040 +#define DMUS_PORTPARAMS_FEATURES 0x00000080 + +typedef struct _DMUS_PORTPARAMS +{ + DWORD dwSize; + DWORD dwValidParams; + DWORD dwVoices; + DWORD dwChannelGroups; + DWORD dwAudioChannels; + DWORD dwSampleRate; + DWORD dwEffectFlags; + BOOL fShare; +} DMUS_PORTPARAMS7; + +typedef struct _DMUS_PORTPARAMS8 +{ + DWORD dwSize; + DWORD dwValidParams; + DWORD dwVoices; + DWORD dwChannelGroups; + DWORD dwAudioChannels; + DWORD dwSampleRate; + DWORD dwEffectFlags; + BOOL fShare; + DWORD dwFeatures; +} DMUS_PORTPARAMS8, DMUS_PORTPARAMS, *LPDMUS_PORTPARAMS; + +#define DMUS_PORT_FEATURE_AUDIOPATH 0x00000001 +#define DMUS_PORT_FEATURE_STREAMING 0x00000002 + +typedef struct _DMUS_SYNTHSTATS +{ + DWORD dwSize; + DWORD dwValidStats; + DWORD dwVoices; + DWORD dwTotalCPU; + DWORD dwCPUPerVoice; + DWORD dwLostNotes; + DWORD dwFreeMemory; + long lPeakVolume; +} DMUS_SYNTHSTATS, *LPDMUS_SYNTHSTATS; + +typedef struct _DMUS_SYNTHSTATS8 +{ + DWORD dwSize; + DWORD dwValidStats; + DWORD dwVoices; + DWORD dwTotalCPU; + DWORD dwCPUPerVoice; + DWORD dwLostNotes; + DWORD dwFreeMemory; + long lPeakVolume; + DWORD dwSynthMemUse; +} DMUS_SYNTHSTATS8, *LPDMUS_SYNTHSTATS8; + +#define DMUS_SYNTHSTATS_VOICES 1 +#define DMUS_SYNTHSTATS_TOTAL_CPU 2 +#define DMUS_SYNTHSTATS_CPU_PER_VOICE 4 +#define DMUS_SYNTHSTATS_LOST_NOTES 8 +#define DMUS_SYNTHSTATS_PEAK_VOLUME 16 +#define DMUS_SYNTHSTATS_FREE_MEMORY 32 + +#define DMUS_SYNTHSTATS_SYSTEMMEMORY DMUS_PC_SYSTEMMEMORY + +typedef struct _DMUS_WAVES_REVERB_PARAMS +{ + float fInGain; + float fReverbMix; + float fReverbTime; + float fHighFreqRTRatio; +} DMUS_WAVES_REVERB_PARAMS; + +typedef enum +{ + DMUS_CLOCK_SYSTEM = 0, + DMUS_CLOCK_WAVE = 1 +} DMUS_CLOCKTYPE; + +#define DMUS_CLOCKF_GLOBAL 0x00000001 + +typedef struct _DMUS_CLOCKINFO7 +{ + DWORD dwSize; + DMUS_CLOCKTYPE ctType; + GUID guidClock; + WCHAR wszDescription[DMUS_MAX_DESCRIPTION]; +} DMUS_CLOCKINFO7, *LPDMUS_CLOCKINFO7; + +typedef struct _DMUS_CLOCKINFO8 +{ + DWORD dwSize; + DMUS_CLOCKTYPE ctType; + GUID guidClock; + WCHAR wszDescription[DMUS_MAX_DESCRIPTION]; + DWORD dwFlags; +} DMUS_CLOCKINFO8, *LPDMUS_CLOCKINFO8, DMUS_CLOCKINFO, *LPDMUS_CLOCKINFO; + +#define DSBUSID_FIRST_SPKR_LOC 0 +#define DSBUSID_FRONT_LEFT 0 +#define DSBUSID_LEFT 0 +#define DSBUSID_FRONT_RIGHT 1 +#define DSBUSID_RIGHT 1 +#define DSBUSID_FRONT_CENTER 2 +#define DSBUSID_LOW_FREQUENCY 3 +#define DSBUSID_BACK_LEFT 4 +#define DSBUSID_BACK_RIGHT 5 +#define DSBUSID_FRONT_LEFT_OF_CENTER 6 +#define DSBUSID_FRONT_RIGHT_OF_CENTER 7 +#define DSBUSID_BACK_CENTER 8 +#define DSBUSID_SIDE_LEFT 9 +#define DSBUSID_SIDE_RIGHT 10 +#define DSBUSID_TOP_CENTER 11 +#define DSBUSID_TOP_FRONT_LEFT 12 +#define DSBUSID_TOP_FRONT_CENTER 13 +#define DSBUSID_TOP_FRONT_RIGHT 14 +#define DSBUSID_TOP_BACK_LEFT 15 +#define DSBUSID_TOP_BACK_CENTER 16 +#define DSBUSID_TOP_BACK_RIGHT 17 +#define DSBUSID_LAST_SPKR_LOC 17 +#define DSBUSID_IS_SPKR_LOC(id) ( ((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC) ) +#define DSBUSID_REVERB_SEND 64 +#define DSBUSID_CHORUS_SEND 65 +#define DSBUSID_DYNAMIC_0 512 +#define DSBUSID_NULL 0xFFFFFFFF + + +/***************************************************************************** + * IDirectMusic interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IDirectMusic +#define IDirectMusic_METHODS \ + /*** IDirectMusic methods ***/ \ + ICOM_METHOD2(HRESULT, EnumPort, DWORD,dwIndex, LPDMUS_PORTCAPS,pPortCaps) \ + ICOM_METHOD3(HRESULT, CreateMusicBuffer, LPDMUS_BUFFERDESC,pBufferDesc, LPDIRECTMUSICBUFFER**,ppBuffer, LPUNKNOWN,pUnkOuter) \ + ICOM_METHOD4(HRESULT, CreatePort, REFCLSID,rclsidPort, LPDMUS_PORTPARAMS,pPortParams, LPDIRECTMUSICPORT*,ppPort, LPUNKNOWN,pUnkOuter) \ + ICOM_METHOD2(HRESULT, EnumMasterClock, DWORD,dwIndex, LPDMUS_CLOCKINFO,lpClockInfo) \ + ICOM_METHOD2(HRESULT, GetMasterClock, LPGUID,pguidClock, IReferenceClock**,ppReferenceClock) \ + ICOM_METHOD1(HRESULT, SetMasterClock, REFGUID,rguidClock) \ + ICOM_METHOD1(HRESULT, Activate, BOOL,fEnable) \ + ICOM_METHOD1(HRESULT, GetDefaultPort, LPGUID,pguidPort) \ + ICOM_METHOD2(HRESULT, SetDirectSound, LPDIRECTSOUND,pDirectSound, HWND,hWnd) + + /*** IDirectMusic methods ***/ +#define IDirectMusic_IMETHODS \ + IUnknown_IMETHODS \ + IDirectMusic_METHODS +ICOM_DEFINE(IDirectMusic,IUnknown) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IDirectMusic_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectMusic_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectMusic_Release(p) ICOM_CALL (Release,p) +/*** IDirectMusic methods ***/ +#define IDirectMusic_EnumPort(p,a,b) ICOM_CALL2(EnumPort,p,a,b) +#define IDirectMusic_CreateMusicBuffer(p,a,b,c) ICOM_CALL3(CreateMusicBuffer,p,a,b,c) +#define IDirectMusic_CreatePort(p,a,b,c,d) ICOM_CALL4(CreatePort,p,a,b,c,d) +#define IDirectMusic_EnumMasterClock(p,a,b) ICOM_CALL2(EnumMasterClock,p,a,b) +#define IDirectMusic_GetMasterClock(p,a,b) ICOM_CALL2(GetMasterClock,p,a,b) +#define IDirectMusic_SetMasterClock(p,a) ICOM_CALL1(SetMasterClock,p,a) +#define IDirectMusic_Activate(p,a) ICOM_CALL1(Activate,p,a) +#define IDirectMusic_GetDefaultPort(p,a) ICOM_CALL1(GetDefaultPort,p,a) +#define IDirectMusic_SetDirectSound(p,a,b) ICOM_CALL2(SetDirectSound,p,a,b) + + +/***************************************************************************** + * IDirectMusic8 interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IDirectMusic8 +#define IDirectMusic8_METHODS \ + /*** IDirectMusic8 methods ***/ \ + ICOM_METHOD1(HRESULT, SetExternalMasterClock, IReferenceClock*,pClock) + + /*** IDirectMusic8 methods ***/ +#define IDirectMusic8_IMETHODS \ + IUnknown_IMETHODS \ + IDirectMusic_METHODS \ + IDirectMusic8_METHODS +ICOM_DEFINE(IDirectMusic8,IDirectMusic) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IDirectMusic8_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectMusic8_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectMusic8_Release(p) ICOM_CALL (Release,p) +/*** IDirectMusic methods ***/ +#define IDirectMusic8_EnumPort(p,a,b) ICOM_CALL2(EnumPort,p,a,b) +#define IDirectMusic8_CreateMusicBuffer(p,a,b,c) ICOM_CALL3(CreateMusicBuffer,p,a,b,c) +#define IDirectMusic8_CreatePort(p,a,b,c,d) ICOM_CALL4(CreatePort,p,a,b,c,d) +#define IDirectMusic8_EnumMasterClock(p,a,b) ICOM_CALL2(EnumMasterClock,p,a,b) +#define IDirectMusic8_GetMasterClock(p,a,b) ICOM_CALL2(GetMasterClock,p,a,b) +#define IDirectMusic8_SetMasterClock(p,a) ICOM_CALL1(SetMasterClock,p,a) +#define IDirectMusic8_Activate(p,a) ICOM_CALL1(Activate,p,a) +#define IDirectMusic8_GetDefaultPort(p,a) ICOM_CALL1(GetDefaultPort,p,a) +#define IDirectMusic8_SetDirectSound(p,a,b) ICOM_CALL2(SetDirectSound,p,a,b) +/*** IDirectMusic8 methods ***/ +#define IDirectMusic8_SetExternalMasterClock(p,a) ICOM_CALL1(SetExternalMasterClock,p,a) + + +/***************************************************************************** + * IDirectMusicBuffer interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IDirectMusicBuffer +#define IDirectMusicBuffer_METHODS \ + /*** IDirectMusicBuffer methods ***/ \ + ICOM_METHOD (HRESULT, Flush) \ + ICOM_METHOD1(HRESULT, TotalTime, LPREFERENCE_TIME,prtTime) \ + ICOM_METHOD3(HRESULT, PackStructured, REFERENCE_TIME,rt, DWORD,dwChannelGroup, DWORD,dwChannelMessage) \ + ICOM_METHOD4(HRESULT, PackUnstructured, REFERENCE_TIME,rt, DWORD,dwChannelGroup, DWORD,cb, LPBYTE,lpb) \ + ICOM_METHOD (HRESULT, ResetReadPtr) \ + ICOM_METHOD4(HRESULT, GetNextEvent, LPREFERENCE_TIME,prt, LPDWORD,pdwChannelGroup, LPDWORD,pdwLength, LPBYTE*,ppData) \ + ICOM_METHOD1(HRESULT, GetRawBufferPtr, LPBYTE*,ppData) \ + ICOM_METHOD1(HRESULT, GetStartTime, LPREFERENCE_TIME,prt) \ + ICOM_METHOD1(HRESULT, GetUsedBytes, LPDWORD,pcb) \ + ICOM_METHOD1(HRESULT, GetMaxBytes, LPDWORD,pcb) \ + ICOM_METHOD1(HRESULT, GetBufferFormat, LPGUID,pGuidFormat) \ + ICOM_METHOD1(HRESULT, SetStartTime, REFERENCE_TIME,rt) \ + ICOM_METHOD1(HRESULT, SetUsedBytes, DWORD,cb) + + /*** IDirectMusicBuffer methods ***/ +#define IDirectMusicBuffer_IMETHODS \ + IUnknown_IMETHODS \ + IDirectMusicBuffer_METHODS +ICOM_DEFINE(IDirectMusicBuffer,IUnknown) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IDirectMusicBuffer_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectMusicBuffer_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectMusicBuffer_Release(p) ICOM_CALL (Release,p) +/*** IDirectMusicBuffer methods ***/ +#define IDirectMusicBuffer_Flush(p) ICOM_CALL (Flush,p) +#define IDirectMusicBuffer_TotalTime(p,a) ICOM_CALL1(TotalTime,p,a) +#define IDirectMusicBuffer_PackStructured(p,a,b,c) ICOM_CALL3(PackStructured,p,a,b,c) +#define IDirectMusicBuffer_PackUnstructured(p,a,b,c,d) ICOM_CALL4(PackUnstructured,p,a,b,c,d) +#define IDirectMusicBuffer_ResetReadPtr(p) ICOM_CALL (ResetReadPtr,p) +#define IDirectMusicBuffer_GetNextEvent(p,a,b,c,d) ICOM_CALL4(GetNextEvent,p,a,b,c,d) +#define IDirectMusicBuffer_GetRawBufferPtr(p,a) ICOM_CALL1(GetRawBufferPtr,p,a) +#define IDirectMusicBuffer_GetStartTime(p,a) ICOM_CALL1(GetStartTime,p,a) +#define IDirectMusicBuffer_GetUsedBytes(p,a) ICOM_CALL1(GetUsedBytes,p,a) +#define IDirectMusicBuffer_GetMaxBytes(p,a) ICOM_CALL1(GetMaxBytes,p,a) +#define IDirectMusicBuffer_GetBufferFormat(p,a) ICOM_CALL1(GetBufferFormat,p,a) +#define IDirectMusicBuffer_SetStartTime(p,a) ICOM_CALL1(SetStartTime,p,a) +#define IDirectMusicBuffer_SetUsedBytes(p,a) ICOM_CALL1(SetUsedBytes,p,a) + +/***************************************************************************** + * IDirectMusicInstrument interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IDirectMusicInstrument +#define IDirectMusicInstrument_METHODS \ + /*** IDirectMusicInstrument methods ***/ \ + ICOM_METHOD1(HRESULT, GetPatch, DWORD*,pdwPatch) \ + ICOM_METHOD1(HRESULT, SetPatch, DWORD,dwPatch) + + /*** IDirectMusicInstrument methods ***/ +#define IDirectMusicInstrument_IMETHODS \ + IUnknown_IMETHODS \ + IDirectMusicInstrument_METHODS +ICOM_DEFINE(IDirectMusicInstrument,IUnknown) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IDirectMusicInstrument_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectMusicInstrument_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectMusicInstrument_Release(p) ICOM_CALL (Release,p) +/*** IDirectMusicInstrument methods ***/ +#define IDirectMusicInstrument_GetPatch(p,a) ICOM_CALL1(GetPatch,p,a) +#define IDirectMusicInstrument_SetPatch(p,a) ICOM_CALL1(SetPatch,p,a) + + +/***************************************************************************** + * IDirectMusicDownloadedInstrument interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IDirectMusicDownloadedInstrument +#define IDirectMusicDownloadedInstrument_METHODS \ + /*** IDirectMusicDownloadedInstrument methods ***/ \ + /* none at this time */ + + /*** IDirectMusicDownloadedInstrument methods ***/ +#define IDirectMusicDownloadedInstrument_IMETHODS \ + IUnknown_IMETHODS \ + IDirectMusicDownloadedInstrument_METHODS +ICOM_DEFINE(IDirectMusicDownloadedInstrument,IUnknown) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IDirectMusicDownloadedInstrument_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectMusicDownloadedInstrument_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectMusicDownloadedInstrument_Release(p) ICOM_CALL (Release,p) +/*** IDirectMusicDownloadedInstrument methods ***/ +/* none at this time */ + + +/***************************************************************************** + * IDirectMusicCollection interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IDirectMusicCollection +#define IDirectMusicCollection_METHODS \ + /*** IDirectMusicCollection methods ***/ \ + ICOM_METHOD2(HRESULT, GetInstrument, DWORD,dwPatch, IDirectMusicInstrument**,ppInstrument) \ + ICOM_METHOD4(HRESULT, EnumInstrument, DWORD,dwIndex, DWORD*,pdwPatch, LPWSTR,pwszName, DWORD,dwNameLen) + + /*** IDirectMusicCollection methods ***/ +#define IDirectMusicCollection_IMETHODS \ + IUnknown_IMETHODS \ + IDirectMusicCollection_METHODS +ICOM_DEFINE(IDirectMusicCollection,IUnknown) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IDirectMusicCollection_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectMusicCollection_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectMusicCollection_Release(p) ICOM_CALL (Release,p) +/*** IDirectMusicCollection methods ***/ +#define IDirectMusicCollection_GetInstrument(p,a,b) ICOM_CALL2(GetInstrument,p,a,b) +#define IDirectMusicCollection_EnumInstrument(p,a,b,c) ICOM_CALL3(EnumInstrument,p,a,b,c) + + +/***************************************************************************** + * IDirectMusicDownload interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IDirectMusicDownload +#define IDirectMusicDownload_METHODS \ + /*** IDirectMusicDownload methods ***/ \ + ICOM_METHOD2(HRESULT, GetBuffer, void**,ppvBuffer, DWORD*,pdwSize) + + /*** IDirectMusicDownload methods ***/ +#define IDirectMusicDownload_IMETHODS \ + IUnknown_IMETHODS \ + IDirectMusicDownload_METHODS +ICOM_DEFINE(IDirectMusicDownload,IUnknown) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IDirectMusicDownload_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectMusicDownload_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectMusicDownload_Release(p) ICOM_CALL (Release,p) +/*** IDirectMusicDownload methods ***/ +#define IDirectMusicDownload_GetBuffer(p,a,b) ICOM_CALL2(GetBuffer,p,a,b) + + +/***************************************************************************** + * IDirectMusicPortDownload interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IDirectMusicPortDownload +#define IDirectMusicPortDownload_METHODS \ + /*** IDirectMusicPortDownload methods ***/ \ + ICOM_METHOD2(HRESULT, GetBuffer, DWORD,dwDLId, IDirectMusicDownload**,ppIDMDownload) \ + ICOM_METHOD2(HRESULT, AllocateBuffer, DWORD,dwSize, IDirectMusicDownload**,ppIDMDownload) \ + ICOM_METHOD2(HRESULT, GetDLId, DWORD*,pdwStartDLId, DWORD,dwCount) \ + ICOM_METHOD1(HRESULT, GetAppend, DWORD*,pdwAppend) \ + ICOM_METHOD1(HRESULT, Download, IDirectMusicDownload*,pIDMDownload) \ + ICOM_METHOD1(HRESULT, Unload, IDirectMusicDownload*,pIDMDownload) + + /*** IDirectMusicPortDownload methods ***/ +#define IDirectMusicPortDownload_IMETHODS \ + IUnknown_IMETHODS \ + IDirectMusicPortDownload_METHODS +ICOM_DEFINE(IDirectMusicPortDownload,IUnknown) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IDirectMusicPortDownload_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectMusicPortDownload_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectMusicPortDownload_Release(p) ICOM_CALL (Release,p) +/*** IDirectMusicPortDownload methods ***/ +#define IDirectMusicPortDownload_GetBuffer(p,a,b) ICOM_CALL2(GetBuffer,p,a,b) +#define IDirectMusicPortDownload_AllocateBuffer(p,a,b) ICOM_CALL2(AllocateBuffer,p,a,b) +#define IDirectMusicPortDownload_GetDLId(p,a,b) ICOM_CALL2(GetDLId,p,a,b) +#define IDirectMusicPortDownload_GetAppend(p,a) ICOM_CALL1(GetAppend,p,a) +#define IDirectMusicPortDownload_Download(p,a) ICOM_CALL1(Download,p,a) +#define IDirectMusicPortDownload_Unload(p,a) ICOM_CALL1(GetBuffer,p,a) + + +#ifndef __WINE_DIRECTAUDIO_PRIORITIES_DEFINED +#define __WINE_DIRECTAUDIO_PRIORITIES_DEFINED + +#define DAUD_CRITICAL_VOICE_PRIORITY (0xF0000000) +#define DAUD_HIGH_VOICE_PRIORITY (0xC0000000) +#define DAUD_STANDARD_VOICE_PRIORITY (0x80000000) +#define DAUD_LOW_VOICE_PRIORITY (0x40000000) +#define DAUD_PERSIST_VOICE_PRIORITY (0x10000000) + +#define DAUD_CHAN1_VOICE_PRIORITY_OFFSET (0x0000000E) +#define DAUD_CHAN2_VOICE_PRIORITY_OFFSET (0x0000000D) +#define DAUD_CHAN3_VOICE_PRIORITY_OFFSET (0x0000000C) +#define DAUD_CHAN4_VOICE_PRIORITY_OFFSET (0x0000000B) +#define DAUD_CHAN5_VOICE_PRIORITY_OFFSET (0x0000000A) +#define DAUD_CHAN6_VOICE_PRIORITY_OFFSET (0x00000009) +#define DAUD_CHAN7_VOICE_PRIORITY_OFFSET (0x00000008) +#define DAUD_CHAN8_VOICE_PRIORITY_OFFSET (0x00000007) +#define DAUD_CHAN9_VOICE_PRIORITY_OFFSET (0x00000006) +#define DAUD_CHAN10_VOICE_PRIORITY_OFFSET (0x0000000F) +#define DAUD_CHAN11_VOICE_PRIORITY_OFFSET (0x00000005) +#define DAUD_CHAN12_VOICE_PRIORITY_OFFSET (0x00000004) +#define DAUD_CHAN13_VOICE_PRIORITY_OFFSET (0x00000003) +#define DAUD_CHAN14_VOICE_PRIORITY_OFFSET (0x00000002) +#define DAUD_CHAN15_VOICE_PRIORITY_OFFSET (0x00000001) +#define DAUD_CHAN16_VOICE_PRIORITY_OFFSET (0x00000000) + +#define DAUD_CHAN1_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN1_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN2_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN2_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN3_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN3_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN4_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN4_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN5_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN5_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN6_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN6_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN7_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN7_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN8_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN8_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN9_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN9_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN10_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN10_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN11_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN11_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN12_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN12_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN13_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN13_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN14_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN14_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN15_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN15_VOICE_PRIORITY_OFFSET) +#define DAUD_CHAN16_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN16_VOICE_PRIORITY_OFFSET) + +#endif /* __WINE_DIRECTAUDIO_PRIORITIES_DEFINED */ + + +/***************************************************************************** + * IDirectMusicPort interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IDirectMusicPort +#define IDirectMusicPort_METHODS \ + /*** IDirectMusicPort methods ***/ \ + ICOM_METHOD1(HRESULT, PlayBuffer, LPDIRECTMUSICBUFFER,pBuffer) \ + ICOM_METHOD1(HRESULT, SetReadNotificationHandle, HANDLE,hEvent) \ + ICOM_METHOD1(HRESULT, Read, LPDIRECTMUSICBUFFER,pBuffer) \ + ICOM_METHOD4(HRESULT, DownloadInstrument, IDirectMusicInstrument*,pInstrument, IDirectMusicDownloadedInstrument**,ppDownloadedInstrument, DMUS_NOTERANGE*,pNoteRanges, DWORD,dwNumNoteRanges) \ + ICOM_METHOD1(HRESULT, UnloadInstrument, IDirectMusicDownloadedInstrument*,pDownloadedInstrument) \ + ICOM_METHOD1(HRESULT, GetLatencyClock, IReferenceClock**,ppClock) \ + ICOM_METHOD1(HRESULT, GetRunningStats, LPDMUS_SYNTHSTATS,pStats) \ + ICOM_METHOD1(HRESULT, GetCaps, LPDMUS_PORTCAPS,pPortCaps) \ + ICOM_METHOD7(HRESULT, DeviceIoControl, DWORD,dwIoControlCode, LPVOID,lpInBuffer, DWORD,nInBufferSize, LPVOID,lpOutBuffer, DWORD,nOutBufferSize, LPDWORD,lpBytesReturned, LPOVERLAPPED,lpOverlapped) \ + ICOM_METHOD1(HRESULT, SetNumChannelGroups, DWORD,dwChannelGroups) \ + ICOM_METHOD1(HRESULT, GetNumChannelGroups, LPDWORD,pdwChannelGroups) \ + ICOM_METHOD1(HRESULT, Activate, BOOL,fActive) \ + ICOM_METHOD3(HRESULT, SetChannelPriority, DWORD,dwChannelGroup, DWORD,dwChannel, DWORD,dwPriority) \ + ICOM_METHOD3(HRESULT, GetChannelPriority, DWORD,dwChannelGroup, DWORD,dwChannel, LPDWORD,pdwPriority) \ + ICOM_METHOD2(HRESULT, SetDirectSound, LPDIRECTSOUND,pDirectSound, LPDIRECTSOUNDBUFFER,pDirectSoundBuffer) \ + ICOM_METHOD3(HRESULT, GetFormat, LPWAVEFORMATEX,pWaveFormatEx, LPDWORD,pdwWaveFormatExSize, LPDWORD,pdwBufferSize) + +/*** IDirectMusicPort methods ***/ +#define IDirectMusicPort_IMETHODS \ + IUnknown_IMETHODS \ + IDirectMusicPort_METHODS +ICOM_DEFINE(IDirectMusicPort,IUnknown) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IDirectMusicPort_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectMusicPort_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectMusicPort_Release(p) ICOM_CALL (Release,p) +/*** IDirectMusicPort methods ***/ +#define IDirectMusicPort_PlayBuffer(p,a) ICOM_CALL1(PlayBuffer,p,a) +#define IDirectMusicPort_SetReadNotificationHandle(p,a) ICOM_CALL1(SetReadNotificationHandle,p,a) +#define IDirectMusicPort_Read(p,a) ICOM_CALL1(Read,p,a) +#define IDirectMusicPort_DownloadInstrument(p,a,b,c,d) ICOM_CALL4(DownloadInstrument,p,a,b,c,d) +#define IDirectMusicPort_UnloadInstrument(p,a) ICOM_CALL1(UnloadInstrument,p,a) +#define IDirectMusicPort_GetLatencyClock(p,a) ICOM_CALL1(GetLatencyClock,p,a) +#define IDirectMusicPort_GetRunningStats(p,a) ICOM_CALL1(GetRunningStats,p,a) +#define IDirectMusicPort_GetCaps(p,a) ICOM_CALL1(GetCaps,p,a) +#define IDirectMusicPort_DeviceIoControl(p,a,b,c,d,e,f,g) ICOM_CALL7(DeviceIoControl,p,a,b,c,d,e,f,g) +#define IDirectMusicPort_SetNumChannelGroups(p,a) ICOM_CALL1(SetNumChannelGroups,p,a) +#define IDirectMusicPort_GetNumChannelGroups(p,a) ICOM_CALL1(GetNumChannelGroups,p,a) +#define IDirectMusicPort_Activate(p,a) ICOM_CALL1(Activate,p,a) +#define IDirectMusicPort_SetChannelPriority(p,a,b,c) ICOM_CALL3(SetChannelPriority,p,a,b,c) +#define IDirectMusicPort_GetChannelPriority(p,a,b,c) ICOM_CALL3(GetChannelPriority,p,a,b,c) +#define IDirectMusicPort_SetDirectSound(p,a,b) ICOM_CALL2(SetDirectSound,p,a,b) +#define IDirectMusicPort_GetFormat(p,a,b,c) ICOM_CALL3(GetFormat,p,a,b,c) + + +/***************************************************************************** + * IDirectMusicThru interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IDirectMusicThru +#define IDirectMusicThru_METHODS \ + /*** IDirectMusicThru methods ***/ \ + ICOM_METHOD5(HRESULT, ThruChannel, DWORD,dwSourceChannelGroup, DWORD,dwSourceChannel, DWORD,dwDestinationChannelGroup, DWORD,dwDestinationChannel, LPDIRECTMUSICPORT,pDestinationPort) + +/*** IDirectMusicThru methods ***/ +#define IDirectMusicThru_IMETHODS \ + IUnknown_IMETHODS \ + IDirectMusicThru_METHODS +ICOM_DEFINE(IDirectMusicThru,IUnknown) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IDirectMusicThru_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IDirectMusicThru_AddRef(p) ICOM_CALL (AddRef,p) +#define IDirectMusicThru_Release(p) ICOM_CALL (Release,p) +/*** IDirectMusicThru methods ***/ +#define IDirectMusicThru_ThruChannel(p,a,b,c,d,e) ICOM_CALL5(ThruChannel,p,a,b,c,d,e) + + +/* this one should be defined in dsound.h too, but it's ok if it's here */ +#ifndef __IReferenceClock_INTERFACE_DEFINED__ +#define __IReferenceClock_INTERFACE_DEFINED__ + +/***************************************************************************** + * IReferenceClock interface + */ +#undef ICOM_INTERFACE +#define ICOM_INTERFACE IReferenceClock +#define IReferenceClock_METHODS \ + /*** IReferenceClock methods ***/ \ + ICOM_METHOD1(HRESULT, GetTime, REFERENCE_TIME*,pTime) \ + ICOM_METHOD4(HRESULT, AdviseTime, REFERENCE_TIME,baseTime, REFERENCE_TIME,streamTime, HANDLE,hEvent, DWORD*,pdwAdviseCookie) \ + ICOM_METHOD4(HRESULT, AdvisePeriodic, REFERENCE_TIME,startTime, REFERENCE_TIME,periodTime, HANDLE,hSemaphore, DWORD*,pdwAdviseCookie) \ + ICOM_METHOD1(HRESULT, Unadvise, DWORD,dwAdviseCookie) + + /*** IReferenceClock methods ***/ +#define IReferenceClock_IMETHODS \ + IUnknown_IMETHODS \ + IReferenceClock_METHODS +ICOM_DEFINE(IReferenceClock,IUnknown) +#undef ICOM_INTERFACE + +/*** IUnknown methods ***/ +#define IReferenceClock_QueryInterface(p,a,b) ICOM_CALL2(QueryInterface,p,a,b) +#define IReferenceClock_AddRef(p) ICOM_CALL (AddRef,p) +#define IReferenceClock_Release(p) ICOM_CALL (Release,p) +/*** IReferenceClock methods ***/ +#define IReferenceClock_GetTime(p,a) ICOM_CALL1(GetTime,p,a) +#define IReferenceClock_AdviseTime(p,a,b,c,d) ICOM_CALL4(AdviseTime,p,a,b,c,d) +#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) ICOM_CALL4(AdvisePeriodic,p,a,b,c,d) +#define IReferenceClock_Unadvise(p,a) ICOM_CALL1(Unadvise,p,a) + +#endif /* __IReferenceClock_INTERFACE_DEFINED__ */ + +#define DMUS_VOLUME_MAX 2000 +#define DMUS_VOLUME_MIN -20000 + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +/*#include "poppack.h" */ + +#endif /* __WINE_DMUSIC_CORE_H */ diff --git a/libs/uuid/dxguid.c b/libs/uuid/dxguid.c index 4bbb637c55e..6344e9b9622 100644 --- a/libs/uuid/dxguid.c +++ b/libs/uuid/dxguid.c @@ -33,6 +33,7 @@ #include "d3d.h" #include "ddraw.h" #include "dsound.h" +#include "dmusicc.h" #include "dplay.h" #include "dplobby.h" #include "dinput.h" diff --git a/winedefault.reg b/winedefault.reg index 2eee43d96a9..8b9b9a3dea2 100644 --- a/winedefault.reg +++ b/winedefault.reg @@ -923,6 +923,19 @@ @="ddraw.dll" "ThreadingModel"="Both" +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{636B9F10-0C7D-11D1-95B2-0020AFDC7421}] +@="DirectMusic" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{636B9F10-0C7D-11D1-95B2-0020AFDC7421}\InProcServer32] +@="dmusic.dll" +"ThreadingModel"="Both" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{636B9F10-0C7D-11D1-95B2-0020AFDC7421}\ProgID] +@="Microsoft.DirectMusic.1" + +[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{636B9F10-0C7D-11D1-95B2-0020AFDC7421}\VersionIndependentProgID] +@="Microsoft.DirectMusic" + [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{D1EB6D20-8923-11D0-9D97-00A0C90A43CB}] @="DirectPlay Object" -- 2.11.4.GIT