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
26 #include "wine/debug.h"
37 /*****************************************************************************
40 typedef struct IDirectMusic8Impl IDirectMusic8Impl
;
41 typedef struct IDirectMusicBufferImpl IDirectMusicBufferImpl
;
42 typedef struct IDirectMusicInstrumentImpl IDirectMusicInstrumentImpl
;
43 typedef struct IDirectMusicDownloadedInstrumentImpl IDirectMusicDownloadedInstrumentImpl
;
44 typedef struct IDirectMusicCollectionImpl IDirectMusicCollectionImpl
;
45 typedef struct IDirectMusicDownloadImpl IDirectMusicDownloadImpl
;
46 typedef struct IDirectMusicPortDownloadImpl IDirectMusicPortDownloadImpl
;
47 typedef struct IDirectMusicPortImpl IDirectMusicPortImpl
;
48 typedef struct IDirectMusicThruImpl IDirectMusicThruImpl
;
49 typedef struct IReferenceClockImpl IReferenceClockImpl
;
51 typedef struct IDirectMusicCollectionObject IDirectMusicCollectionObject
;
52 typedef struct IDirectMusicCollectionObjectStream IDirectMusicCollectionObjectStream
;
54 /*****************************************************************************
55 * Predeclare the interface implementation structures
57 extern ICOM_VTABLE(IDirectMusic8
) DirectMusic8_Vtbl
;
58 extern ICOM_VTABLE(IDirectMusicBuffer
) DirectMusicBuffer_Vtbl
;
59 extern ICOM_VTABLE(IDirectMusicInstrument
) DirectMusicInstrument_Vtbl
;
60 extern ICOM_VTABLE(IDirectMusicDownloadedInstrument
) DirectMusicDownloadedInstrument_Vtbl
;
61 extern ICOM_VTABLE(IDirectMusicCollection
) DirectMusicCollection_Vtbl
;
62 extern ICOM_VTABLE(IDirectMusicDownload
) DirectMusicDownload_Vtbl
;
63 extern ICOM_VTABLE(IDirectMusicPortDownload
) DirectMusicPortDownload_Vtbl
;
64 extern ICOM_VTABLE(IDirectMusicPort
) DirectMusicPort_Vtbl
;
65 extern ICOM_VTABLE(IDirectMusicThru
) DirectMusicThru_Vtbl
;
66 extern ICOM_VTABLE(IReferenceClock
) ReferenceClock_Vtbl
;
68 extern ICOM_VTABLE(IDirectMusicObject
) DirectMusicCollectionObject_Vtbl
;
69 extern ICOM_VTABLE(IPersistStream
) DirectMusicCollectionObjectStream_Vtbl
;
71 /*****************************************************************************
72 * Some stuff to make my life easier :=)
75 /* some sort of aux. performance channel: as far as i can understand, these are
76 used to represent a particular midi channel in particular group at particular
77 group; so all we need to do is to fill it with parent port, group and midi
79 typedef struct DMUSIC_PRIVATE_PCHANNEL_
81 DWORD channel
; /* map to this channel... */
82 DWORD group
; /* ... in this group ... */
83 IDirectMusicPort
*port
; /* ... at this port */
84 } DMUSIC_PRIVATE_PCHANNEL
, *LPDMUSIC_PRIVATE_PCHANNEL
;
86 /* some sort of aux. midi channel: big fake at the moment; accepts only priority
87 changes... more coming soon */
88 typedef struct DMUSIC_PRIVATE_MCHANNEL_
91 } DMUSIC_PRIVATE_MCHANNEL
, *LPDMUSIC_PRIVATE_MCHANNEL
;
93 /* some sort of aux. channel group: collection of 16 midi channels */
94 typedef struct DMUSIC_PRIVATE_CHANNEL_GROUP_
96 DMUSIC_PRIVATE_MCHANNEL channel
[16]; /* 16 channels in a group */
97 } DMUSIC_PRIVATE_CHANNEL_GROUP
, *LPDMUSIC_PRIVATE_CHANNEL_GROUP
;
99 /* used for loading chunks of data from files */
100 typedef struct _rawChunk
102 FOURCC id
; /* FOURCC */
103 DWORD size
; /* size of chunk_riff */
104 /* BYTE* data; */ /* chunk_riff data */
107 /* struct in which UNFO data is stored */
108 typedef struct _UNFO_List
118 typedef struct _ChordData
122 DMUS_IO_SUBCHORD
*subchord
;
125 typedef struct _Reference
127 DMUS_IO_REFERENCE header
;
133 DMUS_IO_VERSION version
;
136 typedef struct _BandTrack
138 DMUS_IO_BAND_TRACK_HEADER header
;
140 DMUS_IO_VERSION version
;
143 DMUS_IO_BAND_ITEM_HEADER header1
;
144 DMUS_IO_BAND_ITEM_HEADER2 header2
;
146 /* IDirectMusicBandImpl **band; */
152 DMUS_IO_STYLEPART header
;
155 DMUS_IO_STYLENOTE
* notes
;
157 DMUS_IO_STYLECURVE
* curves
;
159 DMUS_IO_STYLEMARKER
* markers
;
160 DWORD nrofresolutions
;
161 DMUS_IO_STYLERESOLUTION
* resolutions
;
162 DWORD nrofanticipations
;
163 DMUS_IO_STYLE_ANTICIPATION
* anticipations
;
166 typedef struct _Pattern
168 DMUS_IO_PATTERN header
;
172 DMUS_IO_MOTIFSETTINGS motsettings
;
173 /* IDirectMusicBandImpl band */
175 /* FIXME: only in singular form for now */
176 UNFO_List partrefUNFO
;
177 DMUS_IO_PARTREF partref
;
180 typedef struct _WaveTrack
182 DMUS_IO_WAVE_TRACK_HEADER header
;
183 /* FIXME: only in singular form now */
184 DMUS_IO_WAVE_PART_HEADER partHeader
;
185 DMUS_IO_WAVE_ITEM_HEADER itemHeader
;
189 typedef struct _SegTriggerTrack
191 DMUS_IO_SEGMENT_TRACK_HEADER header
;
192 /* FIXME: only in singular form now */
193 DMUS_IO_SEGMENT_ITEM_HEADER itemHeader
;
198 typedef struct _TimeSigTrack
{
200 DMUS_IO_TIMESIGNATURE_ITEM
* items
;
203 typedef struct _ScriptEvent
{
204 DMUS_IO_SCRIPTTRACK_EVENTHEADER header
;
209 /*****************************************************************************
212 /* can support IID_IDirectMusic, IID_IDirectMusic2 and IID_IDirectMusic8
213 * return always an IDirectMusic8Impl
215 extern HRESULT WINAPI
DMUSIC_CreateDirectMusic (LPCGUID lpcGUID
, LPDIRECTMUSIC8
* ppDM
, LPUNKNOWN pUnkOuter
);
216 /* can support IID_IDirectMusicBuffer
217 * return always an IDirectMusicBufferImpl
219 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicBuffer (LPCGUID lpcGUID
, LPDIRECTMUSICBUFFER
* ppDMBuff
, LPUNKNOWN pUnkOuter
);
220 /* can support IID_IDirectMusicInstrument
221 * return always an IDirectMusicInstrumentImpl
223 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicInstrument (LPCGUID lpcGUID
, LPDIRECTMUSICINSTRUMENT
* ppDMInstr
, LPUNKNOWN pUnkOuter
);
224 /* can support IID_IDirectMusicDownloadedInstrument
225 * return always an IDirectMusicDownloadedInstrumentImpl
227 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicDownloadedInstrument (LPCGUID lpcGUID
, LPDIRECTMUSICDOWNLOADEDINSTRUMENT
* ppDMDLInstrument
, LPUNKNOWN pUnkOuter
);
228 /* can support IID_IDirectMusicCollection
229 * return always an IDirectMusicCollectionImpl
231 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicCollection (LPCGUID lpcGUID
, LPDIRECTMUSICCOLLECTION
* ppDMColl
, LPUNKNOWN pUnkOuter
);
232 /* can support IID_IDirectMusicDownload
233 * return always an IDirectMusicDownload
235 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicDownload (LPCGUID lpcGUID
, LPDIRECTMUSICDOWNLOAD
* ppDMDL
, LPUNKNOWN pUnkOuter
);
236 /* can support IID_IDirectMusicPortDownload
237 * return always an IDirectMusicPortDownload
239 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicPortDownload (LPCGUID lpcGUID
, LPDIRECTMUSICPORTDOWNLOAD
* ppDMPortDL
, LPUNKNOWN pUnkOuter
);
240 /* can support IID_IDirectMusicPort
241 * return always an IDirectMusicPortImpl
243 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicPort (LPCGUID lpcGUID
, LPDIRECTMUSICPORT
* ppDMPort
, LPUNKNOWN pUnkOuter
);
244 /* can support IID_IDirectMusicThru
245 * return always an IDirectMusicThruImpl
247 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicThru (LPCGUID lpcGUID
, LPDIRECTMUSICTHRU
* ppDMThru
, LPUNKNOWN pUnkOuter
);
248 /* can support IID_IDirectMusicObject
249 * return always an IDirectMusicObjectImpl
252 extern HRESULT WINAPI
DMUSIC_CreateReferenceClock (LPCGUID lpcGUID
, IReferenceClock
** ppDM
, LPUNKNOWN pUnkOuter
);
254 extern HRESULT WINAPI
DMUSIC_CreateDirectMusicCollectionObject (LPCGUID lpcGUID
, LPDIRECTMUSICOBJECT
* ppObject
, LPUNKNOWN pUnkOuter
);
256 /*****************************************************************************
257 * IDirectMusic8Impl implementation structure
259 struct IDirectMusic8Impl
261 /* IUnknown fields */
262 ICOM_VFIELD(IDirectMusic8
);
265 /* IDirectMusicImpl fields */
266 IReferenceClockImpl
* pMasterClock
;
267 IDirectMusicPortImpl
** ppPorts
;
272 extern HRESULT WINAPI
IDirectMusic8Impl_QueryInterface (LPDIRECTMUSIC8 iface
, REFIID riid
, LPVOID
*ppobj
);
273 extern ULONG WINAPI
IDirectMusic8Impl_AddRef (LPDIRECTMUSIC8 iface
);
274 extern ULONG WINAPI
IDirectMusic8Impl_Release (LPDIRECTMUSIC8 iface
);
276 extern HRESULT WINAPI
IDirectMusic8Impl_EnumPort (LPDIRECTMUSIC8 iface
, DWORD dwIndex
, LPDMUS_PORTCAPS pPortCaps
);
277 extern HRESULT WINAPI
IDirectMusic8Impl_CreateMusicBuffer (LPDIRECTMUSIC8 iface
, LPDMUS_BUFFERDESC pBufferDesc
, LPDIRECTMUSICBUFFER
** ppBuffer
, LPUNKNOWN pUnkOuter
);
278 extern HRESULT WINAPI
IDirectMusic8Impl_CreatePort (LPDIRECTMUSIC8 iface
, REFCLSID rclsidPort
, LPDMUS_PORTPARAMS pPortParams
, LPDIRECTMUSICPORT
* ppPort
, LPUNKNOWN pUnkOuter
);
279 extern HRESULT WINAPI
IDirectMusic8Impl_EnumMasterClock (LPDIRECTMUSIC8 iface
, DWORD dwIndex
, LPDMUS_CLOCKINFO lpClockInfo
);
280 extern HRESULT WINAPI
IDirectMusic8Impl_GetMasterClock (LPDIRECTMUSIC8 iface
, LPGUID pguidClock
, IReferenceClock
** ppReferenceClock
);
281 extern HRESULT WINAPI
IDirectMusic8Impl_SetMasterClock (LPDIRECTMUSIC8 iface
, REFGUID rguidClock
);
282 extern HRESULT WINAPI
IDirectMusic8Impl_Activate (LPDIRECTMUSIC8 iface
, BOOL fEnable
);
283 extern HRESULT WINAPI
IDirectMusic8Impl_GetDefaultPort (LPDIRECTMUSIC8 iface
, LPGUID pguidPort
);
284 extern HRESULT WINAPI
IDirectMusic8Impl_SetDirectSound (LPDIRECTMUSIC8 iface
, LPDIRECTSOUND pDirectSound
, HWND hWnd
);
286 extern HRESULT WINAPI
IDirectMusic8Impl_SetExternalMasterClock (LPDIRECTMUSIC8 iface
, IReferenceClock
* pClock
);
288 /*****************************************************************************
289 * IDirectMusicBufferImpl implementation structure
291 struct IDirectMusicBufferImpl
293 /* IUnknown fields */
294 ICOM_VFIELD(IDirectMusicBuffer
);
297 /* IDirectMusicBufferImpl fields */
301 extern HRESULT WINAPI
IDirectMusicBufferImpl_QueryInterface (LPDIRECTMUSICBUFFER iface
, REFIID riid
, LPVOID
*ppobj
);
302 extern ULONG WINAPI
IDirectMusicBufferImpl_AddRef (LPDIRECTMUSICBUFFER iface
);
303 extern ULONG WINAPI
IDirectMusicBufferImpl_Release (LPDIRECTMUSICBUFFER iface
);
304 /* IDirectMusicBufferImpl: */
305 extern HRESULT WINAPI
IDirectMusicBufferImpl_Flush (LPDIRECTMUSICBUFFER iface
);
306 extern HRESULT WINAPI
IDirectMusicBufferImpl_TotalTime (LPDIRECTMUSICBUFFER iface
, LPREFERENCE_TIME prtTime
);
307 extern HRESULT WINAPI
IDirectMusicBufferImpl_PackStructured (LPDIRECTMUSICBUFFER iface
, REFERENCE_TIME rt
, DWORD dwChannelGroup
, DWORD dwChannelMessage
);
308 extern HRESULT WINAPI
IDirectMusicBufferImpl_PackUnstructured (LPDIRECTMUSICBUFFER iface
, REFERENCE_TIME rt
, DWORD dwChannelGroup
, DWORD cb
, LPBYTE lpb
);
309 extern HRESULT WINAPI
IDirectMusicBufferImpl_ResetReadPtr (LPDIRECTMUSICBUFFER iface
);
310 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetNextEvent (LPDIRECTMUSICBUFFER iface
, LPREFERENCE_TIME prt
, LPDWORD pdwChannelGroup
, LPDWORD pdwLength
, LPBYTE
* ppData
);
311 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetRawBufferPtr (LPDIRECTMUSICBUFFER iface
, LPBYTE
* ppData
);
312 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetStartTime (LPDIRECTMUSICBUFFER iface
, LPREFERENCE_TIME prt
);
313 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetUsedBytes (LPDIRECTMUSICBUFFER iface
, LPDWORD pcb
);
314 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetMaxBytes (LPDIRECTMUSICBUFFER iface
, LPDWORD pcb
);
315 extern HRESULT WINAPI
IDirectMusicBufferImpl_GetBufferFormat (LPDIRECTMUSICBUFFER iface
, LPGUID pGuidFormat
);
316 extern HRESULT WINAPI
IDirectMusicBufferImpl_SetStartTime (LPDIRECTMUSICBUFFER iface
, REFERENCE_TIME rt
);
317 extern HRESULT WINAPI
IDirectMusicBufferImpl_SetUsedBytes (LPDIRECTMUSICBUFFER iface
, DWORD cb
);
319 /*****************************************************************************
320 * IDirectMusicInstrumentImpl implementation structure
322 struct IDirectMusicInstrumentImpl
324 /* IUnknown fields */
325 ICOM_VFIELD(IDirectMusicInstrument
);
328 /* IDirectMusicInstrumentImpl fields */
334 extern HRESULT WINAPI
IDirectMusicInstrumentImpl_QueryInterface (LPDIRECTMUSICINSTRUMENT iface
, REFIID riid
, LPVOID
*ppobj
);
335 extern ULONG WINAPI
IDirectMusicInstrumentImpl_AddRef (LPDIRECTMUSICINSTRUMENT iface
);
336 extern ULONG WINAPI
IDirectMusicInstrumentImpl_Release (LPDIRECTMUSICINSTRUMENT iface
);
337 /* IDirectMusicInstrumentImpl: */
338 extern HRESULT WINAPI
IDirectMusicInstrumentImpl_GetPatch (LPDIRECTMUSICINSTRUMENT iface
, DWORD
* pdwPatch
);
339 extern HRESULT WINAPI
IDirectMusicInstrumentImpl_SetPatch (LPDIRECTMUSICINSTRUMENT iface
, DWORD dwPatch
);
341 /*****************************************************************************
342 * IDirectMusicDownloadedInstrumentImpl implementation structure
344 struct IDirectMusicDownloadedInstrumentImpl
346 /* IUnknown fields */
347 ICOM_VFIELD(IDirectMusicDownloadedInstrument
);
350 /* IDirectMusicDownloadedInstrumentImpl fields */
354 extern HRESULT WINAPI
IDirectMusicDownloadedInstrumentImpl_QueryInterface (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface
, REFIID riid
, LPVOID
*ppobj
);
355 extern ULONG WINAPI
IDirectMusicDownloadedInstrumentImpl_AddRef (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface
);
356 extern ULONG WINAPI
IDirectMusicDownloadedInstrumentImpl_Release (LPDIRECTMUSICDOWNLOADEDINSTRUMENT iface
);
357 /* IDirectMusicDownloadedInstrumentImpl: */
360 /*****************************************************************************
361 * IDirectMusicCollectionImpl implementation structure
363 struct IDirectMusicCollectionImpl
365 /* IUnknown fields */
366 ICOM_VFIELD(IDirectMusicCollection
);
369 /* IDirectMusicCollectionImpl fields */
370 IDirectMusicCollectionObject
* pObject
;
371 DWORD nrofinstruments
;
372 IDirectMusicInstrumentImpl
** ppInstruments
;
376 extern HRESULT WINAPI
IDirectMusicCollectionImpl_QueryInterface (LPDIRECTMUSICCOLLECTION iface
, REFIID riid
, LPVOID
*ppobj
);
377 extern ULONG WINAPI
IDirectMusicCollectionImpl_AddRef (LPDIRECTMUSICCOLLECTION iface
);
378 extern ULONG WINAPI
IDirectMusicCollectionImpl_Release (LPDIRECTMUSICCOLLECTION iface
);
379 /* IDirectMusicImpl: */
380 HRESULT WINAPI
IDirectMusicCollectionImpl_GetInstrument (LPDIRECTMUSICCOLLECTION iface
, DWORD dwPatch
, IDirectMusicInstrument
** ppInstrument
);
381 HRESULT WINAPI
IDirectMusicCollectionImpl_EnumInstrument (LPDIRECTMUSICCOLLECTION iface
, DWORD dwIndex
, DWORD
* pdwPatch
, LPWSTR pwszName
, DWORD dwNameLen
);
383 /*****************************************************************************
384 * IDirectMusicDownloadImpl implementation structure
386 struct IDirectMusicDownloadImpl
388 /* IUnknown fields */
389 ICOM_VFIELD(IDirectMusicDownload
);
392 /* IDirectMusicDownloadImpl fields */
396 extern HRESULT WINAPI
IDirectMusicDownloadImpl_QueryInterface (LPDIRECTMUSICDOWNLOAD iface
, REFIID riid
, LPVOID
*ppobj
);
397 extern ULONG WINAPI
IDirectMusicDownloadImpl_AddRef (LPDIRECTMUSICDOWNLOAD iface
);
398 extern ULONG WINAPI
IDirectMusicDownloadImpl_Release (LPDIRECTMUSICDOWNLOAD iface
);
399 /* IDirectMusicImpl: */
400 extern HRESULT WINAPI
IDirectMusicDownloadImpl_GetBuffer (LPDIRECTMUSICDOWNLOAD iface
, void** ppvBuffer
, DWORD
* pdwSize
);
403 /*****************************************************************************
404 * IDirectMusicPortDownloadImpl implementation structure
406 struct IDirectMusicPortDownloadImpl
408 /* IUnknown fields */
409 ICOM_VFIELD(IDirectMusicPortDownload
);
412 /* IDirectMusicPortDownloadImpl fields */
416 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_QueryInterface (LPDIRECTMUSICPORTDOWNLOAD iface
, REFIID riid
, LPVOID
*ppobj
);
417 extern ULONG WINAPI
IDirectMusicPortDownloadImpl_AddRef (LPDIRECTMUSICPORTDOWNLOAD iface
);
418 extern ULONG WINAPI
IDirectMusicPortDownloadImpl_Release (LPDIRECTMUSICPORTDOWNLOAD iface
);
419 /* IDirectMusicPortDownloadImpl: */
420 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_GetBuffer (LPDIRECTMUSICPORTDOWNLOAD iface
, DWORD dwDLId
, IDirectMusicDownload
** ppIDMDownload
);
421 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_AllocateBuffer (LPDIRECTMUSICPORTDOWNLOAD iface
, DWORD dwSize
, IDirectMusicDownload
** ppIDMDownload
);
422 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_GetDLId (LPDIRECTMUSICPORTDOWNLOAD iface
, DWORD
* pdwStartDLId
, DWORD dwCount
);
423 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_GetAppend (LPDIRECTMUSICPORTDOWNLOAD iface
, DWORD
* pdwAppend
);
424 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_Download (LPDIRECTMUSICPORTDOWNLOAD iface
, IDirectMusicDownload
* pIDMDownload
);
425 extern HRESULT WINAPI
IDirectMusicPortDownloadImpl_Unload (LPDIRECTMUSICPORTDOWNLOAD iface
, IDirectMusicDownload
* pIDMDownload
);
427 /*****************************************************************************
428 * IDirectMusicPortImpl implementation structure
430 struct IDirectMusicPortImpl
432 /* IUnknown fields */
433 ICOM_VFIELD(IDirectMusicPort
);
436 /* IDirectMusicPortImpl fields */
437 IDirectSound
* pDirectSound
;
438 IReferenceClock
* pLatencyClock
;
440 LPDMUS_PORTCAPS pCaps
;
441 LPDMUS_PORTPARAMS pParams
;
443 DMUSIC_PRIVATE_CHANNEL_GROUP group
[1];
447 extern HRESULT WINAPI
IDirectMusicPortImpl_QueryInterface (LPDIRECTMUSICPORT iface
, REFIID riid
, LPVOID
*ppobj
);
448 extern ULONG WINAPI
IDirectMusicPortImpl_AddRef (LPDIRECTMUSICPORT iface
);
449 extern ULONG WINAPI
IDirectMusicPortImpl_Release (LPDIRECTMUSICPORT iface
);
450 /* IDirectMusicPortImpl: */
451 extern HRESULT WINAPI
IDirectMusicPortImpl_PlayBuffer (LPDIRECTMUSICPORT iface
, LPDIRECTMUSICBUFFER pBuffer
);
452 extern HRESULT WINAPI
IDirectMusicPortImpl_SetReadNotificationHandle (LPDIRECTMUSICPORT iface
, HANDLE hEvent
);
453 extern HRESULT WINAPI
IDirectMusicPortImpl_Read (LPDIRECTMUSICPORT iface
, LPDIRECTMUSICBUFFER pBuffer
);
454 extern HRESULT WINAPI
IDirectMusicPortImpl_DownloadInstrument (LPDIRECTMUSICPORT iface
, IDirectMusicInstrument
* pInstrument
, IDirectMusicDownloadedInstrument
** ppDownloadedInstrument
, DMUS_NOTERANGE
* pNoteRanges
, DWORD dwNumNoteRanges
);
455 extern HRESULT WINAPI
IDirectMusicPortImpl_UnloadInstrument (LPDIRECTMUSICPORT iface
, IDirectMusicDownloadedInstrument
*pDownloadedInstrument
);
456 extern HRESULT WINAPI
IDirectMusicPortImpl_GetLatencyClock (LPDIRECTMUSICPORT iface
, IReferenceClock
** ppClock
);
457 extern HRESULT WINAPI
IDirectMusicPortImpl_GetRunningStats (LPDIRECTMUSICPORT iface
, LPDMUS_SYNTHSTATS pStats
);
458 extern HRESULT WINAPI
IDirectMusicPortImpl_GetCaps (LPDIRECTMUSICPORT iface
, LPDMUS_PORTCAPS pPortCaps
);
459 extern HRESULT WINAPI
IDirectMusicPortImpl_DeviceIoControl (LPDIRECTMUSICPORT iface
, DWORD dwIoControlCode
, LPVOID lpInBuffer
, DWORD nInBufferSize
, LPVOID lpOutBuffer
, DWORD nOutBufferSize
, LPDWORD lpBytesReturned
, LPOVERLAPPED lpOverlapped
);
460 extern HRESULT WINAPI
IDirectMusicPortImpl_SetNumChannelGroups (LPDIRECTMUSICPORT iface
, DWORD dwChannelGroups
);
461 extern HRESULT WINAPI
IDirectMusicPortImpl_GetNumChannelGroups (LPDIRECTMUSICPORT iface
, LPDWORD pdwChannelGroups
);
462 extern HRESULT WINAPI
IDirectMusicPortImpl_Activate (LPDIRECTMUSICPORT iface
, BOOL fActive
);
463 extern HRESULT WINAPI
IDirectMusicPortImpl_SetChannelPriority (LPDIRECTMUSICPORT iface
, DWORD dwChannelGroup
, DWORD dwChannel
, DWORD dwPriority
);
464 extern HRESULT WINAPI
IDirectMusicPortImpl_GetChannelPriority (LPDIRECTMUSICPORT iface
, DWORD dwChannelGroup
, DWORD dwChannel
, LPDWORD pdwPriority
);
465 extern HRESULT WINAPI
IDirectMusicPortImpl_SetDirectSound (LPDIRECTMUSICPORT iface
, LPDIRECTSOUND pDirectSound
, LPDIRECTSOUNDBUFFER pDirectSoundBuffer
);
466 extern HRESULT WINAPI
IDirectMusicPortImpl_GetFormat (LPDIRECTMUSICPORT iface
, LPWAVEFORMATEX pWaveFormatEx
, LPDWORD pdwWaveFormatExSize
, LPDWORD pdwBufferSize
);
468 /*****************************************************************************
469 * IDirectMusicThruImpl implementation structure
471 struct IDirectMusicThruImpl
473 /* IUnknown fields */
474 ICOM_VFIELD(IDirectMusicThru
);
477 /* IDirectMusicThruImpl fields */
481 extern HRESULT WINAPI
IDirectMusicThruImpl_QueryInterface (LPDIRECTMUSICTHRU iface
, REFIID riid
, LPVOID
*ppobj
);
482 extern ULONG WINAPI
IDirectMusicThruImpl_AddRef (LPDIRECTMUSICTHRU iface
);
483 extern ULONG WINAPI
IDirectMusicThruImpl_Release (LPDIRECTMUSICTHRU iface
);
484 /* IDirectMusicPortDownloadImpl: */
485 extern HRESULT WINAPI
ThruChannel (LPDIRECTMUSICTHRU iface
, DWORD dwSourceChannelGroup
, DWORD dwSourceChannel
, DWORD dwDestinationChannelGroup
, DWORD dwDestinationChannel
, LPDIRECTMUSICPORT pDestinationPort
);
487 /*****************************************************************************
488 * IReferenceClockImpl implementation structure
490 struct IReferenceClockImpl
492 /* IUnknown fields */
493 ICOM_VFIELD(IReferenceClock
);
496 /* IReferenceClockImpl fields */
497 REFERENCE_TIME rtTime
;
498 DMUS_CLOCKINFO pClockInfo
;
502 extern HRESULT WINAPI
IReferenceClockImpl_QueryInterface (IReferenceClock
*iface
, REFIID riid
, LPVOID
*ppobj
);
503 extern ULONG WINAPI
IReferenceClockImpl_AddRef (IReferenceClock
*iface
);
504 extern ULONG WINAPI
IReferenceClockImpl_Release (IReferenceClock
*iface
);
505 /* IReferenceClock: */
506 extern HRESULT WINAPI
IReferenceClockImpl_GetTime (IReferenceClock
*iface
, REFERENCE_TIME
* pTime
);
507 extern HRESULT WINAPI
IReferenceClockImpl_AdviseTime (IReferenceClock
*iface
, REFERENCE_TIME baseTime
, REFERENCE_TIME streamTime
, HANDLE hEvent
, DWORD
* pdwAdviseCookie
);
508 extern HRESULT WINAPI
IReferenceClockImpl_AdvisePeriodic (IReferenceClock
*iface
, REFERENCE_TIME startTime
, REFERENCE_TIME periodTime
, HANDLE hSemaphore
, DWORD
* pdwAdviseCookie
);
509 extern HRESULT WINAPI
IReferenceClockImpl_Unadvise (IReferenceClock
*iface
, DWORD dwAdviseCookie
);
512 /*****************************************************************************
513 * IDirectMusicCollectionObject implementation structure
515 struct IDirectMusicCollectionObject
517 /* IUnknown fields */
518 ICOM_VFIELD (IDirectMusicObject
);
521 /* IDirectMusicObjectImpl fields */
522 LPDMUS_OBJECTDESC pDesc
;
523 IDirectMusicCollectionObjectStream
* pStream
;
524 IDirectMusicCollectionImpl
* pCollection
;
528 extern HRESULT WINAPI
IDirectMusicCollectionObject_QueryInterface (LPDIRECTMUSICOBJECT iface
, REFIID riid
, LPVOID
*ppobj
);
529 extern ULONG WINAPI
IDirectMusicCollectionObject_AddRef (LPDIRECTMUSICOBJECT iface
);
530 extern ULONG WINAPI
IDirectMusicCollectionObject_Release (LPDIRECTMUSICOBJECT iface
);
531 /* IDirectMusicObject: */
532 extern HRESULT WINAPI
IDirectMusicCollectionObject_GetDescriptor (LPDIRECTMUSICOBJECT iface
, LPDMUS_OBJECTDESC pDesc
);
533 extern HRESULT WINAPI
IDirectMusicCollectionObject_SetDescriptor (LPDIRECTMUSICOBJECT iface
, LPDMUS_OBJECTDESC pDesc
);
534 extern HRESULT WINAPI
IDirectMusicCollectionObject_ParseDescriptor (LPDIRECTMUSICOBJECT iface
, LPSTREAM pStream
, LPDMUS_OBJECTDESC pDesc
);
536 /*****************************************************************************
537 * IDirectMusicCollectionObjectStream implementation structure
539 struct IDirectMusicCollectionObjectStream
541 /* IUnknown fields */
542 ICOM_VFIELD (IPersistStream
);
545 /* IPersistStreamImpl fields */
546 IDirectMusicCollectionObject
* pParentObject
;
550 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_QueryInterface (LPPERSISTSTREAM iface
, REFIID riid
, void** ppvObject
);
551 extern ULONG WINAPI
IDirectMusicCollectionObjectStream_AddRef (LPPERSISTSTREAM iface
);
552 extern ULONG WINAPI
IDirectMusicCollectionObjectStream_Release (LPPERSISTSTREAM iface
);
554 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_GetClassID (LPPERSISTSTREAM iface
, CLSID
* pClassID
);
555 /* IPersistStream: */
556 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_IsDirty (LPPERSISTSTREAM iface
);
557 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_Load (LPPERSISTSTREAM iface
, IStream
* pStm
);
558 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_Save (LPPERSISTSTREAM iface
, IStream
* pStm
, BOOL fClearDirty
);
559 extern HRESULT WINAPI
IDirectMusicCollectionObjectStream_GetSizeMax (LPPERSISTSTREAM iface
, ULARGE_INTEGER
* pcbSize
);
562 /*****************************************************************************
565 void register_waveport (LPGUID lpGUID
, LPCSTR lpszDesc
, LPCSTR lpszDrvName
, LPVOID lpContext
);
567 #endif /* __WINE_DMUSIC_PRIVATE_H */