1 /* DirectMusic Private Include
3 * Copyright (C) 2003 Rok Mandeljc
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Library General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 #ifndef __WINE_DMUSIC_PRIVATE_H
21 #define __WINE_DMUSIC_PRIVATE_H
24 #include "wine/debug.h"
34 /*****************************************************************************
37 typedef struct IDirectMusic8Impl IDirectMusic8Impl
;
38 typedef struct IDirectMusicBufferImpl IDirectMusicBufferImpl
;
39 typedef struct IDirectMusicInstrumentImpl IDirectMusicInstrumentImpl
;
40 typedef struct IDirectMusicDownloadedInstrumentImpl IDirectMusicDownloadedInstrumentImpl
;
41 typedef struct IDirectMusicCollectionImpl IDirectMusicCollectionImpl
;
42 typedef struct IDirectMusicDownloadImpl IDirectMusicDownloadImpl
;
43 typedef struct IDirectMusicPortDownloadImpl IDirectMusicPortDownloadImpl
;
44 typedef struct IDirectMusicPortImpl IDirectMusicPortImpl
;
45 typedef struct IDirectMusicThruImpl IDirectMusicThruImpl
;
46 typedef struct IReferenceClockImpl IReferenceClockImpl
;
48 typedef struct IDirectMusicCollectionObject IDirectMusicCollectionObject
;
49 typedef struct IDirectMusicCollectionObjectStream IDirectMusicCollectionObjectStream
;
51 /*****************************************************************************
52 * Predeclare the interface implementation structures
54 extern ICOM_VTABLE(IDirectMusic8
) DirectMusic8_Vtbl
;
55 extern ICOM_VTABLE(IDirectMusicBuffer
) DirectMusicBuffer_Vtbl
;
56 extern ICOM_VTABLE(IDirectMusicInstrument
) DirectMusicInstrument_Vtbl
;
57 extern ICOM_VTABLE(IDirectMusicDownloadedInstrument
) DirectMusicDownloadedInstrument_Vtbl
;
58 extern ICOM_VTABLE(IDirectMusicCollection
) DirectMusicCollection_Vtbl
;
59 extern ICOM_VTABLE(IDirectMusicDownload
) DirectMusicDownload_Vtbl
;
60 extern ICOM_VTABLE(IDirectMusicPortDownload
) DirectMusicPortDownload_Vtbl
;
61 extern ICOM_VTABLE(IDirectMusicPort
) DirectMusicPort_Vtbl
;
62 extern ICOM_VTABLE(IDirectMusicThru
) DirectMusicThru_Vtbl
;
63 extern ICOM_VTABLE(IReferenceClock
) ReferenceClock_Vtbl
;
65 extern ICOM_VTABLE(IDirectMusicObject
) DirectMusicCollectionObject_Vtbl
;
66 extern ICOM_VTABLE(IPersistStream
) DirectMusicCollectionObjectStream_Vtbl
;
68 /*****************************************************************************
69 * Some stuff to make my life easier :=)
72 /* some sort of aux. performance channel: as far as i can understand, these are
73 used to represent a particular midi channel in particular group at particular
74 group; so all we need to do is to fill it with parent port, group and midi
76 typedef struct DMUSIC_PRIVATE_PCHANNEL_
78 DWORD channel
; /* map to this channel... */
79 DWORD group
; /* ... in this group ... */
80 IDirectMusicPort
*port
; /* ... at this port */
81 } DMUSIC_PRIVATE_PCHANNEL
, *LPDMUSIC_PRIVATE_PCHANNEL
;
83 /* some sort of aux. midi channel: big fake at the moment; accepts only priority
84 changes... more coming soon */
85 typedef struct DMUSIC_PRIVATE_MCHANNEL_
88 } DMUSIC_PRIVATE_MCHANNEL
, *LPDMUSIC_PRIVATE_MCHANNEL
;
90 /* some sort of aux. channel group: collection of 16 midi channels */
91 typedef struct DMUSIC_PRIVATE_CHANNEL_GROUP_
93 DMUSIC_PRIVATE_MCHANNEL channel
[16]; /* 16 channels in a group */
94 } DMUSIC_PRIVATE_CHANNEL_GROUP
, *LPDMUSIC_PRIVATE_CHANNEL_GROUP
;
96 /* used for loading chunks of data from files */
97 typedef struct _rawChunk
99 FOURCC id
; /* FOURCC */
100 DWORD size
; /* size of chunk_riff */
101 /* BYTE* data; */ /* chunk_riff data */
104 /* struct in which UNFO data is stored */
105 typedef struct _UNFO_List
115 typedef struct _ChordData
119 DMUS_IO_SUBCHORD
*subchord
;
122 typedef struct _Reference
124 DMUS_IO_REFERENCE header
;
130 DMUS_IO_VERSION version
;
133 typedef struct _BandTrack
135 DMUS_IO_BAND_TRACK_HEADER header
;
137 DMUS_IO_VERSION version
;
140 DMUS_IO_BAND_ITEM_HEADER header1
;
141 DMUS_IO_BAND_ITEM_HEADER2 header2
;
143 /* IDirectMusicBandImpl **band; */
149 DMUS_IO_STYLEPART header
;
152 DMUS_IO_STYLENOTE
* notes
;
154 DMUS_IO_STYLECURVE
* curves
;
156 DMUS_IO_STYLEMARKER
* markers
;
157 DWORD nrofresolutions
;
158 DMUS_IO_STYLERESOLUTION
* resolutions
;
159 DWORD nrofanticipations
;
160 DMUS_IO_STYLE_ANTICIPATION
* anticipations
;
163 typedef struct _Pattern
165 DMUS_IO_PATTERN header
;
169 DMUS_IO_MOTIFSETTINGS motsettings
;
170 /* IDirectMusicBandImpl band */
172 /* FIXME: only in singular form for now */
173 UNFO_List partrefUNFO
;
174 DMUS_IO_PARTREF partref
;
177 typedef struct _WaveTrack
179 DMUS_IO_WAVE_TRACK_HEADER header
;
180 /* FIXME: only in singular form now */
181 DMUS_IO_WAVE_PART_HEADER partHeader
;
182 DMUS_IO_WAVE_ITEM_HEADER itemHeader
;
186 typedef struct _SegTriggerTrack
188 DMUS_IO_SEGMENT_TRACK_HEADER header
;
189 /* FIXME: only in singular form now */
190 DMUS_IO_SEGMENT_ITEM_HEADER itemHeader
;
195 typedef struct _TimeSigTrack
{
197 DMUS_IO_TIMESIGNATURE_ITEM
* items
;
200 typedef struct _ScriptEvent
{
201 DMUS_IO_SCRIPTTRACK_EVENTHEADER header
;
206 /*****************************************************************************
209 /* can support IID_IDirectMusic, IID_IDirectMusic2 and IID_IDirectMusic8
210 * return always an IDirectMusic8Impl
212 extern HRESULT WINAPI
DMUSIC_CreateDirectMusic (LPCGUID lpcGUID
, LPDIRECTMUSIC8
* ppDM
, LPUNKNOWN pUnkOuter
);
213 /* can support IID_IDirectMusicBuffer
214 * return always an IDirectMusicBufferImpl
216 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicBuffer (LPCGUID lpcGUID
, LPDIRECTMUSICBUFFER
* ppDMBuff
, LPUNKNOWN pUnkOuter
);
217 /* can support IID_IDirectMusicInstrument
218 * return always an IDirectMusicInstrumentImpl
220 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicInstrument (LPCGUID lpcGUID
, LPDIRECTMUSICINSTRUMENT
* ppDMInstr
, LPUNKNOWN pUnkOuter
);
221 /* can support IID_IDirectMusicDownloadedInstrument
222 * return always an IDirectMusicDownloadedInstrumentImpl
224 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicDownloadedInstrument (LPCGUID lpcGUID
, LPDIRECTMUSICDOWNLOADEDINSTRUMENT
* ppDMDLInstrument
, LPUNKNOWN pUnkOuter
);
225 /* can support IID_IDirectMusicCollection
226 * return always an IDirectMusicCollectionImpl
228 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicCollection (LPCGUID lpcGUID
, LPDIRECTMUSICCOLLECTION
* ppDMColl
, LPUNKNOWN pUnkOuter
);
229 /* can support IID_IDirectMusicDownload
230 * return always an IDirectMusicDownload
232 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicDownload (LPCGUID lpcGUID
, LPDIRECTMUSICDOWNLOAD
* ppDMDL
, LPUNKNOWN pUnkOuter
);
233 /* can support IID_IDirectMusicPortDownload
234 * return always an IDirectMusicPortDownload
236 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicPortDownload (LPCGUID lpcGUID
, LPDIRECTMUSICPORTDOWNLOAD
* ppDMPortDL
, LPUNKNOWN pUnkOuter
);
237 /* can support IID_IDirectMusicPort
238 * return always an IDirectMusicPortImpl
240 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicPort (LPCGUID lpcGUID
, LPDIRECTMUSICPORT
* ppDMPort
, LPUNKNOWN pUnkOuter
);
241 /* can support IID_IDirectMusicThru
242 * return always an IDirectMusicThruImpl
244 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicThru (LPCGUID lpcGUID
, LPDIRECTMUSICTHRU
* ppDMThru
, LPUNKNOWN pUnkOuter
);
245 /* can support IID_IDirectMusicObject
246 * return always an IDirectMusicObjectImpl
249 extern HRESULT WINAPI
DMUSIC_CreateReferenceClock (LPCGUID lpcGUID
, IReferenceClock
** ppDM
, LPUNKNOWN pUnkOuter
);
251 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicCollectionObject (LPCGUID lpcGUID
, LPDIRECTMUSICOBJECT
* ppObject
, LPUNKNOWN pUnkOuter
);
253 /*****************************************************************************
254 * IDirectMusic8Impl implementation structure
256 struct IDirectMusic8Impl
258 /* IUnknown fields */
259 ICOM_VFIELD(IDirectMusic8
);
262 /* IDirectMusicImpl fields */
263 IReferenceClockImpl
* pMasterClock
;
264 IDirectMusicPortImpl
** ppPorts
;
269 extern HRESULT WINAPI
IDirectMusic8Impl_QueryInterface (LPDIRECTMUSIC8 iface
, REFIID riid
, LPVOID
*ppobj
);
270 extern ULONG WINAPI
IDirectMusic8Impl_AddRef (LPDIRECTMUSIC8 iface
);
271 extern ULONG WINAPI
IDirectMusic8Impl_Release (LPDIRECTMUSIC8 iface
);
273 extern HRESULT WINAPI
IDirectMusic8Impl_EnumPort (LPDIRECTMUSIC8 iface
, DWORD dwIndex
, LPDMUS_PORTCAPS pPortCaps
);
274 extern HRESULT WINAPI
IDirectMusic8Impl_CreateMusicBuffer (LPDIRECTMUSIC8 iface
, LPDMUS_BUFFERDESC pBufferDesc
, LPDIRECTMUSICBUFFER
** ppBuffer
, LPUNKNOWN pUnkOuter
);
275 extern HRESULT WINAPI
IDirectMusic8Impl_CreatePort (LPDIRECTMUSIC8 iface
, REFCLSID rclsidPort
, LPDMUS_PORTPARAMS pPortParams
, LPDIRECTMUSICPORT
* ppPort
, LPUNKNOWN pUnkOuter
);
276 extern HRESULT WINAPI
IDirectMusic8Impl_EnumMasterClock (LPDIRECTMUSIC8 iface
, DWORD dwIndex
, LPDMUS_CLOCKINFO lpClockInfo
);
277 extern HRESULT WINAPI
IDirectMusic8Impl_GetMasterClock (LPDIRECTMUSIC8 iface
, LPGUID pguidClock
, IReferenceClock
** ppReferenceClock
);
278 extern HRESULT WINAPI
IDirectMusic8Impl_SetMasterClock (LPDIRECTMUSIC8 iface
, REFGUID rguidClock
);
279 extern HRESULT WINAPI
IDirectMusic8Impl_Activate (LPDIRECTMUSIC8 iface
, BOOL fEnable
);
280 extern HRESULT WINAPI
IDirectMusic8Impl_GetDefaultPort (LPDIRECTMUSIC8 iface
, LPGUID pguidPort
);
281 extern HRESULT WINAPI
IDirectMusic8Impl_SetDirectSound (LPDIRECTMUSIC8 iface
, LPDIRECTSOUND pDirectSound
, HWND hWnd
);
283 extern HRESULT WINAPI
IDirectMusic8Impl_SetExternalMasterClock (LPDIRECTMUSIC8 iface
, IReferenceClock
* pClock
);
285 /*****************************************************************************
286 * IDirectMusicBufferImpl implementation structure
288 struct IDirectMusicBufferImpl
290 /* IUnknown fields */
291 ICOM_VFIELD(IDirectMusicBuffer
);
294 /* IDirectMusicBufferImpl fields */
298 extern HRESULT WINAPI
IDirectMusicBufferImpl_QueryInterface (LPDIRECTMUSICBUFFER iface
, REFIID riid
, LPVOID
*ppobj
);
299 extern ULONG WINAPI
IDirectMusicBufferImpl_AddRef (LPDIRECTMUSICBUFFER iface
);
300 extern ULONG WINAPI
IDirectMusicBufferImpl_Release (LPDIRECTMUSICBUFFER iface
);
301 /* IDirectMusicBufferImpl: */
302 extern HRESULT WINAPI
IDirectMusicBufferImpl_Flush (LPDIRECTMUSICBUFFER iface
);
303 extern HRESULT WINAPI
IDirectMusicBufferImpl_TotalTime (LPDIRECTMUSICBUFFER iface
, LPREFERENCE_TIME prtTime
);
304 extern HRESULT WINAPI
IDirectMusicBufferImpl_PackStructured (LPDIRECTMUSICBUFFER iface
, REFERENCE_TIME rt
, DWORD dwChannelGroup
, DWORD dwChannelMessage
);
305 extern HRESULT WINAPI
IDirectMusicBufferImpl_PackUnstructured (LPDIRECTMUSICBUFFER iface
, REFERENCE_TIME rt
, DWORD dwChannelGroup
, DWORD cb
, LPBYTE lpb
);
306 extern HRESULT WINAPI
IDirectMusicBufferImpl_ResetReadPtr (LPDIRECTMUSICBUFFER iface
);
307 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetNextEvent (LPDIRECTMUSICBUFFER iface
, LPREFERENCE_TIME prt
, LPDWORD pdwChannelGroup
, LPDWORD pdwLength
, LPBYTE
* ppData
);
308 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetRawBufferPtr (LPDIRECTMUSICBUFFER iface
, LPBYTE
* ppData
);
309 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetStartTime (LPDIRECTMUSICBUFFER iface
, LPREFERENCE_TIME prt
);
310 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetUsedBytes (LPDIRECTMUSICBUFFER iface
, LPDWORD pcb
);
311 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetMaxBytes (LPDIRECTMUSICBUFFER iface
, LPDWORD pcb
);
312 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetBufferFormat (LPDIRECTMUSICBUFFER iface
, LPGUID pGuidFormat
);
313 extern HRESULT WINAPI
IDirectMusicBufferImpl_SetStartTime (LPDIRECTMUSICBUFFER iface
, REFERENCE_TIME rt
);
314 extern HRESULT WINAPI
IDirectMusicBufferImpl_SetUsedBytes (LPDIRECTMUSICBUFFER iface
, DWORD cb
);
316 /*****************************************************************************
317 * IDirectMusicInstrumentImpl implementation structure
319 struct IDirectMusicInstrumentImpl
321 /* IUnknown fields */
322 ICOM_VFIELD(IDirectMusicInstrument
);
325 /* IDirectMusicInstrumentImpl fields */
331 extern HRESULT WINAPI
IDirectMusicInstrumentImpl_QueryInterface (LPDIRECTMUSICINSTRUMENT iface
, REFIID riid
, LPVOID
*ppobj
);
332 extern ULONG WINAPI
IDirectMusicInstrumentImpl_AddRef (LPDIRECTMUSICINSTRUMENT iface
);
333 extern ULONG WINAPI
IDirectMusicInstrumentImpl_Release (LPDIRECTMUSICINSTRUMENT iface
);
334 /* IDirectMusicInstrumentImpl: */
335 extern HRESULT WINAPI
IDirectMusicInstrumentImpl_GetPatch (LPDIRECTMUSICINSTRUMENT iface
, DWORD
* pdwPatch
);
336 extern HRESULT WINAPI
IDirectMusicInstrumentImpl_SetPatch (LPDIRECTMUSICINSTRUMENT iface
, DWORD dwPatch
);
338 /*****************************************************************************
339 * IDirectMusicDownloadedInstrumentImpl implementation structure
341 struct IDirectMusicDownloadedInstrumentImpl
343 /* IUnknown fields */
344 ICOM_VFIELD(IDirectMusicDownloadedInstrument
);
347 /* IDirectMusicDownloadedInstrumentImpl fields */
351 extern HRESULT WINAPI
IDirectMusicDownloadedInstrumentImpl_QueryInterface (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface
, REFIID riid
, LPVOID
*ppobj
);
352 extern ULONG WINAPI
IDirectMusicDownloadedInstrumentImpl_AddRef (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface
);
353 extern ULONG WINAPI
IDirectMusicDownloadedInstrumentImpl_Release (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface
);
354 /* IDirectMusicDownloadedInstrumentImpl: */
357 /*****************************************************************************
358 * IDirectMusicCollectionImpl implementation structure
360 struct IDirectMusicCollectionImpl
362 /* IUnknown fields */
363 ICOM_VFIELD(IDirectMusicCollection
);
366 /* IDirectMusicCollectionImpl fields */
367 IDirectMusicCollectionObject
* pObject
;
368 DWORD nrofinstruments
;
369 IDirectMusicInstrumentImpl
** ppInstruments
;
373 extern HRESULT WINAPI
IDirectMusicCollectionImpl_QueryInterface (LPDIRECTMUSICCOLLECTION iface
, REFIID riid
, LPVOID
*ppobj
);
374 extern ULONG WINAPI
IDirectMusicCollectionImpl_AddRef (LPDIRECTMUSICCOLLECTION iface
);
375 extern ULONG WINAPI
IDirectMusicCollectionImpl_Release (LPDIRECTMUSICCOLLECTION iface
);
376 /* IDirectMusicImpl: */
377 HRESULT WINAPI
IDirectMusicCollectionImpl_GetInstrument (LPDIRECTMUSICCOLLECTION iface
, DWORD dwPatch
, IDirectMusicInstrument
** ppInstrument
);
378 HRESULT WINAPI
IDirectMusicCollectionImpl_EnumInstrument (LPDIRECTMUSICCOLLECTION iface
, DWORD dwIndex
, DWORD
* pdwPatch
, LPWSTR pwszName
, DWORD dwNameLen
);
380 /*****************************************************************************
381 * IDirectMusicDownloadImpl implementation structure
383 struct IDirectMusicDownloadImpl
385 /* IUnknown fields */
386 ICOM_VFIELD(IDirectMusicDownload
);
389 /* IDirectMusicDownloadImpl fields */
393 extern HRESULT WINAPI
IDirectMusicDownloadImpl_QueryInterface (LPDIRECTMUSICDOWNLOAD iface
, REFIID riid
, LPVOID
*ppobj
);
394 extern ULONG WINAPI
IDirectMusicDownloadImpl_AddRef (LPDIRECTMUSICDOWNLOAD iface
);
395 extern ULONG WINAPI
IDirectMusicDownloadImpl_Release (LPDIRECTMUSICDOWNLOAD iface
);
396 /* IDirectMusicImpl: */
397 extern HRESULT WINAPI
IDirectMusicDownloadImpl_GetBuffer (LPDIRECTMUSICDOWNLOAD iface
, void** ppvBuffer
, DWORD
* pdwSize
);
400 /*****************************************************************************
401 * IDirectMusicPortDownloadImpl implementation structure
403 struct IDirectMusicPortDownloadImpl
405 /* IUnknown fields */
406 ICOM_VFIELD(IDirectMusicPortDownload
);
409 /* IDirectMusicPortDownloadImpl fields */
413 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_QueryInterface (LPDIRECTMUSICPORTDOWNLOAD iface
, REFIID riid
, LPVOID
*ppobj
);
414 extern ULONG WINAPI
IDirectMusicPortDownloadImpl_AddRef (LPDIRECTMUSICPORTDOWNLOAD iface
);
415 extern ULONG WINAPI
IDirectMusicPortDownloadImpl_Release (LPDIRECTMUSICPORTDOWNLOAD iface
);
416 /* IDirectMusicPortDownloadImpl: */
417 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_GetBuffer (LPDIRECTMUSICPORTDOWNLOAD iface
, DWORD dwDLId
, IDirectMusicDownload
** ppIDMDownload
);
418 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_AllocateBuffer (LPDIRECTMUSICPORTDOWNLOAD iface
, DWORD dwSize
, IDirectMusicDownload
** ppIDMDownload
);
419 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_GetDLId (LPDIRECTMUSICPORTDOWNLOAD iface
, DWORD
* pdwStartDLId
, DWORD dwCount
);
420 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_GetAppend (LPDIRECTMUSICPORTDOWNLOAD iface
, DWORD
* pdwAppend
);
421 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_Download (LPDIRECTMUSICPORTDOWNLOAD iface
, IDirectMusicDownload
* pIDMDownload
);
422 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_Unload (LPDIRECTMUSICPORTDOWNLOAD iface
, IDirectMusicDownload
* pIDMDownload
);
424 /*****************************************************************************
425 * IDirectMusicPortImpl implementation structure
427 struct IDirectMusicPortImpl
429 /* IUnknown fields */
430 ICOM_VFIELD(IDirectMusicPort
);
433 /* IDirectMusicPortImpl fields */
434 IDirectSound
* pDirectSound
;
435 IReferenceClock
* pLatencyClock
;
437 LPDMUS_PORTCAPS pCaps
;
438 LPDMUS_PORTPARAMS pParams
;
440 DMUSIC_PRIVATE_CHANNEL_GROUP group
[1];
444 extern HRESULT WINAPI
IDirectMusicPortImpl_QueryInterface (LPDIRECTMUSICPORT iface
, REFIID riid
, LPVOID
*ppobj
);
445 extern ULONG WINAPI
IDirectMusicPortImpl_AddRef (LPDIRECTMUSICPORT iface
);
446 extern ULONG WINAPI
IDirectMusicPortImpl_Release (LPDIRECTMUSICPORT iface
);
447 /* IDirectMusicPortImpl: */
448 extern HRESULT WINAPI
IDirectMusicPortImpl_PlayBuffer (LPDIRECTMUSICPORT iface
, LPDIRECTMUSICBUFFER pBuffer
);
449 extern HRESULT WINAPI
IDirectMusicPortImpl_SetReadNotificationHandle (LPDIRECTMUSICPORT iface
, HANDLE hEvent
);
450 extern HRESULT WINAPI
IDirectMusicPortImpl_Read (LPDIRECTMUSICPORT iface
, LPDIRECTMUSICBUFFER pBuffer
);
451 extern HRESULT WINAPI
IDirectMusicPortImpl_DownloadInstrument (LPDIRECTMUSICPORT iface
, IDirectMusicInstrument
* pInstrument
, IDirectMusicDownloadedInstrument
** ppDownloadedInstrument
, DMUS_NOTERANGE
* pNoteRanges
, DWORD dwNumNoteRanges
);
452 extern HRESULT WINAPI
IDirectMusicPortImpl_UnloadInstrument (LPDIRECTMUSICPORT iface
, IDirectMusicDownloadedInstrument
*pDownloadedInstrument
);
453 extern HRESULT WINAPI
IDirectMusicPortImpl_GetLatencyClock (LPDIRECTMUSICPORT iface
, IReferenceClock
** ppClock
);
454 extern HRESULT WINAPI
IDirectMusicPortImpl_GetRunningStats (LPDIRECTMUSICPORT iface
, LPDMUS_SYNTHSTATS pStats
);
455 extern HRESULT WINAPI
IDirectMusicPortImpl_GetCaps (LPDIRECTMUSICPORT iface
, LPDMUS_PORTCAPS pPortCaps
);
456 extern HRESULT WINAPI
IDirectMusicPortImpl_DeviceIoControl (LPDIRECTMUSICPORT iface
, DWORD dwIoControlCode
, LPVOID lpInBuffer
, DWORD nInBufferSize
, LPVOID lpOutBuffer
, DWORD nOutBufferSize
, LPDWORD lpBytesReturned
, LPOVERLAPPED lpOverlapped
);
457 extern HRESULT WINAPI
IDirectMusicPortImpl_SetNumChannelGroups (LPDIRECTMUSICPORT iface
, DWORD dwChannelGroups
);
458 extern HRESULT WINAPI
IDirectMusicPortImpl_GetNumChannelGroups (LPDIRECTMUSICPORT iface
, LPDWORD pdwChannelGroups
);
459 extern HRESULT WINAPI
IDirectMusicPortImpl_Activate (LPDIRECTMUSICPORT iface
, BOOL fActive
);
460 extern HRESULT WINAPI
IDirectMusicPortImpl_SetChannelPriority (LPDIRECTMUSICPORT iface
, DWORD dwChannelGroup
, DWORD dwChannel
, DWORD dwPriority
);
461 extern HRESULT WINAPI
IDirectMusicPortImpl_GetChannelPriority (LPDIRECTMUSICPORT iface
, DWORD dwChannelGroup
, DWORD dwChannel
, LPDWORD pdwPriority
);
462 extern HRESULT WINAPI
IDirectMusicPortImpl_SetDirectSound (LPDIRECTMUSICPORT iface
, LPDIRECTSOUND pDirectSound
, LPDIRECTSOUNDBUFFER pDirectSoundBuffer
);
463 extern HRESULT WINAPI
IDirectMusicPortImpl_GetFormat (LPDIRECTMUSICPORT iface
, LPWAVEFORMATEX pWaveFormatEx
, LPDWORD pdwWaveFormatExSize
, LPDWORD pdwBufferSize
);
465 /*****************************************************************************
466 * IDirectMusicThruImpl implementation structure
468 struct IDirectMusicThruImpl
470 /* IUnknown fields */
471 ICOM_VFIELD(IDirectMusicThru
);
474 /* IDirectMusicThruImpl fields */
478 extern HRESULT WINAPI
IDirectMusicThruImpl_QueryInterface (LPDIRECTMUSICTHRU iface
, REFIID riid
, LPVOID
*ppobj
);
479 extern ULONG WINAPI
IDirectMusicThruImpl_AddRef (LPDIRECTMUSICTHRU iface
);
480 extern ULONG WINAPI
IDirectMusicThruImpl_Release (LPDIRECTMUSICTHRU iface
);
481 /* IDirectMusicPortDownloadImpl: */
482 extern HRESULT WINAPI
ThruChannel (LPDIRECTMUSICTHRU iface
, DWORD dwSourceChannelGroup
, DWORD dwSourceChannel
, DWORD dwDestinationChannelGroup
, DWORD dwDestinationChannel
, LPDIRECTMUSICPORT pDestinationPort
);
484 /*****************************************************************************
485 * IReferenceClockImpl implementation structure
487 struct IReferenceClockImpl
489 /* IUnknown fields */
490 ICOM_VFIELD(IReferenceClock
);
493 /* IReferenceClockImpl fields */
494 REFERENCE_TIME rtTime
;
495 DMUS_CLOCKINFO pClockInfo
;
499 extern HRESULT WINAPI
IReferenceClockImpl_QueryInterface (IReferenceClock
*iface
, REFIID riid
, LPVOID
*ppobj
);
500 extern ULONG WINAPI
IReferenceClockImpl_AddRef (IReferenceClock
*iface
);
501 extern ULONG WINAPI
IReferenceClockImpl_Release (IReferenceClock
*iface
);
502 /* IReferenceClock: */
503 extern HRESULT WINAPI
IReferenceClockImpl_GetTime (IReferenceClock
*iface
, REFERENCE_TIME
* pTime
);
504 extern HRESULT WINAPI
IReferenceClockImpl_AdviseTime (IReferenceClock
*iface
, REFERENCE_TIME baseTime
, REFERENCE_TIME streamTime
, HANDLE hEvent
, DWORD
* pdwAdviseCookie
);
505 extern HRESULT WINAPI
IReferenceClockImpl_AdvisePeriodic (IReferenceClock
*iface
, REFERENCE_TIME startTime
, REFERENCE_TIME periodTime
, HANDLE hSemaphore
, DWORD
* pdwAdviseCookie
);
506 extern HRESULT WINAPI
IReferenceClockImpl_Unadvise (IReferenceClock
*iface
, DWORD dwAdviseCookie
);
509 /*****************************************************************************
510 * IDirectMusicCollectionObject implementation structure
512 struct IDirectMusicCollectionObject
514 /* IUnknown fields */
515 ICOM_VFIELD (IDirectMusicObject
);
518 /* IDirectMusicObjectImpl fields */
519 LPDMUS_OBJECTDESC pDesc
;
520 IDirectMusicCollectionObjectStream
* pStream
;
521 IDirectMusicCollectionImpl
* pCollection
;
525 extern HRESULT WINAPI
IDirectMusicCollectionObject_QueryInterface (LPDIRECTMUSICOBJECT iface
, REFIID riid
, LPVOID
*ppobj
);
526 extern ULONG WINAPI
IDirectMusicCollectionObject_AddRef (LPDIRECTMUSICOBJECT iface
);
527 extern ULONG WINAPI
IDirectMusicCollectionObject_Release (LPDIRECTMUSICOBJECT iface
);
528 /* IDirectMusicObject: */
529 extern HRESULT WINAPI
IDirectMusicCollectionObject_GetDescriptor (LPDIRECTMUSICOBJECT iface
, LPDMUS_OBJECTDESC pDesc
);
530 extern HRESULT WINAPI
IDirectMusicCollectionObject_SetDescriptor (LPDIRECTMUSICOBJECT iface
, LPDMUS_OBJECTDESC pDesc
);
531 extern HRESULT WINAPI
IDirectMusicCollectionObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface
, LPSTREAM pStream
, LPDMUS_OBJECTDESC pDesc
);
533 /*****************************************************************************
534 * IDirectMusicCollectionObjectStream implementation structure
536 struct IDirectMusicCollectionObjectStream
538 /* IUnknown fields */
539 ICOM_VFIELD (IPersistStream
);
542 /* IPersistStreamImpl fields */
543 IDirectMusicCollectionObject
* pParentObject
;
547 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_QueryInterface (LPPERSISTSTREAM iface
, REFIID riid
, void** ppvObject
);
548 extern ULONG WINAPI
IDirectMusicCollectionObjectStream_AddRef (LPPERSISTSTREAM iface
);
549 extern ULONG WINAPI
IDirectMusicCollectionObjectStream_Release (LPPERSISTSTREAM iface
);
551 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_GetClassID (LPPERSISTSTREAM iface
, CLSID
* pClassID
);
552 /* IPersistStream: */
553 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_IsDirty (LPPERSISTSTREAM iface
);
554 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_Load (LPPERSISTSTREAM iface
, IStream
* pStm
);
555 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_Save (LPPERSISTSTREAM iface
, IStream
* pStm
, BOOL fClearDirty
);
556 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_GetSizeMax (LPPERSISTSTREAM iface
, ULARGE_INTEGER
* pcbSize
);
559 /*****************************************************************************
562 void register_waveport (LPGUID lpGUID
, LPCSTR lpszDesc
, LPCSTR lpszDrvName
, LPVOID lpContext
);
564 #endif /* __WINE_DMUSIC_PRIVATE_H */