/[cvs]/api/include/dmusicc.h
ViewVC logotype

Annotation of /api/include/dmusicc.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (vendor branch)
Sun Jul 1 20:47:59 2001 UTC (23 years, 4 months ago) by bearsoft
Branch: lazy, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
First import

1 bearsoft 1.1 /************************************************************************
2     * *
3     * dmusicc.h -- This module defines the DirectMusic core API's *
4     * *
5     * Copyright (c) 1998-1999 Microsoft Corporation
6     * *
7     ************************************************************************/
8    
9     #ifndef _DMUSICC_
10     #define _DMUSICC_
11    
12     #include <windows.h>
13    
14     #define COM_NO_WINDOWS_H
15     #include <objbase.h>
16    
17     #include <mmsystem.h>
18    
19     #include "dls1.h"
20     #include "dmerror.h"
21     #include "dmdls.h"
22     #include "dsound.h"
23     #include "dmusbuff.h"
24    
25     #include <pshpack8.h>
26    
27     #ifdef __cplusplus
28     extern "C" {
29     #endif
30    
31     typedef ULONGLONG SAMPLE_TIME;
32     typedef ULONGLONG SAMPLE_POSITION;
33     typedef SAMPLE_TIME *LPSAMPLE_TIME;
34    
35     #define DMUS_MAX_DESCRIPTION 128
36     #define DMUS_MAX_DRIVER 128
37    
38     typedef struct _DMUS_BUFFERDESC *LPDMUS_BUFFERDESC;
39     typedef struct _DMUS_BUFFERDESC
40     {
41     DWORD dwSize;
42     DWORD dwFlags;
43     GUID guidBufferFormat;
44     DWORD cbBuffer;
45     } DMUS_BUFFERDESC;
46    
47     /* DMUS_EFFECT_ flags are used in the dwEffectFlags fields of both DMUS_PORTCAPS
48     * and DMUS_PORTPARAMS.
49     */
50     #define DMUS_EFFECT_NONE 0x00000000
51     #define DMUS_EFFECT_REVERB 0x00000001
52     #define DMUS_EFFECT_CHORUS 0x00000002
53    
54     /* For DMUS_PORTCAPS dwClass
55     */
56     #define DMUS_PC_INPUTCLASS (0)
57     #define DMUS_PC_OUTPUTCLASS (1)
58    
59     /* For DMUS_PORTCAPS dwFlags
60     */
61     #define DMUS_PC_DLS (0x00000001) // Supports DLS downloading and DLS level 1.
62     #define DMUS_PC_EXTERNAL (0x00000002) // External MIDI module.
63     #define DMUS_PC_SOFTWARESYNTH (0x00000004) // Software synthesizer.
64     #define DMUS_PC_MEMORYSIZEFIXED (0x00000008) // Memory size is fixed.
65     #define DMUS_PC_GMINHARDWARE (0x00000010) // GM sound set is built in, no need to download.
66     #define DMUS_PC_GSINHARDWARE (0x00000020) // GS sound set is built in.
67     #define DMUS_PC_XGINHARDWARE (0x00000040) // XG sound set is built in.
68     #define DMUS_PC_DIRECTSOUND (0x00000080) // Connects to DirectSound via a DSound buffer.
69     #define DMUS_PC_SHAREABLE (0x00000100) // Synth can be actively shared by multiple apps at once.
70     #define DMUS_PC_DLS2 (0x00000200) // Supports DLS2 instruments.
71     #define DMUS_PC_AUDIOPATH (0x00000400) // Multiple outputs can be connected to DirectSound for audiopaths.
72     #define DMUS_PC_WAVE (0x00000800) // Supports streaming and one shot waves.
73    
74     #define DMUS_PC_SYSTEMMEMORY (0x7FFFFFFF) // Sample memory is system memory.
75    
76    
77     typedef struct _DMUS_PORTCAPS
78     {
79     DWORD dwSize;
80     DWORD dwFlags;
81     GUID guidPort;
82     DWORD dwClass;
83     DWORD dwType;
84     DWORD dwMemorySize;
85     DWORD dwMaxChannelGroups;
86     DWORD dwMaxVoices;
87     DWORD dwMaxAudioChannels;
88     DWORD dwEffectFlags;
89     WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
90     } DMUS_PORTCAPS;
91    
92     typedef DMUS_PORTCAPS *LPDMUS_PORTCAPS;
93    
94     /* Values for DMUS_PORTCAPS dwType. This field indicates the underlying
95     * driver type of the port.
96     */
97     #define DMUS_PORT_WINMM_DRIVER (0)
98     #define DMUS_PORT_USER_MODE_SYNTH (1)
99     #define DMUS_PORT_KERNEL_MODE (2)
100    
101     /* These flags (set in dwValidParams) indicate which other members of the */
102     /* DMUS_PORTPARAMS are valid. */
103     /* */
104     #define DMUS_PORTPARAMS_VOICES 0x00000001
105     #define DMUS_PORTPARAMS_CHANNELGROUPS 0x00000002
106     #define DMUS_PORTPARAMS_AUDIOCHANNELS 0x00000004
107     #define DMUS_PORTPARAMS_SAMPLERATE 0x00000008
108     #define DMUS_PORTPARAMS_EFFECTS 0x00000020
109     #define DMUS_PORTPARAMS_SHARE 0x00000040
110     #define DMUS_PORTPARAMS_FEATURES 0x00000080 /* DirectX 8.0 and above */
111    
112     typedef struct _DMUS_PORTPARAMS
113     {
114     DWORD dwSize;
115     DWORD dwValidParams;
116     DWORD dwVoices;
117     DWORD dwChannelGroups;
118     DWORD dwAudioChannels;
119     DWORD dwSampleRate;
120     DWORD dwEffectFlags;
121     BOOL fShare;
122     } DMUS_PORTPARAMS7;
123    
124     typedef struct _DMUS_PORTPARAMS8
125     {
126     DWORD dwSize;
127     DWORD dwValidParams;
128     DWORD dwVoices;
129     DWORD dwChannelGroups;
130     DWORD dwAudioChannels;
131     DWORD dwSampleRate;
132     DWORD dwEffectFlags;
133     BOOL fShare;
134     DWORD dwFeatures;
135     } DMUS_PORTPARAMS8;
136    
137     #define DMUS_PORT_FEATURE_AUDIOPATH 0x00000001 /* Supports audiopath connection to DSound buffers. */
138     #define DMUS_PORT_FEATURE_STREAMING 0x00000002 /* Supports streaming waves through the synth. */
139    
140    
141     typedef DMUS_PORTPARAMS8 DMUS_PORTPARAMS;
142     typedef DMUS_PORTPARAMS *LPDMUS_PORTPARAMS;
143    
144     typedef struct _DMUS_SYNTHSTATS *LPDMUS_SYNTHSTATS;
145     typedef struct _DMUS_SYNTHSTATS8 *LPDMUS_SYNTHSTATS8;
146     typedef struct _DMUS_SYNTHSTATS
147     {
148     DWORD dwSize; /* Size in bytes of the structure */
149     DWORD dwValidStats; /* Flags indicating which fields below are valid. */
150     DWORD dwVoices; /* Average number of voices playing. */
151     DWORD dwTotalCPU; /* Total CPU usage as percent * 100. */
152     DWORD dwCPUPerVoice; /* CPU per voice as percent * 100. */
153     DWORD dwLostNotes; /* Number of notes lost in 1 second. */
154     DWORD dwFreeMemory; /* Free memory in bytes */
155     long lPeakVolume; /* Decibel level * 100. */
156     } DMUS_SYNTHSTATS;
157    
158     typedef struct _DMUS_SYNTHSTATS8
159     {
160     DWORD dwSize; /* Size in bytes of the structure */
161     DWORD dwValidStats; /* Flags indicating which fields below are valid. */
162     DWORD dwVoices; /* Average number of voices playing. */
163     DWORD dwTotalCPU; /* Total CPU usage as percent * 100. */
164     DWORD dwCPUPerVoice; /* CPU per voice as percent * 100. */
165     DWORD dwLostNotes; /* Number of notes lost in 1 second. */
166     DWORD dwFreeMemory; /* Free memory in bytes */
167     long lPeakVolume; /* Decibel level * 100. */
168     DWORD dwSynthMemUse; /* Memory used by synth wave data */
169     } DMUS_SYNTHSTATS8;
170    
171     #define DMUS_SYNTHSTATS_VOICES (1 << 0)
172     #define DMUS_SYNTHSTATS_TOTAL_CPU (1 << 1)
173     #define DMUS_SYNTHSTATS_CPU_PER_VOICE (1 << 2)
174     #define DMUS_SYNTHSTATS_LOST_NOTES (1 << 3)
175     #define DMUS_SYNTHSTATS_PEAK_VOLUME (1 << 4)
176     #define DMUS_SYNTHSTATS_FREE_MEMORY (1 << 5)
177    
178     #define DMUS_SYNTHSTATS_SYSTEMMEMORY DMUS_PC_SYSTEMMEMORY
179    
180     typedef struct _DMUS_WAVES_REVERB_PARAMS
181     {
182     float fInGain; /* Input gain in dB (to avoid output overflows) */
183     float fReverbMix; /* Reverb mix in dB. 0dB means 100% wet reverb (no direct signal)
184     Negative values gives less wet signal.
185     The coeficients are calculated so that the overall output level stays
186     (approximately) constant regardless of the ammount of reverb mix. */
187     float fReverbTime; /* The reverb decay time, in milliseconds. */
188     float fHighFreqRTRatio; /* The ratio of the high frequencies to the global reverb time.
189     Unless very 'splashy-bright' reverbs are wanted, this should be set to
190     a value < 1.0.
191     For example if dRevTime==1000ms and dHighFreqRTRatio=0.1 than the
192     decay time for high frequencies will be 100ms.*/
193    
194     } DMUS_WAVES_REVERB_PARAMS;
195    
196     /* Note: Default values for Reverb are:
197     fInGain = 0.0dB (no change in level)
198     fReverbMix = -10.0dB (a reasonable reverb mix)
199     fReverbTime = 1000.0ms (one second global reverb time)
200     fHighFreqRTRatio = 0.001 (the ratio of the high frequencies to the global reverb time)
201     */
202    
203     typedef enum
204     {
205     DMUS_CLOCK_SYSTEM = 0,
206     DMUS_CLOCK_WAVE = 1
207     } DMUS_CLOCKTYPE;
208    
209     #define DMUS_CLOCKF_GLOBAL 0x00000001
210    
211     typedef struct _DMUS_CLOCKINFO7 *LPDMUS_CLOCKINFO7;
212     typedef struct _DMUS_CLOCKINFO7
213     {
214     DWORD dwSize;
215     DMUS_CLOCKTYPE ctType;
216     GUID guidClock; /* Identifies this time source */
217     WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
218     } DMUS_CLOCKINFO7;
219    
220     typedef struct _DMUS_CLOCKINFO8 *LPDMUS_CLOCKINFO8;
221     typedef struct _DMUS_CLOCKINFO8
222     {
223     DWORD dwSize;
224     DMUS_CLOCKTYPE ctType;
225     GUID guidClock; /* Identifies this time source */
226     WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
227     DWORD dwFlags;
228     } DMUS_CLOCKINFO8;
229    
230     typedef DMUS_CLOCKINFO8 DMUS_CLOCKINFO;
231     typedef DMUS_CLOCKINFO *LPDMUS_CLOCKINFO;
232    
233     /* Default bus identifiers
234     *
235     * The first 17 are direct mappings to the destinations defined in both
236     * the MMA DLS Level 2 specification and the Microsoft Multi-Channel audio
237     * specification.
238     */
239     #define DSBUSID_FIRST_SPKR_LOC 0
240     #define DSBUSID_FRONT_LEFT 0
241     #define DSBUSID_LEFT 0 /* Front left is also just left */
242     #define DSBUSID_FRONT_RIGHT 1
243     #define DSBUSID_RIGHT 1 /* Ditto front right */
244     #define DSBUSID_FRONT_CENTER 2
245     #define DSBUSID_LOW_FREQUENCY 3
246     #define DSBUSID_BACK_LEFT 4
247     #define DSBUSID_BACK_RIGHT 5
248     #define DSBUSID_FRONT_LEFT_OF_CENTER 6
249     #define DSBUSID_FRONT_RIGHT_OF_CENTER 7
250     #define DSBUSID_BACK_CENTER 8
251     #define DSBUSID_SIDE_LEFT 9
252     #define DSBUSID_SIDE_RIGHT 10
253     #define DSBUSID_TOP_CENTER 11
254     #define DSBUSID_TOP_FRONT_LEFT 12
255     #define DSBUSID_TOP_FRONT_CENTER 13
256     #define DSBUSID_TOP_FRONT_RIGHT 14
257     #define DSBUSID_TOP_BACK_LEFT 15
258     #define DSBUSID_TOP_BACK_CENTER 16
259     #define DSBUSID_TOP_BACK_RIGHT 17
260     #define DSBUSID_LAST_SPKR_LOC 17
261    
262     #define DSBUSID_IS_SPKR_LOC(id) ( ((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC) )
263    
264     /* These bus identifiers are for the standard DLS effect sends
265     */
266     #define DSBUSID_REVERB_SEND 64
267     #define DSBUSID_CHORUS_SEND 65
268    
269     /* Dynamic bus identifiers start here. See the documentation for how
270     * synthesizers map the output of voices to static and dynamic
271     * bus identifiers.
272     */
273     #define DSBUSID_DYNAMIC_0 512
274    
275     /* Null bus, used to identify busses that have no function mapping.
276     */
277     #define DSBUSID_NULL 0xFFFFFFFF
278    
279     interface IDirectMusic;
280     interface IDirectMusic8;
281     interface IDirectMusicBuffer;
282     interface IDirectMusicPort;
283     interface IDirectMusicThru;
284     interface IReferenceClock;
285    
286     #ifndef __cplusplus
287    
288     typedef interface IDirectMusic IDirectMusic;
289     typedef interface IDirectMusic8 IDirectMusic8;
290     typedef interface IDirectMusicPort IDirectMusicPort;
291     typedef interface IDirectMusicBuffer IDirectMusicBuffer;
292     typedef interface IDirectMusicThru IDirectMusicThru;
293     typedef interface IReferenceClock IReferenceClock;
294    
295     #endif /* C++ */
296    
297     typedef IDirectMusic *LPDIRECTMUSIC;
298     typedef IDirectMusic8 *LPDIRECTMUSIC8;
299     typedef IDirectMusicPort *LPDIRECTMUSICPORT;
300     typedef IDirectMusicBuffer *LPDIRECTMUSICBUFFER;
301    
302     #undef INTERFACE
303     #define INTERFACE IDirectMusic
304     DECLARE_INTERFACE_(IDirectMusic, IUnknown)
305     {
306     /* IUnknown */
307     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
308     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
309     STDMETHOD_(ULONG,Release) (THIS) PURE;
310    
311     /* IDirectMusic */
312     STDMETHOD(EnumPort) (THIS_ DWORD dwIndex,
313     LPDMUS_PORTCAPS pPortCaps) PURE;
314     STDMETHOD(CreateMusicBuffer) (THIS_ LPDMUS_BUFFERDESC pBufferDesc,
315     LPDIRECTMUSICBUFFER *ppBuffer,
316     LPUNKNOWN pUnkOuter) PURE;
317     STDMETHOD(CreatePort) (THIS_ REFCLSID rclsidPort,
318     LPDMUS_PORTPARAMS pPortParams,
319     LPDIRECTMUSICPORT *ppPort,
320     LPUNKNOWN pUnkOuter) PURE;
321     STDMETHOD(EnumMasterClock) (THIS_ DWORD dwIndex,
322     LPDMUS_CLOCKINFO lpClockInfo) PURE;
323     STDMETHOD(GetMasterClock) (THIS_ LPGUID pguidClock,
324     IReferenceClock **ppReferenceClock) PURE;
325     STDMETHOD(SetMasterClock) (THIS_ REFGUID rguidClock) PURE;
326     STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
327     STDMETHOD(GetDefaultPort) (THIS_ LPGUID pguidPort) PURE;
328     STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound,
329     HWND hWnd) PURE;
330     };
331    
332     #undef INTERFACE
333     #define INTERFACE IDirectMusic8
334     DECLARE_INTERFACE_(IDirectMusic8, IDirectMusic)
335     {
336     /* IUnknown */
337     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
338     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
339     STDMETHOD_(ULONG,Release) (THIS) PURE;
340    
341     /* IDirectMusic */
342     STDMETHOD(EnumPort) (THIS_ DWORD dwIndex,
343     LPDMUS_PORTCAPS pPortCaps) PURE;
344     STDMETHOD(CreateMusicBuffer) (THIS_ LPDMUS_BUFFERDESC pBufferDesc,
345     LPDIRECTMUSICBUFFER *ppBuffer,
346     LPUNKNOWN pUnkOuter) PURE;
347     STDMETHOD(CreatePort) (THIS_ REFCLSID rclsidPort,
348     LPDMUS_PORTPARAMS pPortParams,
349     LPDIRECTMUSICPORT *ppPort,
350     LPUNKNOWN pUnkOuter) PURE;
351     STDMETHOD(EnumMasterClock) (THIS_ DWORD dwIndex,
352     LPDMUS_CLOCKINFO lpClockInfo) PURE;
353     STDMETHOD(GetMasterClock) (THIS_ LPGUID pguidClock,
354     IReferenceClock **ppReferenceClock) PURE;
355     STDMETHOD(SetMasterClock) (THIS_ REFGUID rguidClock) PURE;
356     STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
357     STDMETHOD(GetDefaultPort) (THIS_ LPGUID pguidPort) PURE;
358     STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound,
359     HWND hWnd) PURE;
360     /* IDirectMusic8 */
361     STDMETHOD(SetExternalMasterClock)
362     (THIS_ IReferenceClock *pClock) PURE;
363     };
364    
365     #undef INTERFACE
366     #define INTERFACE IDirectMusicBuffer
367     DECLARE_INTERFACE_(IDirectMusicBuffer, IUnknown)
368     {
369     /* IUnknown */
370     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
371     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
372     STDMETHOD_(ULONG,Release) (THIS) PURE;
373    
374     /* IDirectMusicBuffer */
375     STDMETHOD(Flush) (THIS) PURE;
376     STDMETHOD(TotalTime) (THIS_ LPREFERENCE_TIME prtTime) PURE;
377    
378     STDMETHOD(PackStructured) (THIS_ REFERENCE_TIME rt,
379     DWORD dwChannelGroup,
380     DWORD dwChannelMessage) PURE;
381    
382     STDMETHOD(PackUnstructured) (THIS_ REFERENCE_TIME rt,
383     DWORD dwChannelGroup,
384     DWORD cb,
385     LPBYTE lpb) PURE;
386    
387     STDMETHOD(ResetReadPtr) (THIS) PURE;
388     STDMETHOD(GetNextEvent) (THIS_ LPREFERENCE_TIME prt,
389     LPDWORD pdwChannelGroup,
390     LPDWORD pdwLength,
391     LPBYTE *ppData) PURE;
392    
393     STDMETHOD(GetRawBufferPtr) (THIS_ LPBYTE *ppData) PURE;
394     STDMETHOD(GetStartTime) (THIS_ LPREFERENCE_TIME prt) PURE;
395     STDMETHOD(GetUsedBytes) (THIS_ LPDWORD pcb) PURE;
396     STDMETHOD(GetMaxBytes) (THIS_ LPDWORD pcb) PURE;
397     STDMETHOD(GetBufferFormat) (THIS_ LPGUID pGuidFormat) PURE;
398    
399     STDMETHOD(SetStartTime) (THIS_ REFERENCE_TIME rt) PURE;
400     STDMETHOD(SetUsedBytes) (THIS_ DWORD cb) PURE;
401     };
402    
403     typedef IDirectMusicBuffer IDirectMusicBuffer8;
404     typedef IDirectMusicBuffer8 *LPDIRECTMUSICBUFFER8;
405    
406     #undef INTERFACE
407     #define INTERFACE IDirectMusicInstrument
408     DECLARE_INTERFACE_(IDirectMusicInstrument, IUnknown)
409     {
410     /* IUnknown */
411     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
412     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
413     STDMETHOD_(ULONG,Release) (THIS) PURE;
414    
415     /* IDirectMusicInstrument */
416     STDMETHOD(GetPatch) (THIS_ DWORD* pdwPatch) PURE;
417     STDMETHOD(SetPatch) (THIS_ DWORD dwPatch) PURE;
418     };
419    
420     typedef IDirectMusicInstrument IDirectMusicInstrument8;
421     typedef IDirectMusicInstrument8 *LPDIRECTMUSICINSTRUMENT8;
422    
423     #undef INTERFACE
424     #define INTERFACE IDirectMusicDownloadedInstrument
425     DECLARE_INTERFACE_(IDirectMusicDownloadedInstrument, IUnknown)
426     {
427     /* IUnknown */
428     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
429     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
430     STDMETHOD_(ULONG,Release) (THIS) PURE;
431    
432     /* IDirectMusicDownloadedInstrument */
433     /* None at this time */
434     };
435    
436     typedef IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument8;
437     typedef IDirectMusicDownloadedInstrument8 *LPDIRECTMUSICDOWNLOADEDINSTRUMENT8;
438    
439     #undef INTERFACE
440     #define INTERFACE IDirectMusicCollection
441     DECLARE_INTERFACE_(IDirectMusicCollection, IUnknown)
442     {
443     /* IUnknown */
444     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
445     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
446     STDMETHOD_(ULONG,Release) (THIS) PURE;
447    
448     /* IDirectMusicCollection */
449     STDMETHOD(GetInstrument) (THIS_ DWORD dwPatch,
450     IDirectMusicInstrument** ppInstrument) PURE;
451     STDMETHOD(EnumInstrument) (THIS_ DWORD dwIndex,
452     DWORD* pdwPatch,
453     LPWSTR pwszName,
454     DWORD dwNameLen) PURE;
455     };
456    
457     typedef IDirectMusicCollection IDirectMusicCollection8;
458     typedef IDirectMusicCollection8 *LPDIRECTMUSICCOLLECTION8;
459    
460     #undef INTERFACE
461     #define INTERFACE IDirectMusicDownload
462     DECLARE_INTERFACE_(IDirectMusicDownload , IUnknown)
463     {
464     /* IUnknown */
465     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
466     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
467     STDMETHOD_(ULONG,Release) (THIS) PURE;
468    
469     /* IDirectMusicDownload */
470     STDMETHOD(GetBuffer) (THIS_ void** ppvBuffer,
471     DWORD* pdwSize) PURE;
472     };
473    
474     typedef IDirectMusicDownload IDirectMusicDownload8;
475     typedef IDirectMusicDownload8 *LPDIRECTMUSICDOWNLOAD8;
476    
477     #undef INTERFACE
478     #define INTERFACE IDirectMusicPortDownload
479     DECLARE_INTERFACE_(IDirectMusicPortDownload, IUnknown)
480     {
481     /* IUnknown */
482     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
483     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
484     STDMETHOD_(ULONG,Release) (THIS) PURE;
485    
486     /* IDirectMusicPortDownload */
487     STDMETHOD(GetBuffer) (THIS_ DWORD dwDLId,
488     IDirectMusicDownload** ppIDMDownload) PURE;
489     STDMETHOD(AllocateBuffer) (THIS_ DWORD dwSize,
490     IDirectMusicDownload** ppIDMDownload) PURE;
491     STDMETHOD(GetDLId) (THIS_ DWORD* pdwStartDLId,
492     DWORD dwCount) PURE;
493     STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
494     STDMETHOD(Download) (THIS_ IDirectMusicDownload* pIDMDownload) PURE;
495     STDMETHOD(Unload) (THIS_ IDirectMusicDownload* pIDMDownload) PURE;
496     };
497    
498     typedef IDirectMusicPortDownload IDirectMusicPortDownload8;
499     typedef IDirectMusicPortDownload8 *LPDIRECTMUSICPORTDOWNLOAD8;
500    
501     /* Standard values for voice priorities. Numerically higher priorities are higher in priority.
502     * These priorities are used to set the voice priority for all voices on a channel. They are
503     * used in the dwPriority parameter of IDirectMusicPort::GetPriority and returned in the
504     * lpwPriority parameter of pdwPriority.
505     *
506     * These priorities are shared with DirectSound.
507     */
508    
509     #ifndef _DIRECTAUDIO_PRIORITIES_DEFINED_
510     #define _DIRECTAUDIO_PRIORITIES_DEFINED_
511    
512     #define DAUD_CRITICAL_VOICE_PRIORITY (0xF0000000)
513     #define DAUD_HIGH_VOICE_PRIORITY (0xC0000000)
514     #define DAUD_STANDARD_VOICE_PRIORITY (0x80000000)
515     #define DAUD_LOW_VOICE_PRIORITY (0x40000000)
516     #define DAUD_PERSIST_VOICE_PRIORITY (0x10000000)
517    
518     /* These are the default priorities assigned if not overridden. By default priorities are
519     * equal across channel groups (e.g. channel 5 on channel group 1 has the same priority as
520     * channel 5 on channel group 2).
521     *
522     * In accordance with DLS level 1, channel 10 has the highest priority, followed by 1 through 16
523     * except for 10.
524     */
525     #define DAUD_CHAN1_VOICE_PRIORITY_OFFSET (0x0000000E)
526     #define DAUD_CHAN2_VOICE_PRIORITY_OFFSET (0x0000000D)
527     #define DAUD_CHAN3_VOICE_PRIORITY_OFFSET (0x0000000C)
528     #define DAUD_CHAN4_VOICE_PRIORITY_OFFSET (0x0000000B)
529     #define DAUD_CHAN5_VOICE_PRIORITY_OFFSET (0x0000000A)
530     #define DAUD_CHAN6_VOICE_PRIORITY_OFFSET (0x00000009)
531     #define DAUD_CHAN7_VOICE_PRIORITY_OFFSET (0x00000008)
532     #define DAUD_CHAN8_VOICE_PRIORITY_OFFSET (0x00000007)
533     #define DAUD_CHAN9_VOICE_PRIORITY_OFFSET (0x00000006)
534     #define DAUD_CHAN10_VOICE_PRIORITY_OFFSET (0x0000000F)
535     #define DAUD_CHAN11_VOICE_PRIORITY_OFFSET (0x00000005)
536     #define DAUD_CHAN12_VOICE_PRIORITY_OFFSET (0x00000004)
537     #define DAUD_CHAN13_VOICE_PRIORITY_OFFSET (0x00000003)
538     #define DAUD_CHAN14_VOICE_PRIORITY_OFFSET (0x00000002)
539     #define DAUD_CHAN15_VOICE_PRIORITY_OFFSET (0x00000001)
540     #define DAUD_CHAN16_VOICE_PRIORITY_OFFSET (0x00000000)
541    
542    
543     #define DAUD_CHAN1_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN1_VOICE_PRIORITY_OFFSET)
544     #define DAUD_CHAN2_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN2_VOICE_PRIORITY_OFFSET)
545     #define DAUD_CHAN3_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN3_VOICE_PRIORITY_OFFSET)
546     #define DAUD_CHAN4_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN4_VOICE_PRIORITY_OFFSET)
547     #define DAUD_CHAN5_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN5_VOICE_PRIORITY_OFFSET)
548     #define DAUD_CHAN6_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN6_VOICE_PRIORITY_OFFSET)
549     #define DAUD_CHAN7_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN7_VOICE_PRIORITY_OFFSET)
550     #define DAUD_CHAN8_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN8_VOICE_PRIORITY_OFFSET)
551     #define DAUD_CHAN9_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN9_VOICE_PRIORITY_OFFSET)
552     #define DAUD_CHAN10_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN10_VOICE_PRIORITY_OFFSET)
553     #define DAUD_CHAN11_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN11_VOICE_PRIORITY_OFFSET)
554     #define DAUD_CHAN12_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN12_VOICE_PRIORITY_OFFSET)
555     #define DAUD_CHAN13_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN13_VOICE_PRIORITY_OFFSET)
556     #define DAUD_CHAN14_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN14_VOICE_PRIORITY_OFFSET)
557     #define DAUD_CHAN15_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN15_VOICE_PRIORITY_OFFSET)
558     #define DAUD_CHAN16_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN16_VOICE_PRIORITY_OFFSET)
559    
560     #endif /* _DIRECTAUDIO_PRIORITIES_DEFINED_ */
561    
562    
563     #undef INTERFACE
564     #define INTERFACE IDirectMusicPort
565     DECLARE_INTERFACE_(IDirectMusicPort, IUnknown)
566     {
567     /* IUnknown */
568     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
569     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
570     STDMETHOD_(ULONG,Release) (THIS) PURE;
571    
572     /* IDirectMusicPort */
573     /* */
574     STDMETHOD(PlayBuffer) (THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE;
575     STDMETHOD(SetReadNotificationHandle) (THIS_ HANDLE hEvent) PURE;
576     STDMETHOD(Read) (THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE;
577     STDMETHOD(DownloadInstrument) (THIS_ IDirectMusicInstrument *pInstrument,
578     IDirectMusicDownloadedInstrument **ppDownloadedInstrument,
579     DMUS_NOTERANGE *pNoteRanges,
580     DWORD dwNumNoteRanges) PURE;
581     STDMETHOD(UnloadInstrument) (THIS_ IDirectMusicDownloadedInstrument *pDownloadedInstrument) PURE;
582     STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
583     STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
584     STDMETHOD(Compact) (THIS) PURE;
585     STDMETHOD(GetCaps) (THIS_ LPDMUS_PORTCAPS pPortCaps) PURE;
586     STDMETHOD(DeviceIoControl) (THIS_ DWORD dwIoControlCode,
587     LPVOID lpInBuffer,
588     DWORD nInBufferSize,
589     LPVOID lpOutBuffer,
590     DWORD nOutBufferSize,
591     LPDWORD lpBytesReturned,
592     LPOVERLAPPED lpOverlapped) PURE;
593     STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwChannelGroups) PURE;
594     STDMETHOD(GetNumChannelGroups) (THIS_ LPDWORD pdwChannelGroups) PURE;
595     STDMETHOD(Activate) (THIS_ BOOL fActive) PURE;
596     STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
597     STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
598     STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
599     STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize) PURE;
600     };
601    
602     typedef IDirectMusicPort IDirectMusicPort8;
603     typedef IDirectMusicPort8 *LPDIRECTMUSICPORT8;
604    
605     #undef INTERFACE
606     #define INTERFACE IDirectMusicThru
607     DECLARE_INTERFACE_(IDirectMusicThru, IUnknown)
608     {
609     /* IUnknown */
610     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
611     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
612     STDMETHOD_(ULONG,Release) (THIS) PURE;
613    
614     /* IDirectMusicThru
615     */
616     STDMETHOD(ThruChannel) (THIS_ DWORD dwSourceChannelGroup,
617     DWORD dwSourceChannel,
618     DWORD dwDestinationChannelGroup,
619     DWORD dwDestinationChannel,
620     LPDIRECTMUSICPORT pDestinationPort) PURE;
621     };
622    
623     typedef IDirectMusicThru IDirectMusicThru8;
624     typedef IDirectMusicThru8 *LPDIRECTMUSICTHRU8;
625    
626     #ifndef __IReferenceClock_INTERFACE_DEFINED__
627     #define __IReferenceClock_INTERFACE_DEFINED__
628    
629     DEFINE_GUID(IID_IReferenceClock,0x56a86897,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);
630    
631     #undef INTERFACE
632     #define INTERFACE IReferenceClock
633     DECLARE_INTERFACE_(IReferenceClock, IUnknown)
634     {
635     /* IUnknown */
636     STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
637     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
638     STDMETHOD_(ULONG,Release) (THIS) PURE;
639    
640     /* IReferenceClock */
641     /* */
642    
643     /* get the time now */
644     STDMETHOD(GetTime) (THIS_ REFERENCE_TIME *pTime) PURE;
645    
646     /* ask for an async notification that a time has elapsed */
647     STDMETHOD(AdviseTime) (THIS_ REFERENCE_TIME baseTime, /* base time */
648     REFERENCE_TIME streamTime, /* stream offset time */
649     HANDLE hEvent, /* advise via this event */
650     DWORD * pdwAdviseCookie) PURE; /* where your cookie goes */
651    
652     /* ask for an async periodic notification that a time has elapsed */
653     STDMETHOD(AdvisePeriodic) (THIS_ REFERENCE_TIME startTime, /* starting at this time */
654     REFERENCE_TIME periodTime, /* time between notifications */
655     HANDLE hSemaphore, /* advise via a semaphore */
656     DWORD * pdwAdviseCookie) PURE; /* where your cookie goes */
657    
658     /* cancel a request for notification */
659     STDMETHOD(Unadvise) (THIS_ DWORD dwAdviseCookie) PURE;
660     };
661    
662     #endif /* __IReferenceClock_INTERFACE_DEFINED__ */
663    
664     DEFINE_GUID(CLSID_DirectMusic,0x636b9f10,0x0c7d,0x11d1,0x95,0xb2,0x00,0x20,0xaf,0xdc,0x74,0x21);
665     DEFINE_GUID(CLSID_DirectMusicCollection,0x480ff4b0, 0x28b2, 0x11d1, 0xbe, 0xf7, 0x0, 0xc0, 0x4f, 0xbf, 0x8f, 0xef);
666     DEFINE_GUID(CLSID_DirectMusicSynth,0x58C2B4D0,0x46E7,0x11D1,0x89,0xAC,0x00,0xA0,0xC9,0x05,0x41,0x29);
667    
668     DEFINE_GUID(IID_IDirectMusic,0x6536115a,0x7b2d,0x11d2,0xba,0x18,0x00,0x00,0xf8,0x75,0xac,0x12);
669     DEFINE_GUID(IID_IDirectMusicBuffer,0xd2ac2878, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
670     DEFINE_GUID(IID_IDirectMusicPort, 0x08f2d8c9,0x37c2,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
671     DEFINE_GUID(IID_IDirectMusicThru, 0xced153e7, 0x3606, 0x11d2, 0xb9, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
672     DEFINE_GUID(IID_IDirectMusicPortDownload,0xd2ac287a, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
673     DEFINE_GUID(IID_IDirectMusicDownload,0xd2ac287b, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
674     DEFINE_GUID(IID_IDirectMusicCollection,0xd2ac287c, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
675     DEFINE_GUID(IID_IDirectMusicInstrument,0xd2ac287d, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
676     DEFINE_GUID(IID_IDirectMusicDownloadedInstrument,0xd2ac287e, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
677    
678    
679     /* Alternate interface ID for IID_IDirectMusic, available in DX7 release and after. */
680     DEFINE_GUID(IID_IDirectMusic2,0x6fc2cae1, 0xbc78, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
681    
682     DEFINE_GUID(IID_IDirectMusic8,0x2d3629f7,0x813d,0x4939,0x85,0x08,0xf0,0x5c,0x6b,0x75,0xfd,0x97);
683    
684     #define IID_IDirectMusicThru8 IID_IDirectMusicThru
685     #define IID_IDirectMusicPortDownload8 IID_IDirectMusicPortDownload
686     #define IID_IDirectMusicDownload8 IID_IDirectMusicDownload
687     #define IID_IDirectMusicCollection8 IID_IDirectMusicCollection
688     #define IID_IDirectMusicInstrument8 IID_IDirectMusicInstrument
689     #define IID_IDirectMusicDownloadedInstrument8 IID_IDirectMusicDownloadedInstrument
690     #define IID_IDirectMusicPort8 IID_IDirectMusicPort
691    
692    
693     /* Property Query GUID_DMUS_PROP_GM_Hardware - Local GM set, no need to download
694     * Property Query GUID_DMUS_PROP_GS_Hardware - Local GS set, no need to download
695     * Property Query GUID_DMUS_PROP_XG_Hardware - Local XG set, no need to download
696     * Property Query GUID_DMUS_PROP_DLS1 - Support DLS level 1
697     * Property Query GUID_DMUS_PROP_INSTRUMENT2 - Support new INSTRUMENT2 download format
698     * Property Query GUID_DMUS_PROP_XG_Capable - Support minimum requirements of XG
699     * Property Query GUID_DMUS_PROP_GS_Capable - Support minimum requirements of GS
700     * Property Query GUID_DMUS_PROP_SynthSink_DSOUND - Synthsink talks to DSound
701     * Property Query GUID_DMUS_PROP_SynthSink_WAVE - Synthsink talks to Wave device
702     *
703     * Item 0: Supported
704     * Returns a DWORD which is non-zero if the feature is supported
705     */
706     DEFINE_GUID(GUID_DMUS_PROP_GM_Hardware, 0x178f2f24, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
707     DEFINE_GUID(GUID_DMUS_PROP_GS_Hardware, 0x178f2f25, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
708     DEFINE_GUID(GUID_DMUS_PROP_XG_Hardware, 0x178f2f26, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
709     DEFINE_GUID(GUID_DMUS_PROP_XG_Capable, 0x6496aba1, 0x61b0, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
710     DEFINE_GUID(GUID_DMUS_PROP_GS_Capable, 0x6496aba2, 0x61b0, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
711     DEFINE_GUID(GUID_DMUS_PROP_DLS1, 0x178f2f27, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
712     DEFINE_GUID(GUID_DMUS_PROP_DLS2, 0xf14599e5, 0x4689, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
713     DEFINE_GUID(GUID_DMUS_PROP_INSTRUMENT2, 0x865fd372, 0x9f67, 0x11d2, 0x87, 0x2a, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
714     DEFINE_GUID(GUID_DMUS_PROP_SynthSink_DSOUND,0xaa97844, 0xc877, 0x11d1, 0x87, 0xc, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
715     DEFINE_GUID(GUID_DMUS_PROP_SynthSink_WAVE,0xaa97845, 0xc877, 0x11d1, 0x87, 0xc, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
716     DEFINE_GUID(GUID_DMUS_PROP_SampleMemorySize, 0x178f2f28, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
717     DEFINE_GUID(GUID_DMUS_PROP_SamplePlaybackRate, 0x2a91f713, 0xa4bf, 0x11d2, 0xbb, 0xdf, 0x0, 0x60, 0x8, 0x33, 0xdb, 0xd8);
718    
719     /* Property Get/Set GUID_DMUS_PROP_WriteLatency
720     *
721     * Item 0: Synth buffer write latency, in milliseconds
722     * Get/Set SynthSink latency, the average time after the play head that the next buffer gets written.
723     */
724     DEFINE_GUID(GUID_DMUS_PROP_WriteLatency,0x268a0fa0, 0x60f2, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
725    
726     /* Property Get/Set GUID_DMUS_PROP_WritePeriod
727     *
728     * Item 0: Synth buffer write period, in milliseconds
729     * Get/Set SynthSink buffer write period, time span between successive writes.
730     */
731     DEFINE_GUID(GUID_DMUS_PROP_WritePeriod,0x268a0fa1, 0x60f2, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
732    
733     /* Property Get GUID_DMUS_PROP_MemorySize
734     *
735     * Item 0: Memory size
736     * Returns a DWORD containing the total number of bytes of sample RAM
737     */
738     DEFINE_GUID(GUID_DMUS_PROP_MemorySize, 0x178f2f28, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
739    
740     /* Property Set GUID_DMUS_PROP_WavesReverb
741     *
742     * Item 0: DMUS_WAVES_REVERB structure
743     * Sets reverb parameters
744     */
745     DEFINE_GUID(GUID_DMUS_PROP_WavesReverb,0x4cb5622, 0x32e5, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
746    
747     /* Property Set GUID_DMUS_PROP_Effects
748     *
749     * Item 0: DWORD with effects flags.
750     * Get/Set effects bits, same as dwEffectFlags in DMUS_PORTPARAMS and DMUS_PORTCAPS:
751     * DMUS_EFFECT_NONE
752     * DMUS_EFFECT_REVERB
753     * DMUS_EFFECT_CHORUS
754     */
755     DEFINE_GUID(GUID_DMUS_PROP_Effects, 0xcda8d611, 0x684a, 0x11d2, 0x87, 0x1e, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
756    
757     /* Property Set GUID_DMUS_PROP_LegacyCaps
758     *
759     * Item 0: The MIDINCAPS or MIDIOUTCAPS which describes the port's underlying WinMM device. This property is only supported
760     * by ports which wrap WinMM devices.
761     */
762    
763     DEFINE_GUID(GUID_DMUS_PROP_LegacyCaps,0xcfa7cdc2, 0x00a1, 0x11d2, 0xaa, 0xd5, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
764    
765     /* Property Set GUID_DMUS_PROP_Volume
766     *
767     * Item 0: A long which contains an offset, in 1/100 dB, to be added to the final volume
768     *
769     */
770     DEFINE_GUID(GUID_DMUS_PROP_Volume, 0xfedfae25L, 0xe46e, 0x11d1, 0xaa, 0xce, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
771    
772     /* Min and Max values for setting volume with GUID_DMUS_PROP_Volume */
773    
774     #define DMUS_VOLUME_MAX 2000 /* +20 dB */
775     #define DMUS_VOLUME_MIN -20000 /* -200 dB */
776    
777     #ifdef __cplusplus
778     }; /* extern "C" */
779     #endif
780    
781     #include <poppack.h>
782    
783     #endif /* #ifndef _DMUSICC_ */

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26