Added stubs for all dmusic interfaces.

diff --git a/dlls/dmusic/Makefile.in b/dlls/dmusic/Makefile.in
index 7a74c69..8a19601 100644
--- a/dlls/dmusic/Makefile.in
+++ b/dlls/dmusic/Makefile.in
@@ -11,17 +11,16 @@
 
 C_SRCS = \
 	dmusic.c \
-	dmusic8.c \
-	dmusic_buffer.c \
-	dmusic_collection.c \
-	dmusic_dlinstrument.c \
-	dmusic_download.c \
 	dmusic_instrument.c \
+	dmusic_loader.c \
 	dmusic_main.c \
+	dmusic_misc.c \
+	dmusic_performance.c \
+	dmusic_plugins.c \
 	dmusic_port.c \
-	dmusic_portdl.c \
-	dmusic_thru.c \
-	reference_clock.c
+	dmusic_segment.c \
+	dmusic_style.c \
+	dmusic_synth.c
 
 RC_SRCS = version.rc
 
diff --git a/dlls/dmusic/dmusic.c b/dlls/dmusic/dmusic.c
index e6f1e2b..a774df3 100644
--- a/dlls/dmusic/dmusic.c
+++ b/dlls/dmusic/dmusic.c
@@ -1,4 +1,8 @@
 /* IDirectMusic Implementation
+ * IDirectMusic8 Implementation
+ * IDirectMusicDownload Implementation
+ * IDirectMusicBuffer Implementation
+ * IDirectMusicObject Implementation
  *
  * Copyright (C) 2003 Rok Mandeljc
  *
@@ -27,31 +31,6 @@
 
 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)
 {
@@ -177,3 +156,393 @@
 	IDirectMusicImpl_GetDefaultPort,
 	IDirectMusicImpl_SetDirectSound
 };
+
+/* 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;
+}
+
+/* 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;
+}
+
+
+/* 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
+};
+
+
+/* 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
+};
+
+
+/* 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
+};
+
+
+/* IDirectMusicObject IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicObjectImpl_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicObjectImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicObject))
+	{
+		IDirectMusicObjectImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicObjectImpl_AddRef (LPDIRECTMUSICOBJECT iface)
+{
+	ICOM_THIS(IDirectMusicObjectImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicObjectImpl_Release (LPDIRECTMUSICOBJECT iface)
+{
+	ICOM_THIS(IDirectMusicObjectImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicObject Interface follow: */
+HRESULT WINAPI IDirectMusicObjectImpl_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicObjectImpl_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicObjectImpl_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicObject) DirectMusicObject_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicObjectImpl_QueryInterface,
+	IDirectMusicObjectImpl_AddRef,
+	IDirectMusicObjectImpl_Release,
+	IDirectMusicObjectImpl_GetDescriptor,
+	IDirectMusicObjectImpl_SetDescriptor,
+	IDirectMusicObjectImpl_ParseDescriptor
+};
diff --git a/dlls/dmusic/dmusic8.c b/dlls/dmusic/dmusic8.c
deleted file mode 100644
index 443771a..0000000
--- a/dlls/dmusic/dmusic8.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/* 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
deleted file mode 100644
index 45f57ed..0000000
--- a/dlls/dmusic/dmusic_buffer.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/* 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
deleted file mode 100644
index c24453c..0000000
--- a/dlls/dmusic/dmusic_collection.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* 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
deleted file mode 100644
index 60309fd..0000000
--- a/dlls/dmusic/dmusic_dlinstrument.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/* 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
deleted file mode 100644
index bd8b63e..0000000
--- a/dlls/dmusic/dmusic_download.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* 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
index 9a151ac..dcb030f 100644
--- a/dlls/dmusic/dmusic_instrument.c
+++ b/dlls/dmusic/dmusic_instrument.c
@@ -1,4 +1,6 @@
 /* IDirectMusicInstrument Implementation
+ * IDirectMusicDownloadedInstrument Implementation
+ * IDirectMusicCollection Implementation
  *
  * Copyright (C) 2003 Rok Mandeljc
  *
@@ -83,3 +85,107 @@
 	IDirectMusicInstrumentImpl_GetPatch,
 	IDirectMusicInstrumentImpl_SetPatch
 };
+
+
+/* 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
+};
+
+
+/* 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_loader.c b/dlls/dmusic/dmusic_loader.c
new file mode 100644
index 0000000..9b7c3d5
--- /dev/null
+++ b/dlls/dmusic/dmusic_loader.c
@@ -0,0 +1,315 @@
+/* IDirectMusicLoader Implementation
+ * IDirectMusicLoader8 Implementation
+ * IDirectMusicGetLoader 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);
+
+/* IDirectMusicLoader IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicLoaderImpl_QueryInterface (LPDIRECTMUSICLOADER iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicLoaderImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicLoader))
+	{
+		IDirectMusicLoaderImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicLoaderImpl_AddRef (LPDIRECTMUSICLOADER iface)
+{
+	ICOM_THIS(IDirectMusicLoaderImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicLoaderImpl_Release (LPDIRECTMUSICLOADER iface)
+{
+	ICOM_THIS(IDirectMusicLoaderImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicLoader Interface follow: */
+HRESULT WINAPI IDirectMusicLoaderImpl_GetObject (LPDIRECTMUSICLOADER iface, LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID*ppv)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoaderImpl_SetObject (LPDIRECTMUSICLOADER iface, LPDMUS_OBJECTDESC pDesc)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoaderImpl_SetSearchDirectory (LPDIRECTMUSICLOADER iface, REFGUID rguidClass, WCHAR* pwzPath, BOOL fClear)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoaderImpl_ScanDirectory (LPDIRECTMUSICLOADER iface, REFGUID rguidClass, WCHAR* pwzFileExtension, WCHAR* pwzScanFileName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoaderImpl_CacheObject (LPDIRECTMUSICLOADER iface, IDirectMusicObject* pObject)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoaderImpl_ReleaseObject (LPDIRECTMUSICLOADER iface, IDirectMusicObject* pObject)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoaderImpl_ClearCache (LPDIRECTMUSICLOADER iface, REFGUID rguidClass)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoaderImpl_EnableCache (LPDIRECTMUSICLOADER iface, REFGUID rguidClass, BOOL fEnable)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoaderImpl_EnumObject (LPDIRECTMUSICLOADER iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicLoader) DirectMusicLoader_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicLoaderImpl_QueryInterface,
+	IDirectMusicLoaderImpl_AddRef,
+	IDirectMusicLoaderImpl_Release,
+	IDirectMusicLoaderImpl_GetObject,
+	IDirectMusicLoaderImpl_SetObject,
+	IDirectMusicLoaderImpl_SetSearchDirectory,
+	IDirectMusicLoaderImpl_ScanDirectory,
+	IDirectMusicLoaderImpl_CacheObject,
+	IDirectMusicLoaderImpl_ReleaseObject,
+	IDirectMusicLoaderImpl_ClearCache,
+	IDirectMusicLoaderImpl_EnableCache,
+	IDirectMusicLoaderImpl_EnumObject
+};
+
+
+/* IDirectMusicLoader8 IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicLoader8Impl_QueryInterface (LPDIRECTMUSICLOADER8 iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicLoader8Impl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicLoader8))
+	{
+		IDirectMusicLoader8Impl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicLoader8Impl_AddRef (LPDIRECTMUSICLOADER8 iface)
+{
+	ICOM_THIS(IDirectMusicLoader8Impl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicLoader8Impl_Release (LPDIRECTMUSICLOADER8 iface)
+{
+	ICOM_THIS(IDirectMusicLoader8Impl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicLoader Interface part follow: */
+HRESULT WINAPI IDirectMusicLoader8Impl_GetObject (LPDIRECTMUSICLOADER8 iface, LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID*ppv)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoader8Impl_SetObject (LPDIRECTMUSICLOADER8 iface, LPDMUS_OBJECTDESC pDesc)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoader8Impl_SetSearchDirectory (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, WCHAR* pwzPath, BOOL fClear)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoader8Impl_ScanDirectory (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, WCHAR* pwzFileExtension, WCHAR* pwzScanFileName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoader8Impl_CacheObject (LPDIRECTMUSICLOADER8 iface, IDirectMusicObject* pObject)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoader8Impl_ReleaseObject (LPDIRECTMUSICLOADER8 iface, IDirectMusicObject* pObject)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoader8Impl_ClearCache (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoader8Impl_EnableCache (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, BOOL fEnable)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoader8Impl_EnumObject (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+/* IDirectMusicLoader8 Interface part follow: */
+void WINAPI IDirectMusicLoader8Impl_CollectGarbage (LPDIRECTMUSICLOADER8 iface)
+{
+	FIXME("stub\n");
+}
+
+HRESULT WINAPI IDirectMusicLoader8Impl_ReleaseObjectByUnknown (LPDIRECTMUSICLOADER8 iface, IUnknown* pObject)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicLoader8Impl_LoadObjectFromFile (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClassID, REFIID iidInterfaceID, WCHAR* pwzFilePath, void** ppObject)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicLoader8) DirectMusicLoader8_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicLoader8Impl_QueryInterface,
+	IDirectMusicLoader8Impl_AddRef,
+	IDirectMusicLoader8Impl_Release,
+	IDirectMusicLoader8Impl_GetObject,
+	IDirectMusicLoader8Impl_SetObject,
+	IDirectMusicLoader8Impl_SetSearchDirectory,
+	IDirectMusicLoader8Impl_ScanDirectory,
+	IDirectMusicLoader8Impl_CacheObject,
+	IDirectMusicLoader8Impl_ReleaseObject,
+	IDirectMusicLoader8Impl_ClearCache,
+	IDirectMusicLoader8Impl_EnableCache,
+	IDirectMusicLoader8Impl_EnumObject,
+	IDirectMusicLoader8Impl_CollectGarbage,
+	IDirectMusicLoader8Impl_ReleaseObjectByUnknown,
+	IDirectMusicLoader8Impl_LoadObjectFromFile
+};
+
+
+/* IDirectMusicGetLoader IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicGetLoaderImpl_QueryInterface (LPDIRECTMUSICGETLOADER iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicGetLoaderImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicGetLoader))
+	{
+		IDirectMusicGetLoaderImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicGetLoaderImpl_AddRef (LPDIRECTMUSICGETLOADER iface)
+{
+	ICOM_THIS(IDirectMusicGetLoaderImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicGetLoaderImpl_Release (LPDIRECTMUSICGETLOADER iface)
+{
+	ICOM_THIS(IDirectMusicGetLoaderImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicGetLoader Interface follow: */
+HRESULT WINAPI IDirectMusicGetLoaderImpl_GetLoader (LPDIRECTMUSICGETLOADER iface, IDirectMusicLoader** ppLoader)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicGetLoader) DirectMusicGetLoader_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicGetLoaderImpl_QueryInterface,
+	IDirectMusicGetLoaderImpl_AddRef,
+	IDirectMusicGetLoaderImpl_Release,
+	IDirectMusicGetLoaderImpl_GetLoader
+};
diff --git a/dlls/dmusic/dmusic_misc.c b/dlls/dmusic/dmusic_misc.c
new file mode 100644
index 0000000..8ee3a1f
--- /dev/null
+++ b/dlls/dmusic/dmusic_misc.c
@@ -0,0 +1,760 @@
+/* IReferenceClock Implementation
+ * IDirectMusicThru Implementation
+ * IDirectMusicAudioPath Implementation
+ * IDirectMusicBand Implementation
+ * IDirectMusicSong Implementation
+ * IDirectMusicChordMap Implementation
+ * IDirectMusicComposer
+ * IDirectMusicContainer
+ * IDirectMusicGraph
+ * IDirectMusicScript
+ *
+ * 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
+};
+
+
+/* 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
+};
+
+
+/* IDirectMusicAudioPath IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicAudioPathImpl_QueryInterface (LPDIRECTMUSICAUDIOPATH iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicAudioPathImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicAudioPath))
+	{
+		IDirectMusicAudioPathImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicAudioPathImpl_AddRef (LPDIRECTMUSICAUDIOPATH iface)
+{
+	ICOM_THIS(IDirectMusicAudioPathImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicAudioPathImpl_Release (LPDIRECTMUSICAUDIOPATH iface)
+{
+	ICOM_THIS(IDirectMusicAudioPathImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicAudioPath Interface follow: */
+HRESULT WINAPI IDirectMusicAudioPathImpl_GetObjectInPath (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void** ppObject)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_Activate (LPDIRECTMUSICAUDIOPATH iface, BOOL fActivate)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_SetVolume (LPDIRECTMUSICAUDIOPATH iface, long lVolume, DWORD dwDuration)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicAudioPathImpl_ConvertPChannel (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannelIn, DWORD* pdwPChannelOut)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicAudioPath) DirectMusicAudioPath_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicAudioPathImpl_QueryInterface,
+	IDirectMusicAudioPathImpl_AddRef,
+	IDirectMusicAudioPathImpl_Release,
+
+};
+
+
+/* IDirectMusicBand IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicBandImpl_QueryInterface (LPDIRECTMUSICBAND iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicBandImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicBand))
+	{
+		IDirectMusicBandImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicBandImpl_AddRef (LPDIRECTMUSICBAND iface)
+{
+	ICOM_THIS(IDirectMusicBandImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicBandImpl_Release (LPDIRECTMUSICBAND iface)
+{
+	ICOM_THIS(IDirectMusicBandImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicBand Interface follow: */
+HRESULT WINAPI IDirectMusicBandImpl_CreateSegment (LPDIRECTMUSICBAND iface, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicBandImpl_Download (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicBandImpl_Unload (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicBand) DirectMusicBand_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicBandImpl_QueryInterface,
+	IDirectMusicBandImpl_AddRef,
+	IDirectMusicBandImpl_Release,
+	IDirectMusicBandImpl_CreateSegment,
+	IDirectMusicBandImpl_Download,
+	IDirectMusicBandImpl_Unload
+};
+
+
+/* IDirectMusicSong IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicSongImpl_QueryInterface (LPDIRECTMUSICSONG iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicSongImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicSong))
+	{
+		IDirectMusicSongImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicSongImpl_AddRef (LPDIRECTMUSICSONG iface)
+{
+	ICOM_THIS(IDirectMusicSongImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicSongImpl_Release (LPDIRECTMUSICSONG iface)
+{
+	ICOM_THIS(IDirectMusicSongImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicSong Interface follow: */
+HRESULT WINAPI IDirectMusicSongImpl_Compose (LPDIRECTMUSICSONG iface)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSongImpl_GetParam (LPDIRECTMUSICSONG iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSongImpl_GetSegment (LPDIRECTMUSICSONG iface, WCHAR* pwzName, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSongImpl_GetAudioPathConfig (LPDIRECTMUSICSONG iface, IUnknown** ppAudioPathConfig)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSongImpl_Download (LPDIRECTMUSICSONG iface, IUnknown* pAudioPath)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSongImpl_Unload (LPDIRECTMUSICSONG iface, IUnknown* pAudioPath)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSongImpl_EnumSegment (LPDIRECTMUSICSONG iface, DWORD dwIndex, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicSong) DirectMusicSong_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicSongImpl_QueryInterface,
+	IDirectMusicSongImpl_AddRef,
+	IDirectMusicSongImpl_Release,
+	IDirectMusicSongImpl_Compose,
+	IDirectMusicSongImpl_GetParam,
+	IDirectMusicSongImpl_GetSegment,
+	IDirectMusicSongImpl_GetAudioPathConfig,
+	IDirectMusicSongImpl_Download,
+	IDirectMusicSongImpl_Unload,
+	IDirectMusicSongImpl_EnumSegment
+};
+
+
+/* IDirectMusicChordMap IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicChordMapImpl_QueryInterface (LPDIRECTMUSICCHORDMAP iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicChordMapImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicChordMap))
+	{
+		IDirectMusicChordMapImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicChordMapImpl_AddRef (LPDIRECTMUSICCHORDMAP iface)
+{
+	ICOM_THIS(IDirectMusicChordMapImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicChordMapImpl_Release (LPDIRECTMUSICCHORDMAP iface)
+{
+	ICOM_THIS(IDirectMusicChordMapImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicChordMap Interface follow: */
+HRESULT WINAPI IDirectMusicChordMapImpl_GetScale (LPDIRECTMUSICCHORDMAP iface, DWORD* pdwScale)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicChordMap) DirectMusicChordMap_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicChordMapImpl_QueryInterface,
+	IDirectMusicChordMapImpl_AddRef,
+	IDirectMusicChordMapImpl_Release,
+	IDirectMusicChordMapImpl_GetScale
+};
+
+
+/* IDirectMusicComposer IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicComposerImpl_QueryInterface (LPDIRECTMUSICCOMPOSER iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicComposerImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicComposer))
+	{
+		IDirectMusicComposerImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicComposerImpl_AddRef (LPDIRECTMUSICCOMPOSER iface)
+{
+	ICOM_THIS(IDirectMusicComposerImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicComposerImpl_Release (LPDIRECTMUSICCOMPOSER iface)
+{
+	ICOM_THIS(IDirectMusicComposerImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicComposer Interface follow: */
+HRESULT WINAPI IDirectMusicComposerImpl_ComposeSegmentFromTemplate (LPDIRECTMUSICCOMPOSER iface, IDirectMusicStyle* pStyle, IDirectMusicSegment* pTemplate, WORD wActivity, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicComposerImpl_ComposeSegmentFromShape (LPDIRECTMUSICCOMPOSER iface, IDirectMusicStyle* pStyle, WORD wNumMeasures, WORD wShape, WORD wActivity, BOOL fIntro, BOOL fEnd, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicComposerImpl_ComposeTransition (LPDIRECTMUSICCOMPOSER iface, IDirectMusicSegment* pFromSeg, IDirectMusicSegment* pToSeg, MUSIC_TIME mtTime, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppTransSeg)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicComposerImpl_AutoTransition (LPDIRECTMUSICCOMPOSER iface, IDirectMusicPerformance* pPerformance, IDirectMusicSegment* pToSeg, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppTransSeg, IDirectMusicSegmentState** ppToSegState, IDirectMusicSegmentState** ppTransSegState)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicComposerImpl_ComposeTemplateFromShape (LPDIRECTMUSICCOMPOSER iface, WORD wNumMeasures, WORD wShape, BOOL fIntro, BOOL fEnd, WORD wEndLength, IDirectMusicSegment** ppTemplate)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicComposerImpl_ChangeChordMap (LPDIRECTMUSICCOMPOSER iface, IDirectMusicSegment* pSegment, BOOL fTrackScale, IDirectMusicChordMap* pChordMap)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicComposer) DirectMusicComposer_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicComposerImpl_QueryInterface,
+	IDirectMusicComposerImpl_AddRef,
+	IDirectMusicComposerImpl_Release,
+	IDirectMusicComposerImpl_ComposeSegmentFromTemplate,
+	IDirectMusicComposerImpl_ComposeSegmentFromShape,
+	IDirectMusicComposerImpl_ComposeTransition,
+	IDirectMusicComposerImpl_AutoTransition,
+	IDirectMusicComposerImpl_ComposeTemplateFromShape,
+	IDirectMusicComposerImpl_ChangeChordMap
+};
+
+
+/* IDirectMusicContainer IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicContainerImpl_QueryInterface (LPDIRECTMUSICCONTAINER iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicContainerImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicContainer))
+	{
+		IDirectMusicContainerImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicContainerImpl_AddRef (LPDIRECTMUSICCONTAINER iface)
+{
+	ICOM_THIS(IDirectMusicContainerImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicContainerImpl_Release (LPDIRECTMUSICCONTAINER iface)
+{
+	ICOM_THIS(IDirectMusicContainerImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicContainer Interface follow: */
+HRESULT WINAPI IDirectMusicContainerImpl_EnumObject (LPDIRECTMUSICCONTAINER iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR* pwszAlias)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicContainer) DirectMusicContainer_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicContainerImpl_QueryInterface,
+	IDirectMusicContainerImpl_AddRef,
+	IDirectMusicContainerImpl_Release,
+	IDirectMusicContainerImpl_EnumObject
+};
+
+
+/* IDirectMusicGraph IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicGraphImpl_QueryInterface (LPDIRECTMUSICGRAPH iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicGraphImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicGraph))
+	{
+		IDirectMusicGraphImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicGraphImpl_AddRef (LPDIRECTMUSICGRAPH iface)
+{
+	ICOM_THIS(IDirectMusicGraphImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicGraphImpl_Release (LPDIRECTMUSICGRAPH iface)
+{
+	ICOM_THIS(IDirectMusicGraphImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicGraph Interface follow: */
+HRESULT WINAPI IDirectMusicGraphImpl_StampPMsg (LPDIRECTMUSICGRAPH iface, DMUS_PMSG* pPMSG)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_InsertTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool, DWORD* pdwPChannels, DWORD cPChannels, LONG lIndex)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_GetTool (LPDIRECTMUSICGRAPH iface, DWORD dwIndex, IDirectMusicTool** ppTool)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicGraphImpl_RemoveTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicGraph) DirectMusicGraph_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicGraphImpl_QueryInterface,
+	IDirectMusicGraphImpl_AddRef,
+	IDirectMusicGraphImpl_Release,
+	IDirectMusicGraphImpl_StampPMsg,
+	IDirectMusicGraphImpl_InsertTool,
+	IDirectMusicGraphImpl_GetTool,
+	IDirectMusicGraphImpl_RemoveTool
+};
+
+
+/* IDirectMusicScript IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicScriptImpl_QueryInterface (LPDIRECTMUSICSCRIPT iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicScriptImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicScript))
+	{
+		IDirectMusicScriptImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicScriptImpl_AddRef (LPDIRECTMUSICSCRIPT iface)
+{
+	ICOM_THIS(IDirectMusicScriptImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicScriptImpl_Release (LPDIRECTMUSICSCRIPT iface)
+{
+	ICOM_THIS(IDirectMusicScriptImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicScript Interface follow: */
+HRESULT WINAPI IDirectMusicScriptImpl_Init (LPDIRECTMUSICSCRIPT iface, IDirectMusicPerformance* pPerformance, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_CallRoutine (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszRoutineName, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_SetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_GetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT* pvarValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_SetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_GetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG* plValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_SetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, IUnknown* punkValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_GetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, REFIID riid, LPVOID* ppv, DMUS_SCRIPT_ERRORINFO* pErrorInfo)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_EnumRoutine (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicScriptImpl_EnumVariable (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicScript) DirectMusicScript_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicScriptImpl_QueryInterface,
+	IDirectMusicScriptImpl_AddRef,
+	IDirectMusicScriptImpl_Release,
+	IDirectMusicScriptImpl_Init,
+	IDirectMusicScriptImpl_CallRoutine,
+	IDirectMusicScriptImpl_SetVariableVariant,
+	IDirectMusicScriptImpl_GetVariableVariant,
+	IDirectMusicScriptImpl_SetVariableNumber,
+	IDirectMusicScriptImpl_GetVariableNumber,
+	IDirectMusicScriptImpl_SetVariableObject,
+	IDirectMusicScriptImpl_GetVariableObject,
+	IDirectMusicScriptImpl_EnumRoutine,
+	IDirectMusicScriptImpl_EnumVariable
+};
diff --git a/dlls/dmusic/dmusic_performance.c b/dlls/dmusic/dmusic_performance.c
new file mode 100644
index 0000000..76575a4
--- /dev/null
+++ b/dlls/dmusic/dmusic_performance.c
@@ -0,0 +1,754 @@
+/* IDirectMusicPerformance Implementation
+ * IDirectMusicPerformance8 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);
+
+/* IDirectMusicPerformance IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicPerformanceImpl_QueryInterface (LPDIRECTMUSICPERFORMANCE iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicPerformanceImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicPerformance))
+	{
+		IDirectMusicPerformanceImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicPerformanceImpl_AddRef (LPDIRECTMUSICPERFORMANCE iface)
+{
+	ICOM_THIS(IDirectMusicPerformanceImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicPerformanceImpl_Release (LPDIRECTMUSICPERFORMANCE iface)
+{
+	ICOM_THIS(IDirectMusicPerformanceImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicPerformance Interface follow: */
+HRESULT WINAPI IDirectMusicPerformanceImpl_Init (LPDIRECTMUSICPERFORMANCE iface, IDirectMusic** ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_PlaySegment (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicSegment* pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState** ppSegmentState)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_Stop (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetSegmentState (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicSegmentState** ppSegmentState, MUSIC_TIME mtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_SetPrepareTime (LPDIRECTMUSICPERFORMANCE iface, DWORD dwMilliSeconds)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetPrepareTime (LPDIRECTMUSICPERFORMANCE iface, DWORD* pdwMilliSeconds)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_SetBumperLength (LPDIRECTMUSICPERFORMANCE iface, DWORD dwMilliSeconds)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetBumperLength (LPDIRECTMUSICPERFORMANCE iface, DWORD* pdwMilliSeconds)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_SendPMsg (LPDIRECTMUSICPERFORMANCE iface, DMUS_PMSG* pPMSG)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_MusicToReferenceTime (LPDIRECTMUSICPERFORMANCE iface, MUSIC_TIME mtTime, REFERENCE_TIME* prtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_ReferenceToMusicTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME rtTime, MUSIC_TIME* pmtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_IsPlaying (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegState)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME* prtNow, MUSIC_TIME* pmtNow)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_AllocPMsg (LPDIRECTMUSICPERFORMANCE iface, ULONG cb, DMUS_PMSG** ppPMSG)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_FreePMsg (LPDIRECTMUSICPERFORMANCE iface, DMUS_PMSG* pPMSG)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetGraph (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicGraph** ppGraph)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_SetGraph (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicGraph* pGraph)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_SetNotificationHandle (LPDIRECTMUSICPERFORMANCE iface, HANDLE hNotification, REFERENCE_TIME rtMinimum)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetNotificationPMsg (LPDIRECTMUSICPERFORMANCE iface, DMUS_NOTIFICATION_PMSG** ppNotificationPMsg)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_AddNotificationType (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_RemoveNotificationType (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_AddPort (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicPort* pPort)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_RemovePort (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicPort* pPort)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_AssignPChannelBlock (LPDIRECTMUSICPERFORMANCE iface, DWORD dwBlockNum, IDirectMusicPort* pPort, DWORD dwGroup)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_AssignPChannel (LPDIRECTMUSICPERFORMANCE iface, DWORD dwPChannel, IDirectMusicPort* pPort, DWORD dwGroup, DWORD dwMChannel)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_PChannelInfo (LPDIRECTMUSICPERFORMANCE iface, DWORD dwPChannel, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_DownloadInstrument (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicInstrument* pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument** ppDownInst, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_Invalidate (LPDIRECTMUSICPERFORMANCE iface, MUSIC_TIME mtTime, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetParam (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_SetParam (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetGlobalParam (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidType, void* pParam, DWORD dwSize)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_SetGlobalParam (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidType, void* pParam, DWORD dwSize)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetLatencyTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME* prtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetQueueTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME* prtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_AdjustTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME rtAmount)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_CloseDown (LPDIRECTMUSICPERFORMANCE iface)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_GetResolvedTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME rtTime, REFERENCE_TIME* prtResolved, DWORD dwTimeResolveFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_MIDIToMusic (LPDIRECTMUSICPERFORMANCE iface, BYTE bMIDIValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, WORD* pwMusicValue)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_MusicToMIDI (LPDIRECTMUSICPERFORMANCE iface, WORD wMusicValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE* pbMIDIValue)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_TimeToRhythm (LPDIRECTMUSICPERFORMANCE iface, MUSIC_TIME mtTime, DMUS_TIMESIGNATURE* pTimeSig, WORD* pwMeasure, BYTE* pbBeat, BYTE* pbGrid, short* pnOffset)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformanceImpl_RhythmToTime (LPDIRECTMUSICPERFORMANCE iface, WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE* pTimeSig, MUSIC_TIME* pmtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicPerformance) DirectMusicPerformance_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicPerformanceImpl_QueryInterface,
+	IDirectMusicPerformanceImpl_AddRef,
+	IDirectMusicPerformanceImpl_Release,
+	IDirectMusicPerformanceImpl_Init,
+	IDirectMusicPerformanceImpl_PlaySegment,
+	IDirectMusicPerformanceImpl_Stop,
+	IDirectMusicPerformanceImpl_GetSegmentState,
+	IDirectMusicPerformanceImpl_SetPrepareTime,
+	IDirectMusicPerformanceImpl_GetPrepareTime,
+	IDirectMusicPerformanceImpl_SetBumperLength,
+	IDirectMusicPerformanceImpl_GetBumperLength,
+	IDirectMusicPerformanceImpl_SendPMsg,
+	IDirectMusicPerformanceImpl_MusicToReferenceTime,
+	IDirectMusicPerformanceImpl_ReferenceToMusicTime,
+	IDirectMusicPerformanceImpl_IsPlaying,
+	IDirectMusicPerformanceImpl_GetTime,
+	IDirectMusicPerformanceImpl_AllocPMsg,
+	IDirectMusicPerformanceImpl_FreePMsg,
+	IDirectMusicPerformanceImpl_GetGraph,
+	IDirectMusicPerformanceImpl_SetGraph,
+	IDirectMusicPerformanceImpl_SetNotificationHandle,
+	IDirectMusicPerformanceImpl_GetNotificationPMsg,
+	IDirectMusicPerformanceImpl_AddNotificationType,
+	IDirectMusicPerformanceImpl_RemoveNotificationType,
+	IDirectMusicPerformanceImpl_AddPort,
+	IDirectMusicPerformanceImpl_RemovePort,
+	IDirectMusicPerformanceImpl_AssignPChannelBlock,
+	IDirectMusicPerformanceImpl_AssignPChannel,
+	IDirectMusicPerformanceImpl_PChannelInfo,
+	IDirectMusicPerformanceImpl_DownloadInstrument,
+	IDirectMusicPerformanceImpl_Invalidate,
+	IDirectMusicPerformanceImpl_GetParam,
+	IDirectMusicPerformanceImpl_SetParam,
+	IDirectMusicPerformanceImpl_GetGlobalParam,
+	IDirectMusicPerformanceImpl_SetGlobalParam,
+	IDirectMusicPerformanceImpl_GetLatencyTime,
+	IDirectMusicPerformanceImpl_GetQueueTime,
+	IDirectMusicPerformanceImpl_AdjustTime,
+	IDirectMusicPerformanceImpl_CloseDown,
+	IDirectMusicPerformanceImpl_GetResolvedTime,
+	IDirectMusicPerformanceImpl_MIDIToMusic,
+	IDirectMusicPerformanceImpl_MusicToMIDI,
+	IDirectMusicPerformanceImpl_TimeToRhythm,
+	IDirectMusicPerformanceImpl_RhythmToTime
+};
+
+
+/* IDirectMusicPerformance8 IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicPerformance8Impl_QueryInterface (LPDIRECTMUSICPERFORMANCE8 iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicPerformance8Impl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicPerformance8))
+	{
+		IDirectMusicPerformance8Impl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicPerformance8Impl_AddRef (LPDIRECTMUSICPERFORMANCE8 iface)
+{
+	ICOM_THIS(IDirectMusicPerformance8Impl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicPerformance8Impl_Release (LPDIRECTMUSICPERFORMANCE8 iface)
+{
+	ICOM_THIS(IDirectMusicPerformance8Impl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicPerformance Interface part follow: */
+HRESULT WINAPI IDirectMusicPerformance8Impl_Init (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusic** ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_PlaySegment (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState** ppSegmentState)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_Stop (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetSegmentState (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegmentState** ppSegmentState, MUSIC_TIME mtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetPrepareTime (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwMilliSeconds)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetPrepareTime (LPDIRECTMUSICPERFORMANCE8 iface, DWORD* pdwMilliSeconds)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetBumperLength (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwMilliSeconds)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetBumperLength (LPDIRECTMUSICPERFORMANCE8 iface, DWORD* pdwMilliSeconds)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_SendPMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pPMSG)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_MusicToReferenceTime (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, REFERENCE_TIME* prtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_ReferenceToMusicTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtTime, MUSIC_TIME* pmtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_IsPlaying (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegState)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtNow, MUSIC_TIME* pmtNow)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_AllocPMsg (LPDIRECTMUSICPERFORMANCE8 iface, ULONG cb, DMUS_PMSG** ppPMSG)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_FreePMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pPMSG)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetGraph (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicGraph** ppGraph)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetGraph (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicGraph* pGraph)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetNotificationHandle (LPDIRECTMUSICPERFORMANCE8 iface, HANDLE hNotification, REFERENCE_TIME rtMinimum)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetNotificationPMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_NOTIFICATION_PMSG** ppNotificationPMsg)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_AddNotificationType (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_RemoveNotificationType (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_AddPort (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicPort* pPort)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_RemovePort (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicPort* pPort)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_AssignPChannelBlock (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwBlockNum, IDirectMusicPort* pPort, DWORD dwGroup)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_AssignPChannel (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwPChannel, IDirectMusicPort* pPort, DWORD dwGroup, DWORD dwMChannel)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_PChannelInfo (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwPChannel, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_DownloadInstrument (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicInstrument* pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument** ppDownInst, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_Invalidate (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetGlobalParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, void* pParam, DWORD dwSize)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_SetGlobalParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, void* pParam, DWORD dwSize)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetLatencyTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetQueueTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_AdjustTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtAmount)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_CloseDown (LPDIRECTMUSICPERFORMANCE8 iface)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_GetResolvedTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtTime, REFERENCE_TIME* prtResolved, DWORD dwTimeResolveFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_MIDIToMusic (LPDIRECTMUSICPERFORMANCE8 iface, BYTE bMIDIValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, WORD* pwMusicValue)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_MusicToMIDI (LPDIRECTMUSICPERFORMANCE8 iface, WORD wMusicValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE* pbMIDIValue)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_TimeToRhythm (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, DMUS_TIMESIGNATURE* pTimeSig, WORD* pwMeasure, BYTE* pbBeat, BYTE* pbGrid, short* pnOffset)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8Impl_RhythmToTime (LPDIRECTMUSICPERFORMANCE8 iface, WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE* pTimeSig, MUSIC_TIME* pmtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+/* IDirectMusicPerformance8 Interface part follow: */
+HRESULT WINAPI IDirectMusicPerformance8ImplInitAudio (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusic** ppDirectMusic, IDirectSound** ppDirectSound, HWND hWnd, DWORD dwDefaultPathType, DWORD dwPChannelCount, DWORD dwFlags, DMUS_AUDIOPARAMS* pParams)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8ImplPlaySegmentEx (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pSource, WCHAR* pwzSegmentName, IUnknown* pTransition, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState** ppSegmentState, IUnknown* pFrom, IUnknown* pAudioPath)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8ImplStopEx (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pObjectToStop, __int64 i64StopTime, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8ImplClonePMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pSourcePMSG, DMUS_PMSG** ppCopyPMSG)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8ImplCreateAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pSourceConfig, BOOL fActivate, IDirectMusicAudioPath** ppNewPath)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8ImplCreateStandardAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwType, DWORD dwPChannelCount, BOOL fActivate, IDirectMusicAudioPath** ppNewPath)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8ImplSetDefaultAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicAudioPath* pAudioPath)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8ImplGetDefaultAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicAudioPath** ppAudioPath)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPerformance8ImplGetParamEx (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwTrackID, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicPerformance8) DirectMusicPerformance8_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicPerformance8Impl_QueryInterface,
+	IDirectMusicPerformance8Impl_AddRef,
+	IDirectMusicPerformance8Impl_Release,
+	IDirectMusicPerformance8Impl_Init,
+	IDirectMusicPerformance8Impl_PlaySegment,
+	IDirectMusicPerformance8Impl_Stop,
+	IDirectMusicPerformance8Impl_GetSegmentState,
+	IDirectMusicPerformance8Impl_SetPrepareTime,
+	IDirectMusicPerformance8Impl_GetPrepareTime,
+	IDirectMusicPerformance8Impl_SetBumperLength,
+	IDirectMusicPerformance8Impl_GetBumperLength,
+	IDirectMusicPerformance8Impl_SendPMsg,
+	IDirectMusicPerformance8Impl_MusicToReferenceTime,
+	IDirectMusicPerformance8Impl_ReferenceToMusicTime,
+	IDirectMusicPerformance8Impl_IsPlaying,
+	IDirectMusicPerformance8Impl_GetTime,
+	IDirectMusicPerformance8Impl_AllocPMsg,
+	IDirectMusicPerformance8Impl_FreePMsg,
+	IDirectMusicPerformance8Impl_GetGraph,
+	IDirectMusicPerformance8Impl_SetGraph,
+	IDirectMusicPerformance8Impl_SetNotificationHandle,
+	IDirectMusicPerformance8Impl_GetNotificationPMsg,
+	IDirectMusicPerformance8Impl_AddNotificationType,
+	IDirectMusicPerformance8Impl_RemoveNotificationType,
+	IDirectMusicPerformance8Impl_AddPort,
+	IDirectMusicPerformance8Impl_RemovePort,
+	IDirectMusicPerformance8Impl_AssignPChannelBlock,
+	IDirectMusicPerformance8Impl_AssignPChannel,
+	IDirectMusicPerformance8Impl_PChannelInfo,
+	IDirectMusicPerformance8Impl_DownloadInstrument,
+	IDirectMusicPerformance8Impl_Invalidate,
+	IDirectMusicPerformance8Impl_GetParam,
+	IDirectMusicPerformance8Impl_SetParam,
+	IDirectMusicPerformance8Impl_GetGlobalParam,
+	IDirectMusicPerformance8Impl_SetGlobalParam,
+	IDirectMusicPerformance8Impl_GetLatencyTime,
+	IDirectMusicPerformance8Impl_GetQueueTime,
+	IDirectMusicPerformance8Impl_AdjustTime,
+	IDirectMusicPerformance8Impl_CloseDown,
+	IDirectMusicPerformance8Impl_GetResolvedTime,
+	IDirectMusicPerformance8Impl_MIDIToMusic,
+	IDirectMusicPerformance8Impl_MusicToMIDI,
+	IDirectMusicPerformance8Impl_TimeToRhythm,
+	IDirectMusicPerformance8Impl_RhythmToTime,
+	IDirectMusicPerformance8ImplInitAudio,
+	IDirectMusicPerformance8ImplPlaySegmentEx,
+	IDirectMusicPerformance8ImplStopEx,
+	IDirectMusicPerformance8ImplClonePMsg,
+	IDirectMusicPerformance8ImplCreateAudioPath,
+	IDirectMusicPerformance8ImplCreateStandardAudioPath,
+	IDirectMusicPerformance8ImplSetDefaultAudioPath,
+	IDirectMusicPerformance8ImplGetDefaultAudioPath,
+	IDirectMusicPerformance8ImplGetParamEx
+};
diff --git a/dlls/dmusic/dmusic_plugins.c b/dlls/dmusic/dmusic_plugins.c
new file mode 100644
index 0000000..d022c51
--- /dev/null
+++ b/dlls/dmusic/dmusic_plugins.c
@@ -0,0 +1,471 @@
+/* IDirectMusicTool Implementation
+ * IDirectMusicTool8 Implementation
+ * IDirectMusicTrack Implementation
+ * IDirectMusicTrack8 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);
+
+/* IDirectMusicTool IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicToolImpl_QueryInterface (LPDIRECTMUSICTOOL iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicToolImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicTool))
+	{
+		IDirectMusicToolImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicToolImpl_AddRef (LPDIRECTMUSICTOOL iface)
+{
+	ICOM_THIS(IDirectMusicToolImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicToolImpl_Release (LPDIRECTMUSICTOOL iface)
+{
+	ICOM_THIS(IDirectMusicToolImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicTool Interface follow: */
+HRESULT WINAPI IDirectMusicToolImpl_Init (LPDIRECTMUSICTOOL iface, IDirectMusicGraph* pGraph)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicToolImpl_GetMsgDeliveryType (LPDIRECTMUSICTOOL iface, DWORD* pdwDeliveryType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicToolImpl_GetMediaTypeArraySize (LPDIRECTMUSICTOOL iface, DWORD* pdwNumElements)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicToolImpl_GetMediaTypes (LPDIRECTMUSICTOOL iface, DWORD** padwMediaTypes, DWORD dwNumElements)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicToolImpl_ProcessPMsg (LPDIRECTMUSICTOOL iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicToolImpl_Flush (LPDIRECTMUSICTOOL iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG, REFERENCE_TIME rtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicTool) DirectMusicTool_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicToolImpl_QueryInterface,
+	IDirectMusicToolImpl_AddRef,
+	IDirectMusicToolImpl_Release,
+	IDirectMusicToolImpl_Init,
+	IDirectMusicToolImpl_GetMsgDeliveryType,
+	IDirectMusicToolImpl_GetMediaTypeArraySize,
+	IDirectMusicToolImpl_GetMediaTypes,
+	IDirectMusicToolImpl_ProcessPMsg,
+	IDirectMusicToolImpl_Flush
+};
+
+
+/* IDirectMusicTool8 IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicTool8Impl_QueryInterface (LPDIRECTMUSICTOOL8 iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicTool8Impl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicTool8))
+	{
+		IDirectMusicTool8Impl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicTool8Impl_AddRef (LPDIRECTMUSICTOOL8 iface)
+{
+	ICOM_THIS(IDirectMusicTool8Impl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicTool8Impl_Release (LPDIRECTMUSICTOOL8 iface)
+{
+	ICOM_THIS(IDirectMusicTool8Impl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicTool8 Interface follow: */
+HRESULT WINAPI IDirectMusicTool8Impl_Init (LPDIRECTMUSICTOOL8 iface, IDirectMusicGraph* pGraph)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTool8Impl_GetMsgDeliveryType (LPDIRECTMUSICTOOL8 iface, DWORD* pdwDeliveryType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTool8Impl_GetMediaTypeArraySize (LPDIRECTMUSICTOOL8 iface, DWORD* pdwNumElements)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTool8Impl_GetMediaTypes (LPDIRECTMUSICTOOL8 iface, DWORD** padwMediaTypes, DWORD dwNumElements)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTool8Impl_ProcessPMsg (LPDIRECTMUSICTOOL8 iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTool8Impl_Flush (LPDIRECTMUSICTOOL8 iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG, REFERENCE_TIME rtTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTool8Impl_Clone (LPDIRECTMUSICTOOL8 iface, IDirectMusicTool** ppTool)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicTool8) DirectMusicTool8_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicTool8Impl_QueryInterface,
+	IDirectMusicTool8Impl_AddRef,
+	IDirectMusicTool8Impl_Release,
+	IDirectMusicTool8Impl_Init,
+	IDirectMusicTool8Impl_GetMsgDeliveryType,
+	IDirectMusicTool8Impl_GetMediaTypeArraySize,
+	IDirectMusicTool8Impl_GetMediaTypes,
+	IDirectMusicTool8Impl_ProcessPMsg,
+	IDirectMusicTool8Impl_Flush,
+	IDirectMusicTool8Impl_Clone
+};
+
+
+/* IDirectMusicTrack IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicTrackImpl_QueryInterface (LPDIRECTMUSICTRACK iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicTrackImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicTrack))
+	{
+		IDirectMusicTrackImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicTrackImpl_AddRef (LPDIRECTMUSICTRACK iface)
+{
+	ICOM_THIS(IDirectMusicTrackImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicTrackImpl_Release (LPDIRECTMUSICTRACK iface)
+{
+	ICOM_THIS(IDirectMusicTrackImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+/* IDirectMusicTrack Interface follow: */
+HRESULT WINAPI IDirectMusicTrackImpl_Init (LPDIRECTMUSICTRACK iface, IDirectMusicSegment* pSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrackImpl_InitPlay (LPDIRECTMUSICTRACK iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrackImpl_EndPlay (LPDIRECTMUSICTRACK iface, void* pStateData)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrackImpl_Play (LPDIRECTMUSICTRACK iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrackImpl_GetParam (LPDIRECTMUSICTRACK iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrackImpl_SetParam (LPDIRECTMUSICTRACK iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrackImpl_IsParamSupported (LPDIRECTMUSICTRACK iface, REFGUID rguidType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrackImpl_AddNotificationType (LPDIRECTMUSICTRACK iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrackImpl_RemoveNotificationType (LPDIRECTMUSICTRACK iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrackImpl_Clone (LPDIRECTMUSICTRACK iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicTrack) DirectMusicTrack_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicTrackImpl_QueryInterface,
+	IDirectMusicTrackImpl_AddRef,
+	IDirectMusicTrackImpl_Release,
+	IDirectMusicTrackImpl_Init,
+	IDirectMusicTrackImpl_InitPlay,
+	IDirectMusicTrackImpl_EndPlay,
+	IDirectMusicTrackImpl_Play,
+	IDirectMusicTrackImpl_GetParam,
+	IDirectMusicTrackImpl_SetParam,
+	IDirectMusicTrackImpl_IsParamSupported,
+	IDirectMusicTrackImpl_AddNotificationType,
+	IDirectMusicTrackImpl_RemoveNotificationType,
+	IDirectMusicTrackImpl_Clone
+};
+
+/* IDirectMusicTrack8 IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicTrack8Impl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicTrack8))
+	{
+		IDirectMusicTrack8Impl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicTrack8Impl_AddRef (LPDIRECTMUSICTRACK8 iface)
+{
+	ICOM_THIS(IDirectMusicTrack8Impl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicTrack8Impl_Release (LPDIRECTMUSICTRACK8 iface)
+{
+	ICOM_THIS(IDirectMusicTrack8Impl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+/* IDirectMusicTrack Interface part follow: */
+HRESULT WINAPI IDirectMusicTrack8Impl_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrack8ID, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+/* IDirectMusicTrack8 Interface part follow: */
+
+HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicTrack8Impl_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicTrack8) DirectMusicTrack8_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicTrack8Impl_QueryInterface,
+	IDirectMusicTrack8Impl_AddRef,
+	IDirectMusicTrack8Impl_Release,
+	IDirectMusicTrack8Impl_Init,
+	IDirectMusicTrack8Impl_InitPlay,
+	IDirectMusicTrack8Impl_EndPlay,
+	IDirectMusicTrack8Impl_Play,
+	IDirectMusicTrack8Impl_GetParam,
+	IDirectMusicTrack8Impl_SetParam,
+	IDirectMusicTrack8Impl_IsParamSupported,
+	IDirectMusicTrack8Impl_AddNotificationType,
+	IDirectMusicTrack8Impl_RemoveNotificationType,
+	IDirectMusicTrack8Impl_Clone,
+	IDirectMusicTrack8Impl_PlayEx,
+	IDirectMusicTrack8Impl_GetParamEx,
+	IDirectMusicTrack8Impl_SetParamEx,
+	IDirectMusicTrack8Impl_Compose,
+	IDirectMusicTrack8Impl_Join
+};
diff --git a/dlls/dmusic/dmusic_port.c b/dlls/dmusic/dmusic_port.c
index a22f6bd..66ed940 100644
--- a/dlls/dmusic/dmusic_port.c
+++ b/dlls/dmusic/dmusic_port.c
@@ -1,4 +1,5 @@
 /* IDirectMusicPort Implementation
+ * IDirectMusicPortDownloadImpl Implementation
  *
  * Copyright (C) 2003 Rok Mandeljc
  *
@@ -181,3 +182,89 @@
 	IDirectMusicPortImpl_SetDirectSound,
 	IDirectMusicPortImpl_GetFormat
 };
+
+
+/* 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_portdl.c b/dlls/dmusic/dmusic_portdl.c
deleted file mode 100644
index e526130..0000000
--- a/dlls/dmusic/dmusic_portdl.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/* 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
index a2ef841..74619d1 100644
--- a/dlls/dmusic/dmusic_private.h
+++ b/dlls/dmusic/dmusic_private.h
@@ -26,6 +26,10 @@
 #include "winbase.h"
 #include "winnt.h"
 #include "dmusicc.h"
+#include "dmusici.h"
+#include "dmusics.h"
+#include "dmplugin.h"
+#include "dmusicf.h"
 #include "dsound.h"
 
 /*****************************************************************************
@@ -43,6 +47,37 @@
 typedef struct IDirectMusicThruImpl IDirectMusicThruImpl;
 typedef struct IReferenceClockImpl IReferenceClockImpl;
 
+typedef struct IDirectMusicSynthImpl IDirectMusicSynthImpl;
+typedef struct IDirectMusicSynth8Impl IDirectMusicSynth8Impl;
+typedef struct IDirectMusicSynthSinkImpl IDirectMusicSynthSinkImpl;
+
+typedef struct IDirectMusicToolImpl IDirectMusicToolImpl;
+typedef struct IDirectMusicTool8Impl IDirectMusicTool8Impl;
+typedef struct IDirectMusicTrackImpl IDirectMusicTrackImpl;
+typedef struct IDirectMusicTrack8Impl IDirectMusicTrack8Impl;
+
+typedef struct IDirectMusicBandImpl IDirectMusicBandImpl;
+typedef struct IDirectMusicObjectImpl IDirectMusicObjectImpl;
+typedef struct IDirectMusicLoaderImpl IDirectMusicLoaderImpl;
+typedef struct IDirectMusicLoader8Impl IDirectMusicLoader8Impl;
+typedef struct IDirectMusicGetLoaderImpl IDirectMusicGetLoaderImpl;
+typedef struct IDirectMusicSegmentImpl IDirectMusicSegmentImpl;
+typedef struct IDirectMusicSegment8Impl IDirectMusicSegment8Impl;
+typedef struct IDirectMusicSegmentStateImpl IDirectMusicSegmentStateImpl;
+typedef struct IDirectMusicSegmentState8Impl IDirectMusicSegmentState8Impl;
+typedef struct IDirectMusicAudioPathImpl IDirectMusicAudioPathImpl;
+typedef struct IDirectMusicPerformanceImpl IDirectMusicPerformanceImpl;
+typedef struct IDirectMusicPerformance8Impl IDirectMusicPerformance8Impl;
+typedef struct IDirectMusicGraphImpl IDirectMusicGraphImpl;
+typedef struct IDirectMusicStyleImpl IDirectMusicStyleImpl;
+typedef struct IDirectMusicStyle8Impl IDirectMusicStyle8Impl;
+typedef struct IDirectMusicChordMapImpl IDirectMusicChordMapImpl;
+typedef struct IDirectMusicComposerImpl IDirectMusicComposerImpl;
+typedef struct IDirectMusicPatternTrackImpl IDirectMusicPatternTrackImpl;
+typedef struct IDirectMusicScriptImpl IDirectMusicScriptImpl;
+typedef struct IDirectMusicContainerImpl IDirectMusicContainerImpl;
+typedef struct IDirectMusicSongImpl IDirectMusicSongImpl;
+
 /*****************************************************************************
  * Predeclare the interface implementation structures
  */
@@ -58,6 +93,37 @@
 extern ICOM_VTABLE(IDirectMusicThru) DirectMusicThru_Vtbl;
 extern ICOM_VTABLE(IReferenceClock) ReferenceClock_Vtbl;
 
+extern ICOM_VTABLE(IDirectMusicSynth) DirectMusicSynth;
+extern ICOM_VTABLE(IDirectMusicSynth8) DirectMusicSynth8;
+extern ICOM_VTABLE(IDirectMusicSynthSink) DirectMusicSynthSink;
+
+extern ICOM_VTABLE(IDirectMusicTool) DirectMusicTool;
+extern ICOM_VTABLE(IDirectMusicTool8) DirectMusicTool8;
+extern ICOM_VTABLE(IDirectMusicTrack) DirectMusicTrack;
+extern ICOM_VTABLE(IDirectMusicTrack8) DirectMusicTrack8;
+
+extern ICOM_VTABLE(IDirectMusicBand) DirectMusicBand;
+extern ICOM_VTABLE(IDirectMusicObject) DirectMusicObject;
+extern ICOM_VTABLE(IDirectMusicLoader) DirectMusicLoader;
+extern ICOM_VTABLE(IDirectMusicLoader8) DirectMusicLoader8;
+extern ICOM_VTABLE(IDirectMusicGetLoader) DirectMusicGetLoader;
+extern ICOM_VTABLE(IDirectMusicSegment) DirectMusicSegment;
+extern ICOM_VTABLE(IDirectMusicSegment8) DirectMusicSegment8;
+extern ICOM_VTABLE(IDirectMusicSegmentState) DirectMusicSegmentState;
+extern ICOM_VTABLE(IDirectMusicSegmentState8) DirectMusicSegmentState8;
+extern ICOM_VTABLE(IDirectMusicAudioPath) DirectMusicAudioPath_Vtbl;
+extern ICOM_VTABLE(IDirectMusicPerformance) DirectMusicPerformance_Vtbl;
+extern ICOM_VTABLE(IDirectMusicPerformance8) DirectMusicPerformance8_Vtbl;
+extern ICOM_VTABLE(IDirectMusicGraph) DirectMusicGraph_Vtbl;
+extern ICOM_VTABLE(IDirectMusicStyle) DirectMusicStyle_Vtbl;
+extern ICOM_VTABLE(IDirectMusicStyle8) DirectMusicStyle8_Vtbl;
+extern ICOM_VTABLE(IDirectMusicChordMap) DirectMusicChordMap_Vtbl;
+extern ICOM_VTABLE(IDirectMusicComposer) DirectMusicComposer_Vtbl;
+extern ICOM_VTABLE(IDirectMusicPatternTrack) DirectMusicPatternTrack_Vtbl;
+extern ICOM_VTABLE(IDirectMusicScript) DirectMusicScript_Vtbl;
+extern ICOM_VTABLE(IDirectMusicContainer) DirectMusicContainer_Vtbl;
+extern ICOM_VTABLE(IDirectMusicSong) DirectMusicSong_Vtbl;
+
 /*****************************************************************************
  * IDirectMusicImpl implementation structure
  */
@@ -321,4 +387,844 @@
 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);
 
+
+/*****************************************************************************
+ * IDirectMusicSynthImpl implementation structure
+ */
+struct IDirectMusicSynthImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicSynth);
+  DWORD          ref;
+
+  /* IDirectMusicSynth fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicSynthImpl_QueryInterface (LPDIRECTMUSICSYNTH iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicSynthImpl_AddRef (LPDIRECTMUSICSYNTH iface);
+extern ULONG WINAPI   IDirectMusicSynthImpl_Release (LPDIRECTMUSICSYNTH iface);
+/* IDirectMusicSynth: */
+extern HRESULT WINAPI IDirectMusicSynthImpl_Open (LPDIRECTMUSICSYNTH iface,LPDMUS_PORTPARAMS pPortParams);
+extern HRESULT WINAPI IDirectMusicSynthImpl_Close (LPDIRECTMUSICSYNTH iface);

+extern HRESULT WINAPI IDirectMusicSynthImpl_SetNumChannelGroups (LPDIRECTMUSICSYNTH iface, DWORD dwGroups);

+extern HRESULT WINAPI IDirectMusicSynthImpl_Download (LPDIRECTMUSICSYNTH iface, LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree);

+extern HRESULT WINAPI IDirectMusicSynthImpl_Unload (LPDIRECTMUSICSYNTH iface, HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData);

+extern HRESULT WINAPI IDirectMusicSynthImpl_PlayBuffer (LPDIRECTMUSICSYNTH iface, REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer);

+extern HRESULT WINAPI IDirectMusicSynthImpl_GetRunningStats (LPDIRECTMUSICSYNTH iface, LPDMUS_SYNTHSTATS pStats);

+extern HRESULT WINAPI IDirectMusicSynthImpl_GetPortCaps (LPDIRECTMUSICSYNTH iface, LPDMUS_PORTCAPS pCaps);

+extern HRESULT WINAPI IDirectMusicSynthImpl_SetMasterClock (LPDIRECTMUSICSYNTH iface, IReferenceClock* pClock);

+extern HRESULT WINAPI IDirectMusicSynthImpl_GetLatencyClock (LPDIRECTMUSICSYNTH iface, IReferenceClock** ppClock);

+extern HRESULT WINAPI IDirectMusicSynthImpl_Activate (LPDIRECTMUSICSYNTH iface, BOOL fEnable);
+extern HRESULT WINAPI IDirectMusicSynthImpl_SetSynthSink (LPDIRECTMUSICSYNTH iface, IDirectMusicSynthSink* pSynthSink);

+extern HRESULT WINAPI IDirectMusicSynthImpl_Render (LPDIRECTMUSICSYNTH iface, short* pBuffer, DWORD dwLength, LONGLONG llPosition);

+extern HRESULT WINAPI IDirectMusicSynthImpl_SetChannelPriority (LPDIRECTMUSICSYNTH iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority);

+extern HRESULT WINAPI IDirectMusicSynthImpl_GetChannelPriority (LPDIRECTMUSICSYNTH iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority);

+extern HRESULT WINAPI IDirectMusicSynthImpl_GetFormat (LPDIRECTMUSICSYNTH iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz);

+extern HRESULT WINAPI IDirectMusicSynthImpl_GetAppend (LPDIRECTMUSICSYNTH iface, DWORD* pdwAppend);
+	
+/*****************************************************************************
+ * IDirectMusicSynth8Impl implementation structure
+ */
+struct IDirectMusicSynth8Impl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicSynth8);
+  DWORD          ref;
+
+  /* IDirectMusicSynth8 fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicSynth8Impl_QueryInterface (LPDIRECTMUSICSYNTH8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicSynth8Impl_AddRef (LPDIRECTMUSICSYNTH8 iface);
+extern ULONG WINAPI   IDirectMusicSynth8Impl_Release (LPDIRECTMUSICSYNTH8 iface);
+/* IDirectMusicSynth: */
+extern HRESULT WINAPI IDirectMusicSynth8Impl_Open (LPDIRECTMUSICSYNTH8 iface, LPDMUS_PORTPARAMS pPortParams);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_Close (LPDIRECTMUSICSYNTH8 iface);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_SetNumChannelGroups (LPDIRECTMUSICSYNTH8 iface, DWORD dwGroups);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_Download (LPDIRECTMUSICSYNTH8 iface, LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_Unload (LPDIRECTMUSICSYNTH8 iface, HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_PlayBuffer (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_GetRunningStats (LPDIRECTMUSICSYNTH8 iface, LPDMUS_SYNTHSTATS pStats);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_GetPortCaps (LPDIRECTMUSICSYNTH8 iface, LPDMUS_PORTCAPS pCaps);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_SetMasterClock (LPDIRECTMUSICSYNTH8 iface, IReferenceClock* pClock);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_GetLatencyClock (LPDIRECTMUSICSYNTH8 iface, IReferenceClock** ppClock);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_Activate (LPDIRECTMUSICSYNTH8 iface, BOOL fEnable);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_SetSynthSink (LPDIRECTMUSICSYNTH8 iface, IDirectMusicSynthSink* pSynthSink);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_Render (LPDIRECTMUSICSYNTH8 iface, short* pBuffer, DWORD dwLength, LONGLONG llPosition);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_SetChannelPriority (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_GetChannelPriority (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_GetFormat (LPDIRECTMUSICSYNTH8 iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_GetAppend (LPDIRECTMUSICSYNTH8 iface, DWORD* pdwAppend);
+/* IDirectMusicSynth8: */
+extern HRESULT WINAPI IDirectMusicSynth8Impl_PlayVoice (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, DWORD dwVoiceId, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwDLId, long prPitch, long vrVolume, SAMPLE_TIME stVoiceStart, SAMPLE_TIME stLoopStart, SAMPLE_TIME stLoopEnd);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_StopVoice (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, DWORD dwVoiceId);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_GetVoiceState (LPDIRECTMUSICSYNTH8 iface, DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[]);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_Refresh (LPDIRECTMUSICSYNTH8 iface, DWORD dwDownloadID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSynth8Impl_AssignChannelToBuses (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses);
+
+/*****************************************************************************
+ * IDirectMusicSynthSinkImpl implementation structure
+ */
+struct IDirectMusicSynthSinkImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicSynthSink);
+  DWORD          ref;
+
+  /* IDirectMusicSynthSinkImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicSynthSinkImpl_QueryInterface (LPDIRECTMUSICSYNTHSINK iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicSynthSinkImpl_AddRef (LPDIRECTMUSICSYNTHSINK iface);
+extern ULONG WINAPI   IDirectMusicSynthSinkImpl_Release (LPDIRECTMUSICSYNTHSINK iface);
+/* IDirectMusicSynthSinkImpl: */
+extern HRESULT WINAPI IDirectMusicSynthSinkImpl_Init (LPDIRECTMUSICSYNTHSINK iface, IDirectMusicSynth* pSynth);
+extern HRESULT WINAPI IDirectMusicSynthSinkImpl_SetMasterClock (LPDIRECTMUSICSYNTHSINK iface, IReferenceClock* pClock);
+extern HRESULT WINAPI IDirectMusicSynthSinkImpl_GetLatencyClock (LPDIRECTMUSICSYNTHSINK iface, IReferenceClock** ppClock);
+extern HRESULT WINAPI IDirectMusicSynthSinkImpl_Activate (LPDIRECTMUSICSYNTHSINK iface, BOOL fEnable);
+extern HRESULT WINAPI IDirectMusicSynthSinkImpl_SampleToRefTime (LPDIRECTMUSICSYNTHSINK iface, LONGLONG llSampleTime, REFERENCE_TIME* prfTime);
+extern HRESULT WINAPI IDirectMusicSynthSinkImpl_RefTimeToSample (LPDIRECTMUSICSYNTHSINK iface, REFERENCE_TIME rfTime, LONGLONG* pllSampleTime);
+extern HRESULT WINAPI IDirectMusicSynthSinkImpl_SetDirectSound (LPDIRECTMUSICSYNTHSINK iface, LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer);
+extern HRESULT WINAPI IDirectMusicSynthSinkImpl_GetDesiredBufferSize (LPDIRECTMUSICSYNTHSINK iface, LPDWORD pdwBufferSizeInSamples);
+
+
+/*****************************************************************************
+ * IDirectMusicToolImpl implementation structure
+ */
+struct IDirectMusicToolImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicTool);
+  DWORD          ref;
+
+  /* IDirectMusicToolImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicToolImpl_QueryInterface (LPDIRECTMUSICTOOL iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicToolImpl_AddRef (LPDIRECTMUSICTOOL iface);
+extern ULONG WINAPI   IDirectMusicToolImpl_Release (LPDIRECTMUSICTOOL iface);
+/* IDirectMusicToolImpl: */
+extern HRESULT WINAPI IDirectMusicToolImpl_Init (LPDIRECTMUSICTOOL iface, IDirectMusicGraph* pGraph);
+extern HRESULT WINAPI IDirectMusicToolImpl_GetMsgDeliveryType (LPDIRECTMUSICTOOL iface, DWORD* pdwDeliveryType);

+extern HRESULT WINAPI IDirectMusicToolImpl_GetMediaTypeArraySize (LPDIRECTMUSICTOOL iface, DWORD* pdwNumElements);
+extern HRESULT WINAPI IDirectMusicToolImpl_GetMediaTypes (LPDIRECTMUSICTOOL iface, DWORD** padwMediaTypes, DWORD dwNumElements);

+extern HRESULT WINAPI IDirectMusicToolImpl_ProcessPMsg (LPDIRECTMUSICTOOL iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG);

+extern HRESULT WINAPI IDirectMusicToolImpl_Flush (LPDIRECTMUSICTOOL iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG, REFERENCE_TIME rtTime);
+
+/*****************************************************************************
+ * IDirectMusicTool8Impl implementation structure
+ */
+struct IDirectMusicTool8Impl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicTool8);
+  DWORD          ref;
+
+  /* IDirectMusicTool8Impl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicTool8Impl_QueryInterface (LPDIRECTMUSICTOOL8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicTool8Impl_AddRef (LPDIRECTMUSICTOOL8 iface);
+extern ULONG WINAPI   IDirectMusicTool8Impl_Release (LPDIRECTMUSICTOOL8 iface);
+/* IDirectMusicTool8Impl: */
+extern HRESULT WINAPI IDirectMusicTool8Impl_Init (LPDIRECTMUSICTOOL8 iface, IDirectMusicGraph* pGraph);
+extern HRESULT WINAPI IDirectMusicTool8Impl_GetMsgDeliveryType (LPDIRECTMUSICTOOL8 iface, DWORD* pdwDeliveryType);

+extern HRESULT WINAPI IDirectMusicTool8Impl_GetMediaTypeArraySize (LPDIRECTMUSICTOOL8 iface, DWORD* pdwNumElements);
+extern HRESULT WINAPI IDirectMusicTool8Impl_GetMediaTypes (LPDIRECTMUSICTOOL8 iface, DWORD** padwMediaTypes, DWORD dwNumElements);

+extern HRESULT WINAPI IDirectMusicTool8Impl_ProcessPMsg (LPDIRECTMUSICTOOL8 iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG);

+extern HRESULT WINAPI IDirectMusicTool8Impl_Flush (LPDIRECTMUSICTOOL8 iface, IDirectMusicPerformance* pPerf, DMUS_PMSG* pPMSG, REFERENCE_TIME rtTime);
+/* IDirectMusicToolImpl8: */
+extern HRESULT WINAPI IDirectMusicTool8Impl_Clone (LPDIRECTMUSICTOOL8 iface, IDirectMusicTool** ppTool);
+/*****************************************************************************
+ * IDirectMusicTrackImpl implementation structure
+ */
+struct IDirectMusicTrackImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicTrack);
+  DWORD          ref;
+
+  /* IDirectMusicTrackImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicTrackImpl_QueryInterface (LPDIRECTMUSICTRACK iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicTrackImpl_AddRef (LPDIRECTMUSICTRACK iface);
+extern ULONG WINAPI   IDirectMusicTrackImpl_Release (LPDIRECTMUSICTRACK iface);
+/* IDirectMusicTrack: */
+extern HRESULT WINAPI IDirectMusicTrackImpl_Init (LPDIRECTMUSICTRACK iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicTrackImpl_InitPlay (LPDIRECTMUSICTRACK iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicTrackImpl_EndPlay (LPDIRECTMUSICTRACK iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicTrackImpl_Play (LPDIRECTMUSICTRACK iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicTrackImpl_GetParam (LPDIRECTMUSICTRACK iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicTrackImpl_SetParam (LPDIRECTMUSICTRACK iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicTrackImpl_IsParamSupported (LPDIRECTMUSICTRACK iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicTrackImpl_AddNotificationType (LPDIRECTMUSICTRACK iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicTrackImpl_RemoveNotificationType (LPDIRECTMUSICTRACK iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicTrackImpl_Clone (LPDIRECTMUSICTRACK iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+
+/*****************************************************************************
+ * IDirectMusicTrack8Impl implementation structure
+ */
+struct IDirectMusicTrack8Impl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicTrack8);
+  DWORD          ref;
+
+  /* IDirectMusicTrack8Impl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicTrack8Impl_QueryInterface (LPDIRECTMUSICTRACK8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicTrack8Impl_AddRef (LPDIRECTMUSICTRACK8 iface);
+extern ULONG WINAPI   IDirectMusicTrack8Impl_Release (LPDIRECTMUSICTRACK8 iface);
+/* IDirectMusicTrack: */
+extern HRESULT WINAPI IDirectMusicTrack8Impl_Init (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegment* pSegment);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_InitPlay (LPDIRECTMUSICTRACK8 iface, IDirectMusicSegmentState* pSegmentState, IDirectMusicPerformance* pPerformance, void** ppStateData, DWORD dwVirtualTrackID, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_EndPlay (LPDIRECTMUSICTRACK8 iface, void* pStateData);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_Play (LPDIRECTMUSICTRACK8 iface, void* pStateData, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, MUSIC_TIME mtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_GetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_SetParam (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_IsParamSupported (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_AddNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_RemoveNotificationType (LPDIRECTMUSICTRACK8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_Clone (LPDIRECTMUSICTRACK8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicTrack** ppTrack);
+/* IDirectMusicTrack8: */
+extern HRESULT WINAPI IDirectMusicTrack8Impl_PlayEx (LPDIRECTMUSICTRACK8 iface, void* pStateData, REFERENCE_TIME rtStart, REFERENCE_TIME rtEnd, REFERENCE_TIME rtOffset, DWORD dwFlags, IDirectMusicPerformance* pPerf, IDirectMusicSegmentState* pSegSt, DWORD dwVirtualID);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_GetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, REFERENCE_TIME* prtNext, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_SetParamEx (LPDIRECTMUSICTRACK8 iface, REFGUID rguidType, REFERENCE_TIME rtTime, void* pParam, void* pStateData, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_Compose (LPDIRECTMUSICTRACK8 iface, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+extern HRESULT WINAPI IDirectMusicTrack8Impl_Join (LPDIRECTMUSICTRACK8 iface, IDirectMusicTrack* pNewTrack, MUSIC_TIME mtJoin, IUnknown* pContext, DWORD dwTrackGroup, IDirectMusicTrack** ppResultTrack);
+
+
+/*****************************************************************************
+ * IDirectMusicBandImpl implementation structure
+ */
+struct IDirectMusicBandImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicBand);
+  DWORD          ref;
+
+  /* IDirectMusicBandImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicBandImpl_QueryInterface (LPDIRECTMUSICBAND iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicBandImpl_AddRef (LPDIRECTMUSICBAND iface);
+extern ULONG WINAPI   IDirectMusicBandImpl_Release (LPDIRECTMUSICBAND iface);
+/* IDirectMusicBand: */
+extern HRESULT WINAPI IDirectMusicBandImpl_CreateSegment (LPDIRECTMUSICBAND iface, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicBandImpl_Download (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance);
+extern HRESULT WINAPI IDirectMusicBandImpl_Unload (LPDIRECTMUSICBAND iface, IDirectMusicPerformance* pPerformance);
+
+/*****************************************************************************
+ * IDirectMusicObjectImpl implementation structure
+ */
+struct IDirectMusicObjectImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicObject);
+  DWORD          ref;
+
+  /* IDirectMusicObjectImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicObjectImpl_QueryInterface (LPDIRECTMUSICOBJECT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicObjectImpl_AddRef (LPDIRECTMUSICOBJECT iface);
+extern ULONG WINAPI   IDirectMusicObjectImpl_Release (LPDIRECTMUSICOBJECT iface);
+/* IDirectMusicObject: */
+extern HRESULT WINAPI IDirectMusicObjectImpl_GetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicObjectImpl_SetDescriptor (LPDIRECTMUSICOBJECT iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicObjectImpl_ParseDescriptor (LPDIRECTMUSICOBJECT iface, LPSTREAM pStream, LPDMUS_OBJECTDESC pDesc);
+
+/*****************************************************************************
+ * IDirectMusicLoaderImpl implementation structure
+ */
+struct IDirectMusicLoaderImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicLoader);
+  DWORD          ref;
+
+  /* IDirectMusicLoaderImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicLoaderImpl_QueryInterface (LPDIRECTMUSICLOADER iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicLoaderImpl_AddRef (LPDIRECTMUSICLOADER iface);
+extern ULONG WINAPI   IDirectMusicLoaderImpl_Release (LPDIRECTMUSICLOADER iface);
+/* IDirectMusicLoader: */
+extern HRESULT WINAPI IDirectMusicLoaderImpl_GetObject (LPDIRECTMUSICLOADER iface, LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID*ppv);
+extern HRESULT WINAPI IDirectMusicLoaderImpl_SetObject (LPDIRECTMUSICLOADER iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicLoaderImpl_SetSearchDirectory (LPDIRECTMUSICLOADER iface, REFGUID rguidClass, WCHAR* pwzPath, BOOL fClear);
+extern HRESULT WINAPI IDirectMusicLoaderImpl_ScanDirectory (LPDIRECTMUSICLOADER iface, REFGUID rguidClass, WCHAR* pwzFileExtension, WCHAR* pwzScanFileName);
+extern HRESULT WINAPI IDirectMusicLoaderImpl_CacheObject (LPDIRECTMUSICLOADER iface, IDirectMusicObject* pObject);
+extern HRESULT WINAPI IDirectMusicLoaderImpl_ReleaseObject (LPDIRECTMUSICLOADER iface, IDirectMusicObject* pObject);
+extern HRESULT WINAPI IDirectMusicLoaderImpl_ClearCache (LPDIRECTMUSICLOADER iface, REFGUID rguidClass);
+extern HRESULT WINAPI IDirectMusicLoaderImpl_EnableCache (LPDIRECTMUSICLOADER iface, REFGUID rguidClass, BOOL fEnable);
+extern HRESULT WINAPI IDirectMusicLoaderImpl_EnumObject (LPDIRECTMUSICLOADER iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc);
+
+/*****************************************************************************
+ * IDirectMusicLoader8Impl implementation structure
+ */
+struct IDirectMusicLoader8Impl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicLoader8);
+  DWORD          ref;
+
+  /* IDirectMusicLoader8Impl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicLoader8Impl_QueryInterface (LPDIRECTMUSICLOADER8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicLoader8Impl_AddRef (LPDIRECTMUSICLOADER8 iface);
+extern ULONG WINAPI   IDirectMusicLoader8Impl_Release (LPDIRECTMUSICLOADER8 iface);
+/* IDirectMusicLoader: */
+extern HRESULT WINAPI IDirectMusicLoader8Impl_GetObject (LPDIRECTMUSICLOADER8 iface, LPDMUS_OBJECTDESC pDesc, REFIID riid, LPVOID*ppv);
+extern HRESULT WINAPI IDirectMusicLoader8Impl_SetObject (LPDIRECTMUSICLOADER8 iface, LPDMUS_OBJECTDESC pDesc);
+extern HRESULT WINAPI IDirectMusicLoader8Impl_SetSearchDirectory (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, WCHAR* pwzPath, BOOL fClear);
+extern HRESULT WINAPI IDirectMusicLoader8Impl_ScanDirectory (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, WCHAR* pwzFileExtension, WCHAR* pwzScanFileName);
+extern HRESULT WINAPI IDirectMusicLoader8Impl_CacheObject (LPDIRECTMUSICLOADER8 iface, IDirectMusicObject* pObject);
+extern HRESULT WINAPI IDirectMusicLoader8Impl_ReleaseObject (LPDIRECTMUSICLOADER8 iface, IDirectMusicObject* pObject);
+extern HRESULT WINAPI IDirectMusicLoader8Impl_ClearCache (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass);
+extern HRESULT WINAPI IDirectMusicLoader8Impl_EnableCache (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, BOOL fEnable);
+extern HRESULT WINAPI IDirectMusicLoader8Impl_EnumObject (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc);
+/* IDirectMusicLoader8: */
+extern void WINAPI IDirectMusicLoader8Impl_CollectGarbage (LPDIRECTMUSICLOADER8 iface);
+extern HRESULT WINAPI IDirectMusicLoader8Impl_ReleaseObjectByUnknown (LPDIRECTMUSICLOADER8 iface, IUnknown* pObject);
+extern HRESULT WINAPI IDirectMusicLoader8Impl_LoadObjectFromFile (LPDIRECTMUSICLOADER8 iface, REFGUID rguidClassID, REFIID iidInterfaceID, WCHAR* pwzFilePath, void** ppObject);
+
+/*****************************************************************************
+ * IDirectMusicGetLoaderImpl implementation structure
+ */
+struct IDirectMusicGetLoaderImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicGetLoader);
+  DWORD          ref;
+
+  /* IDirectMusicGetLoaderImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicGetLoaderImpl_QueryInterface (LPDIRECTMUSICGETLOADER iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicGetLoaderImpl_AddRef (LPDIRECTMUSICGETLOADER iface);
+extern ULONG WINAPI   IDirectMusicGetLoaderImpl_Release (LPDIRECTMUSICGETLOADER iface);
+/* IDirectMusicGetLoader: */
+extern HRESULT WINAPI IDirectMusicGetLoaderImpl_GetLoader (LPDIRECTMUSICGETLOADER iface, IDirectMusicLoader** ppLoader);
+
+/*****************************************************************************
+ * IDirectMusicSegmentImpl implementation structure
+ */
+struct IDirectMusicSegmentImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicSegment);
+  DWORD          ref;
+
+  /* IDirectMusicSegmentImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicSegmentImpl_QueryInterface (LPDIRECTMUSICSEGMENT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicSegmentImpl_AddRef (LPDIRECTMUSICSEGMENT iface);
+extern ULONG WINAPI   IDirectMusicSegmentImpl_Release (LPDIRECTMUSICSEGMENT iface);
+/* IDirectMusicSegment: */
+extern HRESULT WINAPI IDirectMusicSegmentImpl_GetLength (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME* pmtLength);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_SetLength (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME mtLength);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_GetRepeats (LPDIRECTMUSICSEGMENT iface, DWORD* pdwRepeats);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_SetRepeats (LPDIRECTMUSICSEGMENT iface, DWORD dwRepeats);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_GetDefaultResolution (LPDIRECTMUSICSEGMENT iface, DWORD* pdwResolution);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_SetDefaultResolution (LPDIRECTMUSICSEGMENT iface, DWORD dwResolution);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_GetTrack (LPDIRECTMUSICSEGMENT iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_GetTrackGroup (LPDIRECTMUSICSEGMENT iface, IDirectMusicTrack* pTrack, DWORD* pdwGroupBits);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_InsertTrack (LPDIRECTMUSICSEGMENT iface, IDirectMusicTrack* pTrack, DWORD dwGroupBits);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_RemoveTrack (LPDIRECTMUSICSEGMENT iface, IDirectMusicTrack* pTrack);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_InitPlay (LPDIRECTMUSICSEGMENT iface, IDirectMusicSegmentState** ppSegState, IDirectMusicPerformance* pPerformance, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_GetGraph (LPDIRECTMUSICSEGMENT iface, IDirectMusicGraph** ppGraph);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_SetGraph (LPDIRECTMUSICSEGMENT iface, IDirectMusicGraph* pGraph);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_AddNotificationType (LPDIRECTMUSICSEGMENT iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_RemoveNotificationType (LPDIRECTMUSICSEGMENT iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_GetParam (LPDIRECTMUSICSEGMENT iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_SetParam (LPDIRECTMUSICSEGMENT iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_Clone (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_SetStartPoint (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME mtStart);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_GetStartPoint (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME* pmtStart);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_SetLoopPoints (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_GetLoopPoints (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME* pmtStart, MUSIC_TIME* pmtEnd);
+extern HRESULT WINAPI IDirectMusicSegmentImpl_SetPChannelsUsed (LPDIRECTMUSICSEGMENT iface, DWORD dwNumPChannels, DWORD* paPChannels);
+
+/*****************************************************************************
+ * IDirectMusicSegment8Impl implementation structure
+ */
+struct IDirectMusicSegment8Impl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicSegment8);
+  DWORD          ref;
+
+  /* IDirectMusicSegment8Impl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicSegment8Impl_QueryInterface (LPDIRECTMUSICSEGMENT8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicSegment8Impl_AddRef (LPDIRECTMUSICSEGMENT8 iface);
+extern ULONG WINAPI   IDirectMusicSegment8Impl_Release (LPDIRECTMUSICSEGMENT8 iface);
+/* IDirectMusicSegment: */
+extern HRESULT WINAPI IDirectMusicSegment8Impl_GetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtLength);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_SetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtLength);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_GetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwRepeats);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_SetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD dwRepeats);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_GetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwResolution);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_SetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD dwResolution);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_GetTrack (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack** ppTrack);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_GetTrackGroup (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD* pdwGroupBits);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_InsertTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD dwGroupBits);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_RemoveTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_InitPlay (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicSegmentState** ppSegState, IDirectMusicPerformance* pPerformance, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_GetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph** ppGraph);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_SetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph* pGraph);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_AddNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_RemoveNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_GetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_SetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_Clone (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_SetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_GetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_SetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_GetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart, MUSIC_TIME* pmtEnd);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_SetPChannelsUsed (LPDIRECTMUSICSEGMENT8 iface, DWORD dwNumPChannels, DWORD* paPChannels);
+/* IDirectMusicSegment8: */
+extern HRESULT WINAPI IDirectMusicSegment8Impl_SetTrackConfig (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_GetAudioPathConfig (LPDIRECTMUSICSEGMENT8 iface, IUnknown** ppAudioPathConfig);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_Compose (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtTime, IDirectMusicSegment* pFromSegment, IDirectMusicSegment* pToSegment, IDirectMusicSegment** ppComposedSegment);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_Download (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath);
+extern HRESULT WINAPI IDirectMusicSegment8Impl_Unload (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath);
+	
+/*****************************************************************************
+ * IDirectMusicSegmentStateImpl implementation structure
+ */
+struct IDirectMusicSegmentStateImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicSegmentState);
+  DWORD          ref;
+
+  /* IDirectMusicSegmentStateImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicSegmentStateImpl_QueryInterface (LPDIRECTMUSICSEGMENTSTATE iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicSegmentStateImpl_AddRef (LPDIRECTMUSICSEGMENTSTATE iface);
+extern ULONG WINAPI   IDirectMusicSegmentStateImpl_Release (LPDIRECTMUSICSEGMENTSTATE iface);
+/* IDirectMusicSegmentState: */
+extern HRESULT WINAPI IDirectMusicSegmentStateImpl_GetRepeats (LPDIRECTMUSICSEGMENTSTATE iface,  DWORD* pdwRepeats);
+extern HRESULT WINAPI IDirectMusicSegmentStateImpl_GetSegment (LPDIRECTMUSICSEGMENTSTATE iface, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicSegmentStateImpl_GetStartTime (LPDIRECTMUSICSEGMENTSTATE iface, MUSIC_TIME* pmtStart);
+extern HRESULT WINAPI IDirectMusicSegmentStateImpl_GetSeek (LPDIRECTMUSICSEGMENTSTATE iface, MUSIC_TIME* pmtSeek);
+extern HRESULT WINAPI IDirectMusicSegmentStateImpl_GetStartPoint (LPDIRECTMUSICSEGMENTSTATE iface, MUSIC_TIME* pmtStart);
+
+/*****************************************************************************
+ * IDirectMusicSegmentState8Impl implementation structure
+ */
+struct IDirectMusicSegmentState8Impl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicSegmentState8);
+  DWORD          ref;
+
+  /* IDirectMusicSegmentState8Impl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicSegmentState8Impl_QueryInterface (LPDIRECTMUSICSEGMENTSTATE8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicSegmentState8Impl_AddRef (LPDIRECTMUSICSEGMENTSTATE8 iface);
+extern ULONG WINAPI   IDirectMusicSegmentState8Impl_Release (LPDIRECTMUSICSEGMENTSTATE8 iface);
+/* IDirectMusicSegmentState: */
+extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetRepeats (LPDIRECTMUSICSEGMENTSTATE8 iface,  DWORD* pdwRepeats);
+extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetSegment (LPDIRECTMUSICSEGMENTSTATE8 iface, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetStartTime (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtStart);
+extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetSeek (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtSeek);
+extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetStartPoint (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtStart);
+/* IDirectMusicSegmentState8: */
+extern HRESULT WINAPI IDirectMusicSegmentState8Impl_SetTrackConfig (LPDIRECTMUSICSEGMENTSTATE8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff);
+extern HRESULT WINAPI IDirectMusicSegmentState8Impl_GetObjectInPath (LPDIRECTMUSICSEGMENTSTATE8 iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void** ppObject);
+
+/*****************************************************************************
+ * IDirectMusicAudioPathImpl implementation structure
+ */
+struct IDirectMusicAudioPathImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicAudioPath);
+  DWORD          ref;
+
+  /* IDirectMusicAudioPathImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_QueryInterface (LPDIRECTMUSICAUDIOPATH iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicAudioPathImpl_AddRef (LPDIRECTMUSICAUDIOPATH iface);
+extern ULONG WINAPI   IDirectMusicAudioPathImpl_Release (LPDIRECTMUSICAUDIOPATH iface);
+/* IDirectMusicAudioPath: */
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_GetObjectInPath (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, WORD dwIndex, REFGUID iidInterface, void** ppObject);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_Activate (LPDIRECTMUSICAUDIOPATH iface, BOOL fActivate);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_SetVolume (LPDIRECTMUSICAUDIOPATH iface, long lVolume, DWORD dwDuration);
+extern HRESULT WINAPI IDirectMusicAudioPathImpl_ConvertPChannel (LPDIRECTMUSICAUDIOPATH iface, DWORD dwPChannelIn, DWORD* pdwPChannelOut);
+
+/*****************************************************************************
+ * IDirectMusicPerformanceImpl implementation structure
+ */
+struct IDirectMusicPerformanceImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicPerformance);
+  DWORD          ref;
+
+  /* IDirectMusicPerformanceImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_QueryInterface (LPDIRECTMUSICPERFORMANCE iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicPerformanceImpl_AddRef (LPDIRECTMUSICPERFORMANCE iface);
+extern ULONG WINAPI   IDirectMusicPerformanceImpl_Release (LPDIRECTMUSICPERFORMANCE iface);
+/* IDirectMusicPerformance: */
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_Init (LPDIRECTMUSICPERFORMANCE iface, IDirectMusic** ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_PlaySegment (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicSegment* pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState** ppSegmentState);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_Stop (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetSegmentState (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicSegmentState** ppSegmentState, MUSIC_TIME mtTime);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_SetPrepareTime (LPDIRECTMUSICPERFORMANCE iface, DWORD dwMilliSeconds);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetPrepareTime (LPDIRECTMUSICPERFORMANCE iface, DWORD* pdwMilliSeconds);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_SetBumperLength (LPDIRECTMUSICPERFORMANCE iface, DWORD dwMilliSeconds);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetBumperLength (LPDIRECTMUSICPERFORMANCE iface, DWORD* pdwMilliSeconds);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_SendPMsg (LPDIRECTMUSICPERFORMANCE iface, DMUS_PMSG* pPMSG);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_MusicToReferenceTime (LPDIRECTMUSICPERFORMANCE iface, MUSIC_TIME mtTime, REFERENCE_TIME* prtTime);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_ReferenceToMusicTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME rtTime, MUSIC_TIME* pmtTime);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_IsPlaying (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegState);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME* prtNow, MUSIC_TIME* pmtNow);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_AllocPMsg (LPDIRECTMUSICPERFORMANCE iface, ULONG cb, DMUS_PMSG** ppPMSG);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_FreePMsg (LPDIRECTMUSICPERFORMANCE iface, DMUS_PMSG* pPMSG);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetGraph (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicGraph** ppGraph);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_SetGraph (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicGraph* pGraph);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_SetNotificationHandle (LPDIRECTMUSICPERFORMANCE iface, HANDLE hNotification, REFERENCE_TIME rtMinimum);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetNotificationPMsg (LPDIRECTMUSICPERFORMANCE iface, DMUS_NOTIFICATION_PMSG** ppNotificationPMsg);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_AddNotificationType (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_RemoveNotificationType (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_AddPort (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicPort* pPort);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_RemovePort (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicPort* pPort);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_AssignPChannelBlock (LPDIRECTMUSICPERFORMANCE iface, DWORD dwBlockNum, IDirectMusicPort* pPort, DWORD dwGroup);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_AssignPChannel (LPDIRECTMUSICPERFORMANCE iface, DWORD dwPChannel, IDirectMusicPort* pPort, DWORD dwGroup, DWORD dwMChannel);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_PChannelInfo (LPDIRECTMUSICPERFORMANCE iface, DWORD dwPChannel, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_DownloadInstrument (LPDIRECTMUSICPERFORMANCE iface, IDirectMusicInstrument* pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument** ppDownInst, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_Invalidate (LPDIRECTMUSICPERFORMANCE iface, MUSIC_TIME mtTime, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetParam (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_SetParam (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetGlobalParam (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidType, void* pParam, DWORD dwSize);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_SetGlobalParam (LPDIRECTMUSICPERFORMANCE iface, REFGUID rguidType, void* pParam, DWORD dwSize);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetLatencyTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME* prtTime);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetQueueTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME* prtTime);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_AdjustTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME rtAmount);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_CloseDown (LPDIRECTMUSICPERFORMANCE iface);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_GetResolvedTime (LPDIRECTMUSICPERFORMANCE iface, REFERENCE_TIME rtTime, REFERENCE_TIME* prtResolved, DWORD dwTimeResolveFlags);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_MIDIToMusic (LPDIRECTMUSICPERFORMANCE iface, BYTE bMIDIValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, WORD* pwMusicValue);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_MusicToMIDI (LPDIRECTMUSICPERFORMANCE iface, WORD wMusicValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE* pbMIDIValue);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_TimeToRhythm (LPDIRECTMUSICPERFORMANCE iface, MUSIC_TIME mtTime, DMUS_TIMESIGNATURE* pTimeSig, WORD* pwMeasure, BYTE* pbBeat, BYTE* pbGrid, short* pnOffset);
+extern HRESULT WINAPI IDirectMusicPerformanceImpl_RhythmToTime (LPDIRECTMUSICPERFORMANCE iface, WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE* pTimeSig, MUSIC_TIME* pmtTime);
+
+/*****************************************************************************
+ * IDirectMusicPerformance8Impl implementation structure
+ */
+struct IDirectMusicPerformance8Impl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicPerformance8);
+  DWORD          ref;
+
+  /* IDirectMusicPerformance8Impl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_QueryInterface (LPDIRECTMUSICPERFORMANCE8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicPerformance8Impl_AddRef (LPDIRECTMUSICPERFORMANCE8 iface);
+extern ULONG WINAPI   IDirectMusicPerformance8Impl_Release (LPDIRECTMUSICPERFORMANCE8 iface);
+/* IDirectMusicPerformance: */
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_Init (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusic** ppDirectMusic, LPDIRECTSOUND pDirectSound, HWND hWnd);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_PlaySegment (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState** ppSegmentState);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_Stop (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegmentState, MUSIC_TIME mtTime, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetSegmentState (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegmentState** ppSegmentState, MUSIC_TIME mtTime);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_SetPrepareTime (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwMilliSeconds);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetPrepareTime (LPDIRECTMUSICPERFORMANCE8 iface, DWORD* pdwMilliSeconds);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_SetBumperLength (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwMilliSeconds);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetBumperLength (LPDIRECTMUSICPERFORMANCE8 iface, DWORD* pdwMilliSeconds);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_SendPMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pPMSG);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_MusicToReferenceTime (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, REFERENCE_TIME* prtTime);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_ReferenceToMusicTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtTime, MUSIC_TIME* pmtTime);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_IsPlaying (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicSegment* pSegment, IDirectMusicSegmentState* pSegState);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtNow, MUSIC_TIME* pmtNow);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_AllocPMsg (LPDIRECTMUSICPERFORMANCE8 iface, ULONG cb, DMUS_PMSG** ppPMSG);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_FreePMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pPMSG);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetGraph (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicGraph** ppGraph);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_SetGraph (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicGraph* pGraph);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_SetNotificationHandle (LPDIRECTMUSICPERFORMANCE8 iface, HANDLE hNotification, REFERENCE_TIME rtMinimum);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetNotificationPMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_NOTIFICATION_PMSG** ppNotificationPMsg);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_AddNotificationType (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_RemoveNotificationType (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidNotificationType);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_AddPort (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicPort* pPort);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_RemovePort (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicPort* pPort);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_AssignPChannelBlock (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwBlockNum, IDirectMusicPort* pPort, DWORD dwGroup);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_AssignPChannel (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwPChannel, IDirectMusicPort* pPort, DWORD dwGroup, DWORD dwMChannel);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_PChannelInfo (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwPChannel, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_DownloadInstrument (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicInstrument* pInst, DWORD dwPChannel, IDirectMusicDownloadedInstrument** ppDownInst, DMUS_NOTERANGE* pNoteRanges, DWORD dwNumNoteRanges, IDirectMusicPort** ppPort, DWORD* pdwGroup, DWORD* pdwMChannel);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_Invalidate (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_SetParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetGlobalParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, void* pParam, DWORD dwSize);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_SetGlobalParam (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, void* pParam, DWORD dwSize);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetLatencyTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtTime);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetQueueTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME* prtTime);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_AdjustTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtAmount);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_CloseDown (LPDIRECTMUSICPERFORMANCE8 iface);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_GetResolvedTime (LPDIRECTMUSICPERFORMANCE8 iface, REFERENCE_TIME rtTime, REFERENCE_TIME* prtResolved, DWORD dwTimeResolveFlags);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_MIDIToMusic (LPDIRECTMUSICPERFORMANCE8 iface, BYTE bMIDIValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, WORD* pwMusicValue);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_MusicToMIDI (LPDIRECTMUSICPERFORMANCE8 iface, WORD wMusicValue, DMUS_CHORD_KEY* pChord, BYTE bPlayMode, BYTE bChordLevel, BYTE* pbMIDIValue);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_TimeToRhythm (LPDIRECTMUSICPERFORMANCE8 iface, MUSIC_TIME mtTime, DMUS_TIMESIGNATURE* pTimeSig, WORD* pwMeasure, BYTE* pbBeat, BYTE* pbGrid, short* pnOffset);
+extern HRESULT WINAPI IDirectMusicPerformance8Impl_RhythmToTime (LPDIRECTMUSICPERFORMANCE8 iface, WORD wMeasure, BYTE bBeat, BYTE bGrid, short nOffset, DMUS_TIMESIGNATURE* pTimeSig, MUSIC_TIME* pmtTime);
+/* IDirectMusicPerformance8: */
+extern HRESULT WINAPI IDirectMusicPerformance8ImplInitAudio (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusic** ppDirectMusic, IDirectSound** ppDirectSound, HWND hWnd, DWORD dwDefaultPathType, DWORD dwPChannelCount, DWORD dwFlags, DMUS_AUDIOPARAMS* pParams);
+extern HRESULT WINAPI IDirectMusicPerformance8ImplPlaySegmentEx (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pSource, WCHAR* pwzSegmentName, IUnknown* pTransition, DWORD dwFlags, __int64 i64StartTime, IDirectMusicSegmentState** ppSegmentState, IUnknown* pFrom, IUnknown* pAudioPath);
+extern HRESULT WINAPI IDirectMusicPerformance8ImplStopEx (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pObjectToStop, __int64 i64StopTime, DWORD dwFlags);
+extern HRESULT WINAPI IDirectMusicPerformance8ImplClonePMsg (LPDIRECTMUSICPERFORMANCE8 iface, DMUS_PMSG* pSourcePMSG, DMUS_PMSG** ppCopyPMSG);
+extern HRESULT WINAPI IDirectMusicPerformance8ImplCreateAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IUnknown* pSourceConfig, BOOL fActivate, IDirectMusicAudioPath** ppNewPath);
+extern HRESULT WINAPI IDirectMusicPerformance8ImplCreateStandardAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, DWORD dwType, DWORD dwPChannelCount, BOOL fActivate, IDirectMusicAudioPath** ppNewPath);
+extern HRESULT WINAPI IDirectMusicPerformance8ImplSetDefaultAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicAudioPath* pAudioPath);
+extern HRESULT WINAPI IDirectMusicPerformance8ImplGetDefaultAudioPath (LPDIRECTMUSICPERFORMANCE8 iface, IDirectMusicAudioPath** ppAudioPath);
+extern HRESULT WINAPI IDirectMusicPerformance8ImplGetParamEx (LPDIRECTMUSICPERFORMANCE8 iface, REFGUID rguidType, DWORD dwTrackID, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+
+/*****************************************************************************
+ * IDirectMusicGraphImpl implementation structure
+ */
+struct IDirectMusicGraphImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicGraph);
+  DWORD          ref;
+
+  /* IDirectMusicGraphImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicGraphImpl_QueryInterface (LPDIRECTMUSICGRAPH iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicGraphImpl_AddRef (LPDIRECTMUSICGRAPH iface);
+extern ULONG WINAPI   IDirectMusicGraphImpl_Release (LPDIRECTMUSICGRAPH iface);
+/* IDirectMusicGraph: */
+extern HRESULT WINAPI IDirectMusicGraphImpl_StampPMsg (LPDIRECTMUSICGRAPH iface, DMUS_PMSG* pPMSG);
+extern HRESULT WINAPI IDirectMusicGraphImpl_InsertTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool, DWORD* pdwPChannels, DWORD cPChannels, LONG lIndex);
+extern HRESULT WINAPI IDirectMusicGraphImpl_GetTool (LPDIRECTMUSICGRAPH iface, DWORD dwIndex, IDirectMusicTool** ppTool);
+extern HRESULT WINAPI IDirectMusicGraphImpl_RemoveTool (LPDIRECTMUSICGRAPH iface, IDirectMusicTool* pTool);
+
+/*****************************************************************************
+ * IDirectMusicStyleImpl implementation structure
+ */
+struct IDirectMusicStyleImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicStyle);
+  DWORD          ref;
+
+  /* IDirectMusicStyleImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicStyleImpl_QueryInterface (LPDIRECTMUSICSTYLE iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicStyleImpl_AddRef (LPDIRECTMUSICSTYLE iface);
+extern ULONG WINAPI   IDirectMusicStyleImpl_Release (LPDIRECTMUSICSTYLE iface);
+/* IDirectMusicStyle: */
+extern HRESULT WINAPI IDirectMusicStyleImpl_GetBand (LPDIRECTMUSICSTYLE iface, WCHAR* pwszName, IDirectMusicBand** ppBand);
+extern HRESULT WINAPI IDirectMusicStyleImpl_EnumBand (LPDIRECTMUSICSTYLE iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicStyleImpl_GetDefaultBand (LPDIRECTMUSICSTYLE iface, IDirectMusicBand** ppBand);
+extern HRESULT WINAPI IDirectMusicStyleImpl_EnumMotif (LPDIRECTMUSICSTYLE iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicStyleImpl_GetMotif (LPDIRECTMUSICSTYLE iface, WCHAR* pwszName, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicStyleImpl_GetDefaultChordMap (LPDIRECTMUSICSTYLE iface, IDirectMusicChordMap** ppChordMap);
+extern HRESULT WINAPI IDirectMusicStyleImpl_EnumChordMap (LPDIRECTMUSICSTYLE iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicStyleImpl_GetChordMap (LPDIRECTMUSICSTYLE iface, WCHAR* pwszName, IDirectMusicChordMap** ppChordMap);
+extern HRESULT WINAPI IDirectMusicStyleImpl_GetTimeSignature (LPDIRECTMUSICSTYLE iface, DMUS_TIMESIGNATURE* pTimeSig);
+extern HRESULT WINAPI IDirectMusicStyleImpl_GetEmbellishmentLength (LPDIRECTMUSICSTYLE iface, DWORD dwType, DWORD dwLevel, DWORD* pdwMin, DWORD* pdwMax);
+extern HRESULT WINAPI IDirectMusicStyleImpl_GetTempo (LPDIRECTMUSICSTYLE iface, double* pTempo);
+
+/*****************************************************************************
+ * IDirectMusicStyle8Impl implementation structure
+ */
+struct IDirectMusicStyle8Impl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicStyle8);
+  DWORD          ref;
+
+  /* IDirectMusicStyle8Impl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicStyle8Impl_QueryInterface (LPDIRECTMUSICSTYLE8 iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicStyle8Impl_AddRef (LPDIRECTMUSICSTYLE8 iface);
+extern ULONG WINAPI   IDirectMusicStyle8Impl_Release (LPDIRECTMUSICSTYLE8 iface);
+/* IDirectMusicStyle: */
+extern HRESULT WINAPI IDirectMusicStyle8Impl_GetBand (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicBand** ppBand);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_EnumBand (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_GetDefaultBand (LPDIRECTMUSICSTYLE8 iface, IDirectMusicBand** ppBand);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_EnumMotif (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_GetMotif (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_GetDefaultChordMap (LPDIRECTMUSICSTYLE8 iface, IDirectMusicChordMap** ppChordMap);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_EnumChordMap (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_GetChordMap (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicChordMap** ppChordMap);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_GetTimeSignature (LPDIRECTMUSICSTYLE8 iface, DMUS_TIMESIGNATURE* pTimeSig);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_GetEmbellishmentLength (LPDIRECTMUSICSTYLE8 iface, DWORD dwType, DWORD dwLevel, DWORD* pdwMin, DWORD* pdwMax);
+extern HRESULT WINAPI IDirectMusicStyle8Impl_GetTempo (LPDIRECTMUSICSTYLE8 iface, double* pTempo);
+/* IDirectMusicStyle8: */
+extern HRESULT WINAPI IDirectMusicStyle8ImplEnumPattern (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, DWORD dwPatternType, WCHAR* pwszName);
+
+/*****************************************************************************
+ * IDirectMusicChordMapImpl implementation structure
+ */
+struct IDirectMusicChordMapImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicChordMap);
+  DWORD          ref;
+
+  /* IDirectMusicGetLoaderImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicChordMapImpl_QueryInterface (LPDIRECTMUSICCHORDMAP iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicChordMapImpl_AddRef (LPDIRECTMUSICCHORDMAP iface);
+extern ULONG WINAPI   IDirectMusicChordMapImpl_Release (LPDIRECTMUSICCHORDMAP iface);
+/* IDirectMusicChordMap: */
+extern HRESULT WINAPI IDirectMusicChordMapImpl_GetScale (LPDIRECTMUSICCHORDMAP iface, DWORD* pdwScale);
+
+/*****************************************************************************
+ * IDirectMusicComposerImpl implementation structure
+ */
+struct IDirectMusicComposerImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicComposer);
+  DWORD          ref;
+
+  /* IDirectMusicComposerImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicComposerImpl_QueryInterface (LPDIRECTMUSICCOMPOSER iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicComposerImpl_AddRef (LPDIRECTMUSICCOMPOSER iface);
+extern ULONG WINAPI   IDirectMusicComposerImpl_Release (LPDIRECTMUSICCOMPOSER iface);
+/* IDirectMusicComposer: */
+extern HRESULT WINAPI IDirectMusicComposerImpl_ComposeSegmentFromTemplate (LPDIRECTMUSICCOMPOSER iface, IDirectMusicStyle* pStyle, IDirectMusicSegment* pTemplate, WORD wActivity, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppSegment);

+extern HRESULT WINAPI IDirectMusicComposerImpl_ComposeSegmentFromShape (LPDIRECTMUSICCOMPOSER iface, IDirectMusicStyle* pStyle, WORD wNumMeasures, WORD wShape, WORD wActivity, BOOL fIntro, BOOL fEnd, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppSegment);

+extern HRESULT WINAPI IDirectMusicComposerImpl_ComposeTransition (LPDIRECTMUSICCOMPOSER iface, IDirectMusicSegment* pFromSeg, IDirectMusicSegment* pToSeg, MUSIC_TIME mtTime, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppTransSeg);

+extern HRESULT WINAPI IDirectMusicComposerImpl_AutoTransition (LPDIRECTMUSICCOMPOSER iface, IDirectMusicPerformance* pPerformance, IDirectMusicSegment* pToSeg, WORD wCommand, DWORD dwFlags, IDirectMusicChordMap* pChordMap, IDirectMusicSegment** ppTransSeg, IDirectMusicSegmentState** ppToSegState, IDirectMusicSegmentState** ppTransSegState);

+extern HRESULT WINAPI IDirectMusicComposerImpl_ComposeTemplateFromShape (LPDIRECTMUSICCOMPOSER iface, WORD wNumMeasures, WORD wShape, BOOL fIntro, BOOL fEnd, WORD wEndLength, IDirectMusicSegment** ppTemplate);

+extern HRESULT WINAPI IDirectMusicComposerImpl_ChangeChordMap (LPDIRECTMUSICCOMPOSER iface, IDirectMusicSegment* pSegment, BOOL fTrackScale, IDirectMusicChordMap* pChordMap);
+
+/*****************************************************************************
+ * IDirectMusicPatternTrackImpl implementation structure
+ */
+struct IDirectMusicPatternTrackImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicPatternTrack);
+  DWORD          ref;
+
+  /* IDirectMusicComposerImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicPatternTrackImpl_QueryInterface (LPDIRECTMUSICPATTERNTRACK iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicPatternTrackImpl_AddRef (LPDIRECTMUSICPATTERNTRACK iface);
+extern ULONG WINAPI   IDirectMusicPatternTrackImpl_Release (LPDIRECTMUSICPATTERNTRACK iface);
+/* IDirectMusicPatternTrack: */
+extern HRESULT WINAPI IDirectMusicPatternTrackImpl_CreateSegment (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicStyle* pStyle, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicPatternTrackImpl_SetVariation (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicSegmentState* pSegState, DWORD dwVariationFlags, DWORD dwPart);
+extern HRESULT WINAPI IDirectMusicPatternTrackImpl_SetPatternByName (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicSegmentState* pSegState, WCHAR* wszName, IDirectMusicStyle* pStyle, DWORD dwPatternType, DWORD* pdwLength);
+
+/*****************************************************************************
+ * IDirectMusicScriptImpl implementation structure
+ */
+struct IDirectMusicScriptImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicScript);
+  DWORD          ref;
+
+  /* IDirectMusicScriptImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicScriptImpl_QueryInterface (LPDIRECTMUSICSCRIPT iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicScriptImpl_AddRef (LPDIRECTMUSICSCRIPT iface);
+extern ULONG WINAPI   IDirectMusicScriptImpl_Release (LPDIRECTMUSICSCRIPT iface);
+/* IDirectMusicScript: */
+extern HRESULT WINAPI IDirectMusicScriptImpl_Init (LPDIRECTMUSICSCRIPT iface, IDirectMusicPerformance* pPerformance, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_CallRoutine (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszRoutineName, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_SetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT varValue, BOOL fSetRef, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_GetVariableVariant (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, VARIANT* pvarValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_SetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG lValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_GetVariableNumber (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, LONG* plValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_SetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, IUnknown* punkValue, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_GetVariableObject (LPDIRECTMUSICSCRIPT iface, WCHAR* pwszVariableName, REFIID riid, LPVOID* ppv, DMUS_SCRIPT_ERRORINFO* pErrorInfo);
+extern HRESULT WINAPI IDirectMusicScriptImpl_EnumRoutine (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName);
+extern HRESULT WINAPI IDirectMusicScriptImpl_EnumVariable (LPDIRECTMUSICSCRIPT iface, DWORD dwIndex, WCHAR* pwszName);
+
+/*****************************************************************************
+ * IDirectMusicContainerImpl implementation structure
+ */
+struct IDirectMusicContainerImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicContainer);
+  DWORD          ref;
+
+  /* IDirectMusicContainerImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicContainerImpl_QueryInterface (LPDIRECTMUSICCONTAINER iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicContainerImpl_AddRef (LPDIRECTMUSICCONTAINER iface);
+extern ULONG WINAPI   IDirectMusicContainerImpl_Release (LPDIRECTMUSICCONTAINER iface);
+/* IDirectMusicContainer: */
+extern HRESULT WINAPI IDirectMusicContainerImpl_EnumObject (LPDIRECTMUSICCONTAINER iface, REFGUID rguidClass, DWORD dwIndex, LPDMUS_OBJECTDESC pDesc, WCHAR* pwszAlias);
+
+/*****************************************************************************
+ * IDirectMusicSongImpl implementation structure
+ */
+struct IDirectMusicSongImpl
+{
+  /* IUnknown fields */
+  ICOM_VFIELD(IDirectMusicSong);
+  DWORD          ref;
+
+  /* IDirectMusicSongImpl fields */
+};
+
+/* IUnknown: */
+extern HRESULT WINAPI IDirectMusicSongImpl_QueryInterface (LPDIRECTMUSICSONG iface, REFIID riid, LPVOID *ppobj);
+extern ULONG WINAPI   IDirectMusicSongImpl_AddRef (LPDIRECTMUSICSONG iface);
+extern ULONG WINAPI   IDirectMusicSongImpll_Release (LPDIRECTMUSICSONG iface);
+/* IDirectMusicContainer: */
+extern HRESULT WINAPI IDirectMusicSongImpl_Compose (LPDIRECTMUSICSONG iface);
+extern HRESULT WINAPI IDirectMusicSongImpl_GetParam (LPDIRECTMUSICSONG iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam);
+extern HRESULT WINAPI IDirectMusicSongImpl_GetSegment (LPDIRECTMUSICSONG iface, WCHAR* pwzName, IDirectMusicSegment** ppSegment);
+extern HRESULT WINAPI IDirectMusicSongImpl_GetAudioPathConfig (LPDIRECTMUSICSONG iface, IUnknown** ppAudioPathConfig);
+extern HRESULT WINAPI IDirectMusicSongImpl_Download (LPDIRECTMUSICSONG iface, IUnknown* pAudioPath);
+extern HRESULT WINAPI IDirectMusicSongImpl_Unload (LPDIRECTMUSICSONG iface, IUnknown* pAudioPath);
+extern HRESULT WINAPI IDirectMusicSongImpl_EnumSegment (LPDIRECTMUSICSONG iface, DWORD dwIndex, IDirectMusicSegment** ppSegment);
+
 #endif	/* __WINE_DMUSIC_PRIVATE_H */
diff --git a/dlls/dmusic/dmusic_segment.c b/dlls/dmusic/dmusic_segment.c
new file mode 100644
index 0000000..2e46679
--- /dev/null
+++ b/dlls/dmusic/dmusic_segment.c
@@ -0,0 +1,714 @@
+/* IDirectMusicSegment Implementation
+ * IDirectMusicSegment8 Implementation
+ * IDirectMusicSegmentState Implementation
+ * IDirectMusicSegmentState8 Implementation
+ * IDirectMusicPatternTrack 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);
+
+/* IDirectMusicSegment IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicSegmentImpl_QueryInterface (LPDIRECTMUSICSEGMENT iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicSegmentImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicSegment))
+	{
+		IDirectMusicSegmentImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicSegmentImpl_AddRef (LPDIRECTMUSICSEGMENT iface)
+{
+	ICOM_THIS(IDirectMusicSegmentImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicSegmentImpl_Release (LPDIRECTMUSICSEGMENT iface)
+{
+	ICOM_THIS(IDirectMusicSegmentImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicSegment Interface follow: */
+HRESULT WINAPI IDirectMusicSegmentImpl_GetLength (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME* pmtLength)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_SetLength (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME mtLength)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_GetRepeats (LPDIRECTMUSICSEGMENT iface, DWORD* pdwRepeats)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_SetRepeats (LPDIRECTMUSICSEGMENT iface, DWORD dwRepeats)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_GetDefaultResolution (LPDIRECTMUSICSEGMENT iface, DWORD* pdwResolution)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_SetDefaultResolution (LPDIRECTMUSICSEGMENT iface, DWORD dwResolution)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_GetTrack (LPDIRECTMUSICSEGMENT iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack** ppTrack)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_GetTrackGroup (LPDIRECTMUSICSEGMENT iface, IDirectMusicTrack* pTrack, DWORD* pdwGroupBits)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_InsertTrack (LPDIRECTMUSICSEGMENT iface, IDirectMusicTrack* pTrack, DWORD dwGroupBits)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_RemoveTrack (LPDIRECTMUSICSEGMENT iface, IDirectMusicTrack* pTrack)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_InitPlay (LPDIRECTMUSICSEGMENT iface, IDirectMusicSegmentState** ppSegState, IDirectMusicPerformance* pPerformance, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_GetGraph (LPDIRECTMUSICSEGMENT iface, IDirectMusicGraph** ppGraph)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_SetGraph (LPDIRECTMUSICSEGMENT iface, IDirectMusicGraph* pGraph)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_AddNotificationType (LPDIRECTMUSICSEGMENT iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_RemoveNotificationType (LPDIRECTMUSICSEGMENT iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_GetParam (LPDIRECTMUSICSEGMENT iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_SetParam (LPDIRECTMUSICSEGMENT iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_Clone (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_SetStartPoint (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME mtStart)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_GetStartPoint (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME* pmtStart)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_SetLoopPoints (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_GetLoopPoints (LPDIRECTMUSICSEGMENT iface, MUSIC_TIME* pmtStart, MUSIC_TIME* pmtEnd)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentImpl_SetPChannelsUsed (LPDIRECTMUSICSEGMENT iface, DWORD dwNumPChannels, DWORD* paPChannels)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicSegment) DirectMusicSegment_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicSegmentImpl_QueryInterface,
+	IDirectMusicSegmentImpl_AddRef,
+	IDirectMusicSegmentImpl_Release,
+	IDirectMusicSegmentImpl_GetLength,
+	IDirectMusicSegmentImpl_SetLength,
+	IDirectMusicSegmentImpl_GetRepeats,
+	IDirectMusicSegmentImpl_SetRepeats,
+	IDirectMusicSegmentImpl_GetDefaultResolution,
+	IDirectMusicSegmentImpl_SetDefaultResolution,
+	IDirectMusicSegmentImpl_GetTrack,
+	IDirectMusicSegmentImpl_GetTrackGroup,
+	IDirectMusicSegmentImpl_InsertTrack,
+	IDirectMusicSegmentImpl_RemoveTrack,
+	IDirectMusicSegmentImpl_InitPlay,
+	IDirectMusicSegmentImpl_GetGraph,
+	IDirectMusicSegmentImpl_SetGraph,
+	IDirectMusicSegmentImpl_AddNotificationType,
+	IDirectMusicSegmentImpl_RemoveNotificationType,
+	IDirectMusicSegmentImpl_GetParam,
+	IDirectMusicSegmentImpl_SetParam,
+	IDirectMusicSegmentImpl_Clone,
+	IDirectMusicSegmentImpl_SetStartPoint,
+	IDirectMusicSegmentImpl_GetStartPoint,
+	IDirectMusicSegmentImpl_SetLoopPoints,
+	IDirectMusicSegmentImpl_GetLoopPoints,
+	IDirectMusicSegmentImpl_SetPChannelsUsed
+};
+
+
+/* IDirectMusicSegment8 IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicSegment8Impl_QueryInterface (LPDIRECTMUSICSEGMENT8 iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicSegment8Impl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicSegment8))
+	{
+		IDirectMusicSegment8Impl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicSegment8Impl_AddRef (LPDIRECTMUSICSEGMENT8 iface)
+{
+	ICOM_THIS(IDirectMusicSegment8Impl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicSegment8Impl_Release (LPDIRECTMUSICSEGMENT8 iface)
+{
+	ICOM_THIS(IDirectMusicSegment8Impl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicSegment Interface part follow: */
+HRESULT WINAPI IDirectMusicSegment8Impl_GetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtLength)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_SetLength (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtLength)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_GetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwRepeats)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_SetRepeats (LPDIRECTMUSICSEGMENT8 iface, DWORD dwRepeats)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_GetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD* pdwResolution)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_SetDefaultResolution (LPDIRECTMUSICSEGMENT8 iface, DWORD dwResolution)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_GetTrack (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, IDirectMusicTrack** ppTrack)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_GetTrackGroup (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD* pdwGroupBits)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_InsertTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack, DWORD dwGroupBits)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_RemoveTrack (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicTrack* pTrack)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_InitPlay (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicSegmentState** ppSegState, IDirectMusicPerformance* pPerformance, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_GetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph** ppGraph)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_SetGraph (LPDIRECTMUSICSEGMENT8 iface, IDirectMusicGraph* pGraph)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_AddNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_RemoveNotificationType (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidNotificationType)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_GetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, MUSIC_TIME* pmtNext, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_SetParam (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidType, DWORD dwGroupBits, DWORD dwIndex, MUSIC_TIME mtTime, void* pParam)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_Clone (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_SetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_GetStartPoint (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_SetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtStart, MUSIC_TIME mtEnd)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_GetLoopPoints (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME* pmtStart, MUSIC_TIME* pmtEnd)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_SetPChannelsUsed (LPDIRECTMUSICSEGMENT8 iface, DWORD dwNumPChannels, DWORD* paPChannels)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+/* IDirectMusicSegment Interface part follow: */
+HRESULT WINAPI IDirectMusicSegment8Impl_SetTrackConfig (LPDIRECTMUSICSEGMENT8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_GetAudioPathConfig (LPDIRECTMUSICSEGMENT8 iface, IUnknown** ppAudioPathConfig)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_Compose (LPDIRECTMUSICSEGMENT8 iface, MUSIC_TIME mtTime, IDirectMusicSegment* pFromSegment, IDirectMusicSegment* pToSegment, IDirectMusicSegment** ppComposedSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_Download (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegment8Impl_Unload (LPDIRECTMUSICSEGMENT8 iface, IUnknown *pAudioPath)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicSegment8) DirectMusicSegment8_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicSegment8Impl_QueryInterface,
+	IDirectMusicSegment8Impl_AddRef,
+	IDirectMusicSegment8Impl_Release,
+	IDirectMusicSegment8Impl_GetLength,
+	IDirectMusicSegment8Impl_SetLength,
+	IDirectMusicSegment8Impl_GetRepeats,
+	IDirectMusicSegment8Impl_SetRepeats,
+	IDirectMusicSegment8Impl_GetDefaultResolution,
+	IDirectMusicSegment8Impl_SetDefaultResolution,
+	IDirectMusicSegment8Impl_GetTrack,
+	IDirectMusicSegment8Impl_GetTrackGroup,
+	IDirectMusicSegment8Impl_InsertTrack,
+	IDirectMusicSegment8Impl_RemoveTrack,
+	IDirectMusicSegment8Impl_InitPlay,
+	IDirectMusicSegment8Impl_GetGraph,
+	IDirectMusicSegment8Impl_SetGraph,
+	IDirectMusicSegment8Impl_AddNotificationType,
+	IDirectMusicSegment8Impl_RemoveNotificationType,
+	IDirectMusicSegment8Impl_GetParam,
+	IDirectMusicSegment8Impl_SetParam,
+	IDirectMusicSegment8Impl_Clone,
+	IDirectMusicSegment8Impl_SetStartPoint,
+	IDirectMusicSegment8Impl_GetStartPoint,
+	IDirectMusicSegment8Impl_SetLoopPoints,
+	IDirectMusicSegment8Impl_GetLoopPoints,
+	IDirectMusicSegment8Impl_SetPChannelsUsed,
+	IDirectMusicSegment8Impl_SetTrackConfig,
+	IDirectMusicSegment8Impl_GetAudioPathConfig,
+	IDirectMusicSegment8Impl_Compose,
+	IDirectMusicSegment8Impl_Download,
+	IDirectMusicSegment8Impl_Unload
+};
+
+
+/* IDirectMusicSegmentState IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicSegmentStateImpl_QueryInterface (LPDIRECTMUSICSEGMENTSTATE iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicSegmentStateImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicSegmentState))
+	{
+		IDirectMusicSegmentStateImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicSegmentStateImpl_AddRef (LPDIRECTMUSICSEGMENTSTATE iface)
+{
+	ICOM_THIS(IDirectMusicSegmentStateImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicSegmentStateImpl_Release (LPDIRECTMUSICSEGMENTSTATE iface)
+{
+	ICOM_THIS(IDirectMusicSegmentStateImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicSegmentState Interface follow: */
+HRESULT WINAPI IDirectMusicSegmentStateImpl_GetRepeats (LPDIRECTMUSICSEGMENTSTATE iface,  DWORD* pdwRepeats)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentStateImpl_GetSegment (LPDIRECTMUSICSEGMENTSTATE iface, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentStateImpl_GetStartTime (LPDIRECTMUSICSEGMENTSTATE iface, MUSIC_TIME* pmtStart)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentStateImpl_GetSeek (LPDIRECTMUSICSEGMENTSTATE iface, MUSIC_TIME* pmtSeek)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentStateImpl_GetStartPoint (LPDIRECTMUSICSEGMENTSTATE iface, MUSIC_TIME* pmtStart)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicSegmentState) DirectMusicSegmentState_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicSegmentStateImpl_QueryInterface,
+	IDirectMusicSegmentStateImpl_AddRef,
+	IDirectMusicSegmentStateImpl_Release,
+	IDirectMusicSegmentStateImpl_GetRepeats,
+	IDirectMusicSegmentStateImpl_GetSegment,
+	IDirectMusicSegmentStateImpl_GetStartTime,
+	IDirectMusicSegmentStateImpl_GetSeek,
+	IDirectMusicSegmentStateImpl_GetStartPoint
+};
+
+/* IDirectMusicSegmentState8 IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicSegmentState8Impl_QueryInterface (LPDIRECTMUSICSEGMENTSTATE8 iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicSegmentState8))
+	{
+		IDirectMusicSegmentState8Impl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicSegmentState8Impl_AddRef (LPDIRECTMUSICSEGMENTSTATE8 iface)
+{
+	ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicSegmentState8Impl_Release (LPDIRECTMUSICSEGMENTSTATE8 iface)
+{
+	ICOM_THIS(IDirectMusicSegmentState8Impl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicSegmentState Interface part follow: */
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetRepeats (LPDIRECTMUSICSEGMENTSTATE8 iface,  DWORD* pdwRepeats)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetSegment (LPDIRECTMUSICSEGMENTSTATE8 iface, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetStartTime (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtStart)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetSeek (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtSeek)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetStartPoint (LPDIRECTMUSICSEGMENTSTATE8 iface, MUSIC_TIME* pmtStart)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+/* IDirectMusicSegmentState8 Interface part follow: */
+HRESULT WINAPI IDirectMusicSegmentState8Impl_SetTrackConfig (LPDIRECTMUSICSEGMENTSTATE8 iface, REFGUID rguidTrackClassID, DWORD dwGroupBits, DWORD dwIndex, DWORD dwFlagsOn, DWORD dwFlagsOff)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSegmentState8Impl_GetObjectInPath (LPDIRECTMUSICSEGMENTSTATE8 iface, DWORD dwPChannel, DWORD dwStage, DWORD dwBuffer, REFGUID guidObject, DWORD dwIndex, REFGUID iidInterface, void** ppObject)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicSegmentState8) DirectMusicSegmentState8_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicSegmentState8Impl_QueryInterface,
+	IDirectMusicSegmentState8Impl_AddRef,
+	IDirectMusicSegmentState8Impl_Release,
+	IDirectMusicSegmentState8Impl_GetRepeats,
+	IDirectMusicSegmentState8Impl_GetSegment,
+	IDirectMusicSegmentState8Impl_GetStartTime,
+	IDirectMusicSegmentState8Impl_GetSeek,
+	IDirectMusicSegmentState8Impl_GetStartPoint,
+	IDirectMusicSegmentState8Impl_SetTrackConfig,
+	IDirectMusicSegmentState8Impl_GetObjectInPath
+};
+
+
+/* IDirectMusicPatternTrack IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicPatternTrackImpl_QueryInterface (LPDIRECTMUSICPATTERNTRACK iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicPatternTrackImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicPatternTrack))
+	{
+		IDirectMusicPatternTrackImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicPatternTrackImpl_AddRef (LPDIRECTMUSICPATTERNTRACK iface)
+{
+	ICOM_THIS(IDirectMusicPatternTrackImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicPatternTrackImpl_Release (LPDIRECTMUSICPATTERNTRACK iface)
+{
+	ICOM_THIS(IDirectMusicPatternTrackImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicPatternTrack Interface follow: */
+HRESULT WINAPI IDirectMusicPatternTrackImpl_CreateSegment (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicStyle* pStyle, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPatternTrackImpl_SetVariation (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicSegmentState* pSegState, DWORD dwVariationFlags, DWORD dwPart)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicPatternTrackImpl_SetPatternByName (LPDIRECTMUSICPATTERNTRACK iface, IDirectMusicSegmentState* pSegState, WCHAR* wszName, IDirectMusicStyle* pStyle, DWORD dwPatternType, DWORD* pdwLength)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicPatternTrack) DirectMusicPatternTrack_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicPatternTrackImpl_QueryInterface,
+	IDirectMusicPatternTrackImpl_AddRef,
+	IDirectMusicPatternTrackImpl_Release,
+	IDirectMusicPatternTrackImpl_CreateSegment,
+	IDirectMusicPatternTrackImpl_SetVariation,
+	IDirectMusicPatternTrackImpl_SetPatternByName
+};
diff --git a/dlls/dmusic/dmusic_style.c b/dlls/dmusic/dmusic_style.c
new file mode 100644
index 0000000..8b9e535
--- /dev/null
+++ b/dlls/dmusic/dmusic_style.c
@@ -0,0 +1,278 @@
+/* IDirectMusicStyle Implementation
+ * IDirectMusicStyle8 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);
+
+/* IDirectMusicStyle IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicStyleImpl_QueryInterface (LPDIRECTMUSICSTYLE iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicStyleImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicStyle))
+	{
+		IDirectMusicStyleImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicStyleImpl_AddRef (LPDIRECTMUSICSTYLE iface)
+{
+	ICOM_THIS(IDirectMusicStyleImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicStyleImpl_Release (LPDIRECTMUSICSTYLE iface)
+{
+	ICOM_THIS(IDirectMusicStyleImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicStyle Interface follow: */
+HRESULT WINAPI IDirectMusicStyleImpl_GetBand (LPDIRECTMUSICSTYLE iface, WCHAR* pwszName, IDirectMusicBand** ppBand)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleImpl_EnumBand (LPDIRECTMUSICSTYLE iface, DWORD dwIndex, WCHAR* pwszName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleImpl_GetDefaultBand (LPDIRECTMUSICSTYLE iface, IDirectMusicBand** ppBand)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleImpl_EnumMotif (LPDIRECTMUSICSTYLE iface, DWORD dwIndex, WCHAR* pwszName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleImpl_GetMotif (LPDIRECTMUSICSTYLE iface, WCHAR* pwszName, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleImpl_GetDefaultChordMap (LPDIRECTMUSICSTYLE iface, IDirectMusicChordMap** ppChordMap)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleImpl_EnumChordMap (LPDIRECTMUSICSTYLE iface, DWORD dwIndex, WCHAR* pwszName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleImpl_GetChordMap (LPDIRECTMUSICSTYLE iface, WCHAR* pwszName, IDirectMusicChordMap** ppChordMap)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleImpl_GetTimeSignature (LPDIRECTMUSICSTYLE iface, DMUS_TIMESIGNATURE* pTimeSig)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleImpl_GetEmbellishmentLength (LPDIRECTMUSICSTYLE iface, DWORD dwType, DWORD dwLevel, DWORD* pdwMin, DWORD* pdwMax)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyleImpl_GetTempo (LPDIRECTMUSICSTYLE iface, double* pTempo)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicStyle) DirectMusicStyle_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicStyleImpl_QueryInterface,
+	IDirectMusicStyleImpl_AddRef,
+	IDirectMusicStyleImpl_Release,
+	IDirectMusicStyleImpl_GetBand,
+	IDirectMusicStyleImpl_EnumBand,
+	IDirectMusicStyleImpl_GetDefaultBand,
+	IDirectMusicStyleImpl_EnumMotif,
+	IDirectMusicStyleImpl_GetMotif,
+	IDirectMusicStyleImpl_GetDefaultChordMap,
+	IDirectMusicStyleImpl_EnumChordMap,
+	IDirectMusicStyleImpl_GetChordMap,
+	IDirectMusicStyleImpl_GetTimeSignature,
+	IDirectMusicStyleImpl_GetEmbellishmentLength,
+	IDirectMusicStyleImpl_GetTempo
+};
+
+
+/* IDirectMusicStyle8 IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicStyle8Impl_QueryInterface (LPDIRECTMUSICSTYLE8 iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicStyle8Impl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicStyle8))
+	{
+		IDirectMusicStyle8Impl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicStyle8Impl_AddRef (LPDIRECTMUSICSTYLE8 iface)
+{
+	ICOM_THIS(IDirectMusicStyle8Impl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicStyle8Impl_Release (LPDIRECTMUSICSTYLE8 iface)
+{
+	ICOM_THIS(IDirectMusicStyle8Impl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicStyle Interface part follow: */
+HRESULT WINAPI IDirectMusicStyle8Impl_GetBand (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicBand** ppBand)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_EnumBand (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_GetDefaultBand (LPDIRECTMUSICSTYLE8 iface, IDirectMusicBand** ppBand)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_EnumMotif (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_GetMotif (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicSegment** ppSegment)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_GetDefaultChordMap (LPDIRECTMUSICSTYLE8 iface, IDirectMusicChordMap** ppChordMap)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_EnumChordMap (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, WCHAR* pwszName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_GetChordMap (LPDIRECTMUSICSTYLE8 iface, WCHAR* pwszName, IDirectMusicChordMap** ppChordMap)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_GetTimeSignature (LPDIRECTMUSICSTYLE8 iface, DMUS_TIMESIGNATURE* pTimeSig)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_GetEmbellishmentLength (LPDIRECTMUSICSTYLE8 iface, DWORD dwType, DWORD dwLevel, DWORD* pdwMin, DWORD* pdwMax)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicStyle8Impl_GetTempo (LPDIRECTMUSICSTYLE8 iface, double* pTempo)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+/* IDirectMusicStyle8 Interface part follow: */
+HRESULT WINAPI IDirectMusicStyle8ImplEnumPattern (LPDIRECTMUSICSTYLE8 iface, DWORD dwIndex, DWORD dwPatternType, WCHAR* pwszName)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicStyle8) DirectMusicStyle8_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicStyle8Impl_QueryInterface,
+	IDirectMusicStyle8Impl_AddRef,
+	IDirectMusicStyle8Impl_Release,
+	IDirectMusicStyle8Impl_GetBand,
+	IDirectMusicStyle8Impl_EnumBand,
+	IDirectMusicStyle8Impl_GetDefaultBand,
+	IDirectMusicStyle8Impl_EnumMotif,
+	IDirectMusicStyle8Impl_GetMotif,
+	IDirectMusicStyle8Impl_GetDefaultChordMap,
+	IDirectMusicStyle8Impl_EnumChordMap,
+	IDirectMusicStyle8Impl_GetChordMap,
+	IDirectMusicStyle8Impl_GetTimeSignature,
+	IDirectMusicStyle8Impl_GetEmbellishmentLength,
+	IDirectMusicStyle8Impl_GetTempo,
+	IDirectMusicStyle8ImplEnumPattern
+};
diff --git a/dlls/dmusic/dmusic_synth.c b/dlls/dmusic/dmusic_synth.c
new file mode 100644
index 0000000..f1a4dbb
--- /dev/null
+++ b/dlls/dmusic/dmusic_synth.c
@@ -0,0 +1,491 @@
+/* IDirectMusicSynth Implementation
+ * IDirectMusicSynth8 Implementation
+ * IDirectMusicSynthSink 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);
+
+/* IDirectMusicSynth IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicSynthImpl_QueryInterface (LPDIRECTMUSICSYNTH iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicSynthImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicSynth))
+	{
+		IDirectMusicSynthImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicSynthImpl_AddRef (LPDIRECTMUSICSYNTH iface)
+{
+	ICOM_THIS(IDirectMusicSynthImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicSynthImpl_Release (LPDIRECTMUSICSYNTH iface)
+{
+	ICOM_THIS(IDirectMusicSynthImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicSynth Interface follow: */
+HRESULT WINAPI IDirectMusicSynthImpl_Open (LPDIRECTMUSICSYNTH iface, LPDMUS_PORTPARAMS pPortParams)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_Close (LPDIRECTMUSICSYNTH iface)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_SetNumChannelGroups (LPDIRECTMUSICSYNTH iface, DWORD dwGroups)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_Download (LPDIRECTMUSICSYNTH iface, LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_Unload (LPDIRECTMUSICSYNTH iface, HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_PlayBuffer (LPDIRECTMUSICSYNTH iface, REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_GetRunningStats (LPDIRECTMUSICSYNTH iface, LPDMUS_SYNTHSTATS pStats)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_GetPortCaps (LPDIRECTMUSICSYNTH iface, LPDMUS_PORTCAPS pCaps)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_SetMasterClock (LPDIRECTMUSICSYNTH iface, IReferenceClock* pClock)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_GetLatencyClock (LPDIRECTMUSICSYNTH iface, IReferenceClock** ppClock)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_Activate (LPDIRECTMUSICSYNTH iface, BOOL fEnable)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_SetSynthSink (LPDIRECTMUSICSYNTH iface, IDirectMusicSynthSink* pSynthSink)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_Render (LPDIRECTMUSICSYNTH iface, short* pBuffer, DWORD dwLength, LONGLONG llPosition)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_SetChannelPriority (LPDIRECTMUSICSYNTH iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_GetChannelPriority (LPDIRECTMUSICSYNTH iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_GetFormat (LPDIRECTMUSICSYNTH iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynthImpl_GetAppend (LPDIRECTMUSICSYNTH iface, DWORD* pdwAppend)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicSynth) DirectMusicSynth_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicSynthImpl_QueryInterface,
+	IDirectMusicSynthImpl_AddRef,
+	IDirectMusicSynthImpl_Release,
+	IDirectMusicSynthImpl_Open,
+	IDirectMusicSynthImpl_Close,
+	IDirectMusicSynthImpl_SetNumChannelGroups,
+	IDirectMusicSynthImpl_Download,
+	IDirectMusicSynthImpl_Unload,
+	IDirectMusicSynthImpl_PlayBuffer,
+	IDirectMusicSynthImpl_GetRunningStats,
+	IDirectMusicSynthImpl_GetPortCaps,
+	IDirectMusicSynthImpl_SetMasterClock,
+	IDirectMusicSynthImpl_GetLatencyClock,
+	IDirectMusicSynthImpl_Activate,
+	IDirectMusicSynthImpl_SetSynthSink,
+	IDirectMusicSynthImpl_Render,
+	IDirectMusicSynthImpl_SetChannelPriority,
+	IDirectMusicSynthImpl_GetChannelPriority,
+	IDirectMusicSynthImpl_GetFormat,
+	IDirectMusicSynthImpl_GetAppend
+};
+
+
+/* IDirectMusicSynth8 IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicSynth8Impl_QueryInterface (LPDIRECTMUSICSYNTH8 iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicSynth8Impl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicSynth8))
+	{
+		IDirectMusicSynth8Impl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicSynth8Impl_AddRef (LPDIRECTMUSICSYNTH8 iface)
+{
+	ICOM_THIS(IDirectMusicSynth8Impl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicSynth8Impl_Release (LPDIRECTMUSICSYNTH8 iface)
+{
+	ICOM_THIS(IDirectMusicSynth8Impl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicSynth Interface parts follow: */
+HRESULT WINAPI IDirectMusicSynth8Impl_Open (LPDIRECTMUSICSYNTH8 iface, LPDMUS_PORTPARAMS pPortParams)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_Close (LPDIRECTMUSICSYNTH8 iface)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_SetNumChannelGroups (LPDIRECTMUSICSYNTH8 iface, DWORD dwGroups)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_Download (LPDIRECTMUSICSYNTH8 iface, LPHANDLE phDownload, LPVOID pvData, LPBOOL pbFree)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_Unload (LPDIRECTMUSICSYNTH8 iface, HANDLE hDownload, HRESULT (CALLBACK* lpFreeHandle)(HANDLE,HANDLE), HANDLE hUserData)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_PlayBuffer (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, LPBYTE pbBuffer, DWORD cbBuffer)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_GetRunningStats (LPDIRECTMUSICSYNTH8 iface, LPDMUS_SYNTHSTATS pStats)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_GetPortCaps (LPDIRECTMUSICSYNTH8 iface, LPDMUS_PORTCAPS pCaps)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_SetMasterClock (LPDIRECTMUSICSYNTH8 iface, IReferenceClock* pClock)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_GetLatencyClock (LPDIRECTMUSICSYNTH8 iface, IReferenceClock** ppClock)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_Activate (LPDIRECTMUSICSYNTH8 iface, BOOL fEnable)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_SetSynthSink (LPDIRECTMUSICSYNTH8 iface, IDirectMusicSynthSink* pSynthSink)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_Render (LPDIRECTMUSICSYNTH8 iface, short* pBuffer, DWORD dwLength, LONGLONG llPosition)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_SetChannelPriority (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_GetChannelPriority (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_GetFormat (LPDIRECTMUSICSYNTH8 iface, LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSiz)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_GetAppend (LPDIRECTMUSICSYNTH8 iface, DWORD* pdwAppend)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+/* IDirectMusicSynth8 Interface parts follow: */
+HRESULT WINAPI IDirectMusicSynth8Impl_PlayVoice (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, DWORD dwVoiceId, DWORD dwChannelGroup, DWORD dwChannel, DWORD dwDLId, long prPitch, long vrVolume, SAMPLE_TIME stVoiceStart, SAMPLE_TIME stLoopStart, SAMPLE_TIME stLoopEnd)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_StopVoice (LPDIRECTMUSICSYNTH8 iface, REFERENCE_TIME rt, DWORD dwVoiceId)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_GetVoiceState (LPDIRECTMUSICSYNTH8 iface, DWORD dwVoice[], DWORD cbVoice, DMUS_VOICE_STATE dwVoiceState[])
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_Refresh (LPDIRECTMUSICSYNTH8 iface, DWORD dwDownloadID, DWORD dwFlags)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSynth8Impl_AssignChannelToBuses (LPDIRECTMUSICSYNTH8 iface, DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwBuses, DWORD cBuses)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicSynth8) DirectMusicSynth8_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicSynth8Impl_QueryInterface,
+	IDirectMusicSynth8Impl_AddRef,
+	IDirectMusicSynth8Impl_Release,
+	IDirectMusicSynth8Impl_Open,
+	IDirectMusicSynth8Impl_Close,
+	IDirectMusicSynth8Impl_SetNumChannelGroups,
+	IDirectMusicSynth8Impl_Download,
+	IDirectMusicSynth8Impl_Unload,
+	IDirectMusicSynth8Impl_PlayBuffer,
+	IDirectMusicSynth8Impl_GetRunningStats,
+	IDirectMusicSynth8Impl_GetPortCaps,
+	IDirectMusicSynth8Impl_SetMasterClock,
+	IDirectMusicSynth8Impl_GetLatencyClock,
+	IDirectMusicSynth8Impl_Activate,
+	IDirectMusicSynth8Impl_SetSynthSink,
+	IDirectMusicSynth8Impl_Render,
+	IDirectMusicSynth8Impl_SetChannelPriority,
+	IDirectMusicSynth8Impl_GetChannelPriority,
+	IDirectMusicSynth8Impl_GetFormat,
+	IDirectMusicSynth8Impl_GetAppend,
+	IDirectMusicSynth8Impl_PlayVoice,
+	IDirectMusicSynth8Impl_StopVoice,
+	IDirectMusicSynth8Impl_GetVoiceState,
+	IDirectMusicSynth8Impl_Refresh,
+	IDirectMusicSynth8Impl_AssignChannelToBuses
+};
+
+
+/* IDirectMusicSynthSink IUnknown parts follow: */
+HRESULT WINAPI IDirectMusicSynthSinkImpl_QueryInterface (LPDIRECTMUSICSYNTHSINK iface, REFIID riid, LPVOID *ppobj)
+{
+	ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
+
+	if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectMusicSynthSink))
+	{
+		IDirectMusicSynthSinkImpl_AddRef(iface);
+		*ppobj = This;
+		return DS_OK;
+	}
+	WARN("(%p)->(%s,%p),not found\n",This,debugstr_guid(riid),ppobj);
+	return E_NOINTERFACE;
+}
+
+ULONG WINAPI IDirectMusicSynthSinkImpl_AddRef (LPDIRECTMUSICSYNTHSINK iface)
+{
+	ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
+	TRACE("(%p) : AddRef from %ld\n", This, This->ref);
+	return ++(This->ref);
+}
+
+ULONG WINAPI IDirectMusicSynthSinkImpl_Release (LPDIRECTMUSICSYNTHSINK iface)
+{
+	ICOM_THIS(IDirectMusicSynthSinkImpl,iface);
+	ULONG ref = --This->ref;
+	TRACE("(%p) : ReleaseRef to %ld\n", This, This->ref);
+	if (ref == 0)
+	{
+		HeapFree(GetProcessHeap(), 0, This);
+	}
+	return ref;
+}
+
+/* IDirectMusicSynth Interface follow: */
+HRESULT WINAPI IDirectMusicSinkSynthImpl_Init (LPDIRECTMUSICSYNTHSINK iface, IDirectMusicSynth* pSynth)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSinkSynthImpl_SetMasterClock (LPDIRECTMUSICSYNTHSINK iface, IReferenceClock* pClock)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSinkSynthImpl_GetLatencyClock (LPDIRECTMUSICSYNTHSINK iface, IReferenceClock** ppClock)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSinkSynthImpl_Activate (LPDIRECTMUSICSYNTHSINK iface, BOOL fEnable)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSinkSynthImpl_SampleToRefTime (LPDIRECTMUSICSYNTHSINK iface, LONGLONG llSampleTime, REFERENCE_TIME* prfTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSinkSynthImpl_RefTimeToSample (LPDIRECTMUSICSYNTHSINK iface, REFERENCE_TIME rfTime, LONGLONG* pllSampleTime)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSinkSynthImpl_SetDirectSound (LPDIRECTMUSICSYNTHSINK iface, LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+HRESULT WINAPI IDirectMusicSinkSynthImpl_GetDesiredBufferSize (LPDIRECTMUSICSYNTHSINK iface, LPDWORD pdwBufferSizeInSamples)
+{
+	FIXME("stub\n");
+	return DS_OK;
+}
+
+ICOM_VTABLE(IDirectMusicSynthSink) DirectMusicSynthSink_Vtbl =
+{
+    ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
+	IDirectMusicSynthSinkImpl_QueryInterface,
+	IDirectMusicSynthSinkImpl_AddRef,
+	IDirectMusicSynthSinkImpl_Release,
+	IDirectMusicSinkSynthImpl_Init,
+	IDirectMusicSinkSynthImpl_SetMasterClock,
+	IDirectMusicSinkSynthImpl_GetLatencyClock,
+	IDirectMusicSinkSynthImpl_Activate,
+	IDirectMusicSinkSynthImpl_SampleToRefTime,
+	IDirectMusicSinkSynthImpl_RefTimeToSample,
+	IDirectMusicSinkSynthImpl_SetDirectSound,
+	IDirectMusicSinkSynthImpl_GetDesiredBufferSize
+};
diff --git a/dlls/dmusic/dmusic_thru.c b/dlls/dmusic/dmusic_thru.c
deleted file mode 100644
index 26711b5..0000000
--- a/dlls/dmusic/dmusic_thru.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* 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
deleted file mode 100644
index 9f4678e..0000000
--- a/dlls/dmusic/reference_clock.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * 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
-};