summaryrefslogtreecommitdiff
path: root/plugins/!NotAdopted/sndVol
diff options
context:
space:
mode:
authorRobert Pösel <robyer@seznam.cz>2013-01-14 19:35:34 +0000
committerRobert Pösel <robyer@seznam.cz>2013-01-14 19:35:34 +0000
commit96882781656eb2ec3f4c643f14a4d218a8c59301 (patch)
tree1dc9ee274f0e17ed5f5f138fdca204ef6e6219a4 /plugins/!NotAdopted/sndVol
parent187938fe58815e21fa4fd635fb9a7fb50f578d38 (diff)
Updated sndVol sources to recent version.
git-svn-id: http://svn.miranda-ng.org/main/trunk@3106 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'plugins/!NotAdopted/sndVol')
-rw-r--r--plugins/!NotAdopted/sndVol/DxErr8.libbin0 -> 1210560 bytes
-rw-r--r--plugins/!NotAdopted/sndVol/README37
-rw-r--r--plugins/!NotAdopted/sndVol/dls1.h267
-rw-r--r--plugins/!NotAdopted/sndVol/dls2.h130
-rw-r--r--plugins/!NotAdopted/sndVol/dmdls.h199
-rw-r--r--plugins/!NotAdopted/sndVol/dmerror.h843
-rw-r--r--plugins/!NotAdopted/sndVol/dmplugin.h280
-rw-r--r--plugins/!NotAdopted/sndVol/dmusbuff.h41
-rw-r--r--plugins/!NotAdopted/sndVol/dmusicc.h784
-rw-r--r--plugins/!NotAdopted/sndVol/dmusici.h1883
-rw-r--r--plugins/!NotAdopted/sndVol/dsound.h2358
-rw-r--r--plugins/!NotAdopted/sndVol/dxerr8.h99
-rw-r--r--plugins/!NotAdopted/sndVol/dxguid.libbin0 -> 408634 bytes
-rw-r--r--plugins/!NotAdopted/sndVol/mradio-muted.icobin0 -> 318 bytes
-rw-r--r--plugins/!NotAdopted/sndVol/mradio.icobin0 -> 318 bytes
-rw-r--r--plugins/!NotAdopted/sndVol/optionsdlg.cpp121
-rw-r--r--plugins/!NotAdopted/sndVol/playSnd.cpp37
-rw-r--r--plugins/!NotAdopted/sndVol/playSnd.h4
-rw-r--r--plugins/!NotAdopted/sndVol/plugin.cpp356
-rw-r--r--plugins/!NotAdopted/sndVol/plugin.h6
-rw-r--r--plugins/!NotAdopted/sndVol/resource.h13
-rw-r--r--plugins/!NotAdopted/sndVol/sndVol.apsbin0 -> 41060 bytes
-rw-r--r--plugins/!NotAdopted/sndVol/sndVol.dsp60
-rw-r--r--plugins/!NotAdopted/sndVol/sndVol.rc153
-rw-r--r--plugins/!NotAdopted/sndVol/sndVol.sln23
-rw-r--r--plugins/!NotAdopted/sndVol/sndVol.vcproj540
26 files changed, 8022 insertions, 212 deletions
diff --git a/plugins/!NotAdopted/sndVol/DxErr8.lib b/plugins/!NotAdopted/sndVol/DxErr8.lib
new file mode 100644
index 0000000000..0e1ce15675
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/DxErr8.lib
Binary files differ
diff --git a/plugins/!NotAdopted/sndVol/README b/plugins/!NotAdopted/sndVol/README
new file mode 100644
index 0000000000..3d326ad9b0
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/README
@@ -0,0 +1,37 @@
+This is a slightly modified version of the original sndVol plugin which
+was written by Std.
+
+The following things have changed:
+----------------------------------
+
+* added ability to set the volume for the mRadio plugin (if installed).
+ (this is optional, you can still use sndVol for ONLY setting the volume
+ for event sounds and handle mRadio volume directly in mRadio).
+
+* added ability to mute mRadio when muting event sounds (again, optional.)
+
+* added 2 items to the option page to allow enabling the features above
+ (mRadio support).
+
+* added ability to change background colour of the sndVol frame.
+
+* added 2nd mute button to mute mRadio ONLY (event sounds will stay
+ unmuted). This button is only visible when the mRadio plugin is
+ installed and detected. The 2 buttons may be synced when the option
+ "mute mRadio" on the options page is enabled, so it is still possible
+ to mute both event sounds and radio with a single click.
+
+* UPDATED FOR Miranda 0.8.x.x or later.
+
+ You can also right-click this button to open mRadio settings.
+
+---------------------
+
+contact: Nightwish (miranda forums or http://www.miranda.or.at/forums/
+ silvercircle@gmail.com
+ ICQ: 7769309
+ MSN: silvercircle@gmail.com
+
+LICENSE: GPL, most of the code was originally written by Std and distributed
+ under GPL.
+
diff --git a/plugins/!NotAdopted/sndVol/dls1.h b/plugins/!NotAdopted/sndVol/dls1.h
new file mode 100644
index 0000000000..b33425de9a
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dls1.h
@@ -0,0 +1,267 @@
+/*==========================================================================;
+//
+// dls1.h
+//
+//
+// Description:
+//
+// Interface defines and structures for the Instrument Collection Form
+// RIFF DLS.
+//
+//
+// Written by Sonic Foundry 1996. Released for public use.
+//
+//=========================================================================*/
+
+#ifndef _INC_DLS1
+#define _INC_DLS1
+
+/*//////////////////////////////////////////////////////////////////////////
+//
+//
+// Layout of an instrument collection:
+//
+//
+// RIFF [] 'DLS ' [dlid,colh,INSTLIST,WAVEPOOL,INFOLIST]
+//
+// INSTLIST
+// LIST [] 'lins'
+// LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST]
+// LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST]
+// LIST [] 'ins ' [dlid,insh,RGNLIST,ARTLIST,INFOLIST]
+//
+// RGNLIST
+// LIST [] 'lrgn'
+// LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST]
+// LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST]
+// LIST [] 'rgn ' [rgnh,wsmp,wlnk,ARTLIST]
+//
+// ARTLIST
+// LIST [] 'lart'
+// 'art1' level 1 Articulation connection graph
+// 'art2' level 2 Articulation connection graph
+// '3rd1' Possible 3rd party articulation structure 1
+// '3rd2' Possible 3rd party articulation structure 2 .... and so on
+//
+// WAVEPOOL
+// ptbl [] [pool table]
+// LIST [] 'wvpl'
+// [path],
+// [path],
+// LIST [] 'wave' [dlid,RIFFWAVE]
+// LIST [] 'wave' [dlid,RIFFWAVE]
+// LIST [] 'wave' [dlid,RIFFWAVE]
+// LIST [] 'wave' [dlid,RIFFWAVE]
+// LIST [] 'wave' [dlid,RIFFWAVE]
+//
+// INFOLIST
+// LIST [] 'INFO'
+// 'icmt' 'One of those crazy comments.'
+// 'icop' 'Copyright (C) 1996 Sonic Foundry'
+//
+/////////////////////////////////////////////////////////////////////////*/
+
+
+/*/////////////////////////////////////////////////////////////////////////
+// FOURCC's used in the DLS file
+/////////////////////////////////////////////////////////////////////////*/
+
+#define FOURCC_DLS mmioFOURCC('D','L','S',' ')
+#define FOURCC_DLID mmioFOURCC('d','l','i','d')
+#define FOURCC_COLH mmioFOURCC('c','o','l','h')
+#define FOURCC_WVPL mmioFOURCC('w','v','p','l')
+#define FOURCC_PTBL mmioFOURCC('p','t','b','l')
+#define FOURCC_PATH mmioFOURCC('p','a','t','h')
+#define FOURCC_wave mmioFOURCC('w','a','v','e')
+#define FOURCC_LINS mmioFOURCC('l','i','n','s')
+#define FOURCC_INS mmioFOURCC('i','n','s',' ')
+#define FOURCC_INSH mmioFOURCC('i','n','s','h')
+#define FOURCC_LRGN mmioFOURCC('l','r','g','n')
+#define FOURCC_RGN mmioFOURCC('r','g','n',' ')
+#define FOURCC_RGNH mmioFOURCC('r','g','n','h')
+#define FOURCC_LART mmioFOURCC('l','a','r','t')
+#define FOURCC_ART1 mmioFOURCC('a','r','t','1')
+#define FOURCC_WLNK mmioFOURCC('w','l','n','k')
+#define FOURCC_WSMP mmioFOURCC('w','s','m','p')
+#define FOURCC_VERS mmioFOURCC('v','e','r','s')
+
+/*/////////////////////////////////////////////////////////////////////////
+// Articulation connection graph definitions
+/////////////////////////////////////////////////////////////////////////*/
+
+/* Generic Sources */
+#define CONN_SRC_NONE 0x0000
+#define CONN_SRC_LFO 0x0001
+#define CONN_SRC_KEYONVELOCITY 0x0002
+#define CONN_SRC_KEYNUMBER 0x0003
+#define CONN_SRC_EG1 0x0004
+#define CONN_SRC_EG2 0x0005
+#define CONN_SRC_PITCHWHEEL 0x0006
+
+/* Midi Controllers 0-127 */
+#define CONN_SRC_CC1 0x0081
+#define CONN_SRC_CC7 0x0087
+#define CONN_SRC_CC10 0x008a
+#define CONN_SRC_CC11 0x008b
+
+/* Generic Destinations */
+#define CONN_DST_NONE 0x0000
+#define CONN_DST_ATTENUATION 0x0001
+#define CONN_DST_PITCH 0x0003
+#define CONN_DST_PAN 0x0004
+
+/* LFO Destinations */
+#define CONN_DST_LFO_FREQUENCY 0x0104
+#define CONN_DST_LFO_STARTDELAY 0x0105
+
+/* EG1 Destinations */
+#define CONN_DST_EG1_ATTACKTIME 0x0206
+#define CONN_DST_EG1_DECAYTIME 0x0207
+#define CONN_DST_EG1_RELEASETIME 0x0209
+#define CONN_DST_EG1_SUSTAINLEVEL 0x020a
+
+/* EG2 Destinations */
+#define CONN_DST_EG2_ATTACKTIME 0x030a
+#define CONN_DST_EG2_DECAYTIME 0x030b
+#define CONN_DST_EG2_RELEASETIME 0x030d
+#define CONN_DST_EG2_SUSTAINLEVEL 0x030e
+
+#define CONN_TRN_NONE 0x0000
+#define CONN_TRN_CONCAVE 0x0001
+
+typedef struct _DLSID {
+ ULONG ulData1;
+ USHORT usData2;
+ USHORT usData3;
+ BYTE abData4[8];
+} DLSID, FAR *LPDLSID;
+
+typedef struct _DLSVERSION {
+ DWORD dwVersionMS;
+ DWORD dwVersionLS;
+}DLSVERSION, FAR *LPDLSVERSION;
+
+
+typedef struct _CONNECTION {
+ USHORT usSource;
+ USHORT usControl;
+ USHORT usDestination;
+ USHORT usTransform;
+ LONG lScale;
+ }CONNECTION, FAR *LPCONNECTION;
+
+
+/* Level 1 Articulation Data */
+
+typedef struct _CONNECTIONLIST {
+ ULONG cbSize; /* size of the connection list structure */
+ ULONG cConnections; /* count of connections in the list */
+ } CONNECTIONLIST, FAR *LPCONNECTIONLIST;
+
+
+
+/*/////////////////////////////////////////////////////////////////////////
+// Generic type defines for regions and instruments
+/////////////////////////////////////////////////////////////////////////*/
+
+typedef struct _RGNRANGE {
+ USHORT usLow;
+ USHORT usHigh;
+}RGNRANGE, FAR * LPRGNRANGE;
+
+#define F_INSTRUMENT_DRUMS 0x80000000
+
+typedef struct _MIDILOCALE {
+ ULONG ulBank;
+ ULONG ulInstrument;
+}MIDILOCALE, FAR *LPMIDILOCALE;
+
+/*/////////////////////////////////////////////////////////////////////////
+// Header structures found in an DLS file for collection, instruments, and
+// regions.
+/////////////////////////////////////////////////////////////////////////*/
+
+#define F_RGN_OPTION_SELFNONEXCLUSIVE 0x0001
+
+typedef struct _RGNHEADER {
+ RGNRANGE RangeKey; /* Key range */
+ RGNRANGE RangeVelocity; /* Velocity Range */
+ USHORT fusOptions; /* Synthesis options for this range */
+ USHORT usKeyGroup; /* Key grouping for non simultaneous play */
+ /* 0 = no group, 1 up is group */
+ /* for Level 1 only groups 1-15 are allowed */
+}RGNHEADER, FAR *LPRGNHEADER;
+
+typedef struct _INSTHEADER {
+ ULONG cRegions; /* Count of regions in this instrument */
+ MIDILOCALE Locale; /* Intended MIDI locale of this instrument */
+}INSTHEADER, FAR *LPINSTHEADER;
+
+typedef struct _DLSHEADER {
+ ULONG cInstruments; /* Count of instruments in the collection */
+}DLSHEADER, FAR *LPDLSHEADER;
+
+/*////////////////////////////////////////////////////////////////////////////
+// definitions for the Wave link structure
+////////////////////////////////////////////////////////////////////////////*/
+
+/* **** For level 1 only WAVELINK_CHANNEL_MONO is valid **** */
+/* ulChannel allows for up to 32 channels of audio with each bit position */
+/* specifiying a channel of playback */
+
+#define WAVELINK_CHANNEL_LEFT 0x0001l
+#define WAVELINK_CHANNEL_RIGHT 0x0002l
+
+#define F_WAVELINK_PHASE_MASTER 0x0001
+
+typedef struct _WAVELINK { /* any paths or links are stored right after struct */
+ USHORT fusOptions; /* options flags for this wave */
+ USHORT usPhaseGroup; /* Phase grouping for locking channels */
+ ULONG ulChannel; /* channel placement */
+ ULONG ulTableIndex; /* index into the wave pool table, 0 based */
+}WAVELINK, FAR *LPWAVELINK;
+
+#define POOL_CUE_NULL 0xffffffffl
+
+typedef struct _POOLCUE {
+ ULONG ulOffset; /* Offset to the entry in the list */
+}POOLCUE, FAR *LPPOOLCUE;
+
+typedef struct _POOLTABLE {
+ ULONG cbSize; /* size of the pool table structure */
+ ULONG cCues; /* count of cues in the list */
+ } POOLTABLE, FAR *LPPOOLTABLE;
+
+/*////////////////////////////////////////////////////////////////////////////
+// Structures for the "wsmp" chunk
+////////////////////////////////////////////////////////////////////////////*/
+
+#define F_WSMP_NO_TRUNCATION 0x0001l
+#define F_WSMP_NO_COMPRESSION 0x0002l
+
+
+typedef struct _rwsmp {
+ ULONG cbSize;
+ USHORT usUnityNote; /* MIDI Unity Playback Note */
+ SHORT sFineTune; /* Fine Tune in log tuning */
+ LONG lAttenuation; /* Overall Attenuation to be applied to data */
+ ULONG fulOptions; /* Flag options */
+ ULONG cSampleLoops; /* Count of Sample loops, 0 loops is one shot */
+ } WSMPL, FAR *LPWSMPL;
+
+
+/* This loop type is a normal forward playing loop which is continually */
+/* played until the envelope reaches an off threshold in the release */
+/* portion of the volume envelope */
+
+#define WLOOP_TYPE_FORWARD 0
+
+typedef struct _rloop {
+ ULONG cbSize;
+ ULONG ulType; /* Loop Type */
+ ULONG ulStart; /* Start of loop in samples */
+ ULONG ulLength; /* Length of loop in samples */
+} WLOOP, FAR *LPWLOOP;
+
+#endif /*_INC_DLS1 */
+
diff --git a/plugins/!NotAdopted/sndVol/dls2.h b/plugins/!NotAdopted/sndVol/dls2.h
new file mode 100644
index 0000000000..b372f35033
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dls2.h
@@ -0,0 +1,130 @@
+/*
+
+ dls2.h
+
+ Description:
+
+ Interface defines and structures for the DLS2 extensions of DLS.
+
+
+ Written by Microsoft 1998. Released for public use.
+
+*/
+
+#ifndef _INC_DLS2
+#define _INC_DLS2
+
+/*
+ FOURCC's used in the DLS2 file, in addition to DLS1 chunks
+*/
+
+#define FOURCC_RGN2 mmioFOURCC('r','g','n','2')
+#define FOURCC_LAR2 mmioFOURCC('l','a','r','2')
+#define FOURCC_ART2 mmioFOURCC('a','r','t','2')
+#define FOURCC_CDL mmioFOURCC('c','d','l',' ')
+#define FOURCC_DLID mmioFOURCC('d','l','i','d')
+
+/*
+ Articulation connection graph definitions. These are in addition to
+ the definitions in the DLS1 header.
+*/
+
+/* Generic Sources (in addition to DLS1 sources. */
+#define CONN_SRC_POLYPRESSURE 0x0007 /* Polyphonic Pressure */
+#define CONN_SRC_CHANNELPRESSURE 0x0008 /* Channel Pressure */
+#define CONN_SRC_VIBRATO 0x0009 /* Vibrato LFO */
+#define CONN_SRC_MONOPRESSURE 0x000a /* MIDI Mono pressure */
+
+
+/* Midi Controllers */
+#define CONN_SRC_CC91 0x00db /* Reverb Send */
+#define CONN_SRC_CC93 0x00dd /* Chorus Send */
+
+
+/* Generic Destinations */
+#define CONN_DST_GAIN 0x0001 /* Same as CONN_DST_ ATTENUATION, but more appropriate terminology. */
+#define CONN_DST_KEYNUMBER 0x0005 /* Key Number Generator */
+
+/* Audio Channel Output Destinations */
+#define CONN_DST_LEFT 0x0010 /* Left Channel Send */
+#define CONN_DST_RIGHT 0x0011 /* Right Channel Send */
+#define CONN_DST_CENTER 0x0012 /* Center Channel Send */
+#define CONN_DST_LEFTREAR 0x0013 /* Left Rear Channel Send */
+#define CONN_DST_RIGHTREAR 0x0014 /* Right Rear Channel Send */
+#define CONN_DST_LFE_CHANNEL 0x0015 /* LFE Channel Send */
+#define CONN_DST_CHORUS 0x0080 /* Chorus Send */
+#define CONN_DST_REVERB 0x0081 /* Reverb Send */
+
+/* Vibrato LFO Destinations */
+#define CONN_DST_VIB_FREQUENCY 0x0114 /* Vibrato Frequency */
+#define CONN_DST_VIB_STARTDELAY 0x0115 /* Vibrato Start Delay */
+
+/* EG1 Destinations */
+#define CONN_DST_EG1_DELAYTIME 0x020B /* EG1 Delay Time */
+#define CONN_DST_EG1_HOLDTIME 0x020C /* EG1 Hold Time */
+#define CONN_DST_EG1_SHUTDOWNTIME 0x020D /* EG1 Shutdown Time */
+
+
+/* EG2 Destinations */
+#define CONN_DST_EG2_DELAYTIME 0x030F /* EG2 Delay Time */
+#define CONN_DST_EG2_HOLDTIME 0x0310 /* EG2 Hold Time */
+
+
+/* Filter Destinations */
+#define CONN_DST_FILTER_CUTOFF 0x0500 /* Filter Cutoff Frequency */
+#define CONN_DST_FILTER_Q 0x0501 /* Filter Resonance */
+
+
+/* Transforms */
+#define CONN_TRN_CONVEX 0x0002 /* Convex Transform */
+#define CONN_TRN_SWITCH 0x0003 /* Switch Transform */
+
+
+/* Conditional chunk operators */
+ #define DLS_CDL_AND 0x0001 /* X = X & Y */
+ #define DLS_CDL_OR 0x0002 /* X = X | Y */
+ #define DLS_CDL_XOR 0x0003 /* X = X ^ Y */
+ #define DLS_CDL_ADD 0x0004 /* X = X + Y */
+ #define DLS_CDL_SUBTRACT 0x0005 /* X = X - Y */
+ #define DLS_CDL_MULTIPLY 0x0006 /* X = X * Y */
+ #define DLS_CDL_DIVIDE 0x0007 /* X = X / Y */
+ #define DLS_CDL_LOGICAL_AND 0x0008 /* X = X && Y */
+ #define DLS_CDL_LOGICAL_OR 0x0009 /* X = X || Y */
+ #define DLS_CDL_LT 0x000A /* X = (X < Y) */
+ #define DLS_CDL_LE 0x000B /* X = (X <= Y) */
+ #define DLS_CDL_GT 0x000C /* X = (X > Y) */
+ #define DLS_CDL_GE 0x000D /* X = (X >= Y) */
+ #define DLS_CDL_EQ 0x000E /* X = (X == Y) */
+ #define DLS_CDL_NOT 0x000F /* X = !X */
+ #define DLS_CDL_CONST 0x0010 /* 32-bit constant */
+ #define DLS_CDL_QUERY 0x0011 /* 32-bit value returned from query */
+ #define DLS_CDL_QUERYSUPPORTED 0x0012 /* Test to see if query is supported by synth */
+
+/*
+ Loop and release
+*/
+
+#define WLOOP_TYPE_RELEASE 1
+
+/*
+ WaveLink chunk <wlnk-ck>
+*/
+
+#define F_WAVELINK_MULTICHANNEL 0x0002
+
+
+/*
+ DLSID queries for <cdl-ck>
+*/
+
+DEFINE_GUID(DLSID_GMInHardware, 0x178f2f24, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(DLSID_GSInHardware, 0x178f2f25, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(DLSID_XGInHardware, 0x178f2f26, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(DLSID_SupportsDLS1, 0x178f2f27, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(DLSID_SupportsDLS2, 0xf14599e5, 0x4689, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+DEFINE_GUID(DLSID_SampleMemorySize, 0x178f2f28, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(DLSID_ManufacturersID, 0xb03e1181, 0x8095, 0x11d2, 0xa1, 0xef, 0x0, 0x60, 0x8, 0x33, 0xdb, 0xd8);
+DEFINE_GUID(DLSID_ProductID, 0xb03e1182, 0x8095, 0x11d2, 0xa1, 0xef, 0x0, 0x60, 0x8, 0x33, 0xdb, 0xd8);
+DEFINE_GUID(DLSID_SamplePlaybackRate, 0x2a91f713, 0xa4bf, 0x11d2, 0xbb, 0xdf, 0x0, 0x60, 0x8, 0x33, 0xdb, 0xd8);
+
+#endif /* _INC_DLS2 */
diff --git a/plugins/!NotAdopted/sndVol/dmdls.h b/plugins/!NotAdopted/sndVol/dmdls.h
new file mode 100644
index 0000000000..8d0677842a
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dmdls.h
@@ -0,0 +1,199 @@
+/************************************************************************
+* *
+* dmdls.h -- DLS download definitions for DirectMusic API's *
+* *
+* Copyright (c) Microsoft Corporation. All rights reserved. *
+* *
+************************************************************************/
+
+#ifndef _DMDLS_
+#define _DMDLS_
+
+#include "dls1.h"
+
+typedef long PCENT; /* Pitch cents */
+typedef long GCENT; /* Gain cents */
+typedef long TCENT; /* Time cents */
+typedef long PERCENT; /* Per.. cent! */
+
+typedef LONGLONG REFERENCE_TIME;
+typedef REFERENCE_TIME *LPREFERENCE_TIME;
+
+#ifndef MAKE_FOURCC
+#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
+ ((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
+ ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))
+
+
+typedef DWORD FOURCC; /* a four character code */
+#endif
+
+typedef struct _DMUS_DOWNLOADINFO
+{
+ DWORD dwDLType; /* Instrument or Wave */
+ DWORD dwDLId; /* Unique identifier to tag this download. */
+ DWORD dwNumOffsetTableEntries; /* Number of index in the offset address table. */
+ DWORD cbSize; /* Total size of this memory chunk. */
+} DMUS_DOWNLOADINFO;
+
+#define DMUS_DOWNLOADINFO_INSTRUMENT 1
+#define DMUS_DOWNLOADINFO_WAVE 2
+#define DMUS_DOWNLOADINFO_INSTRUMENT2 3 /* New version for better DLS2 support. */
+
+/* Support for oneshot and streaming wave data
+ */
+#define DMUS_DOWNLOADINFO_WAVEARTICULATION 4 /* Wave articulation data */
+#define DMUS_DOWNLOADINFO_STREAMINGWAVE 5 /* One chunk of a streaming */
+#define DMUS_DOWNLOADINFO_ONESHOTWAVE 6
+
+#define DMUS_DEFAULT_SIZE_OFFSETTABLE 1
+
+/* Flags for DMUS_INSTRUMENT's ulFlags member */
+
+#define DMUS_INSTRUMENT_GM_INSTRUMENT (1 << 0)
+
+typedef struct _DMUS_OFFSETTABLE
+{
+ ULONG ulOffsetTable[DMUS_DEFAULT_SIZE_OFFSETTABLE];
+} DMUS_OFFSETTABLE;
+
+typedef struct _DMUS_INSTRUMENT
+{
+ ULONG ulPatch;
+ ULONG ulFirstRegionIdx;
+ ULONG ulGlobalArtIdx; /* If zero the instrument does not have an articulation */
+ ULONG ulFirstExtCkIdx; /* If zero no 3rd party entenstion chunks associated with the instrument */
+ ULONG ulCopyrightIdx; /* If zero no Copyright information associated with the instrument */
+ ULONG ulFlags;
+} DMUS_INSTRUMENT;
+
+typedef struct _DMUS_REGION
+{
+ RGNRANGE RangeKey;
+ RGNRANGE RangeVelocity;
+ USHORT fusOptions;
+ USHORT usKeyGroup;
+ ULONG ulRegionArtIdx; /* If zero the region does not have an articulation */
+ ULONG ulNextRegionIdx; /* If zero no more regions */
+ ULONG ulFirstExtCkIdx; /* If zero no 3rd party entenstion chunks associated with the region */
+ WAVELINK WaveLink;
+ WSMPL WSMP; /* If WSMP.cSampleLoops > 1 then a WLOOP is included */
+ WLOOP WLOOP[1];
+} DMUS_REGION;
+
+typedef struct _DMUS_LFOPARAMS
+{
+ PCENT pcFrequency;
+ TCENT tcDelay;
+ GCENT gcVolumeScale;
+ PCENT pcPitchScale;
+ GCENT gcMWToVolume;
+ PCENT pcMWToPitch;
+} DMUS_LFOPARAMS;
+
+typedef struct _DMUS_VEGPARAMS
+{
+ TCENT tcAttack;
+ TCENT tcDecay;
+ PERCENT ptSustain;
+ TCENT tcRelease;
+ TCENT tcVel2Attack;
+ TCENT tcKey2Decay;
+} DMUS_VEGPARAMS;
+
+typedef struct _DMUS_PEGPARAMS
+{
+ TCENT tcAttack;
+ TCENT tcDecay;
+ PERCENT ptSustain;
+ TCENT tcRelease;
+ TCENT tcVel2Attack;
+ TCENT tcKey2Decay;
+ PCENT pcRange;
+} DMUS_PEGPARAMS;
+
+typedef struct _DMUS_MSCPARAMS
+{
+ PERCENT ptDefaultPan;
+} DMUS_MSCPARAMS;
+
+typedef struct _DMUS_ARTICPARAMS
+{
+ DMUS_LFOPARAMS LFO;
+ DMUS_VEGPARAMS VolEG;
+ DMUS_PEGPARAMS PitchEG;
+ DMUS_MSCPARAMS Misc;
+} DMUS_ARTICPARAMS;
+
+typedef struct _DMUS_ARTICULATION /* Articulation chunk for DMUS_DOWNLOADINFO_INSTRUMENT format. */
+{
+ ULONG ulArt1Idx; /* DLS Level 1 articulation chunk */
+ ULONG ulFirstExtCkIdx; /* 3rd party extenstion chunks associated with the articulation */
+} DMUS_ARTICULATION;
+
+typedef struct _DMUS_ARTICULATION2 /* Articulation chunk for DMUS_DOWNLOADINFO_INSTRUMENT2 format. */
+{
+ ULONG ulArtIdx; /* DLS Level 1/2 articulation chunk */
+ ULONG ulFirstExtCkIdx; /* 3rd party extenstion chunks associated with the articulation */
+ ULONG ulNextArtIdx; /* Additional articulation chunks */
+} DMUS_ARTICULATION2;
+
+#define DMUS_MIN_DATA_SIZE 4
+/* The actual number is determined by cbSize of struct _DMUS_EXTENSIONCHUNK */
+
+typedef struct _DMUS_EXTENSIONCHUNK
+{
+ ULONG cbSize; /* Size of extension chunk */
+ ULONG ulNextExtCkIdx; /* If zero no more 3rd party entenstion chunks */
+ FOURCC ExtCkID;
+ BYTE byExtCk[DMUS_MIN_DATA_SIZE]; /* The actual number that follows is determined by cbSize */
+} DMUS_EXTENSIONCHUNK;
+
+/* The actual number is determined by cbSize of struct _DMUS_COPYRIGHT */
+
+typedef struct _DMUS_COPYRIGHT
+{
+ ULONG cbSize; /* Size of copyright information */
+ BYTE byCopyright[DMUS_MIN_DATA_SIZE]; /* The actual number that follows is determined by cbSize */
+} DMUS_COPYRIGHT;
+
+typedef struct _DMUS_WAVEDATA
+{
+ ULONG cbSize;
+ BYTE byData[DMUS_MIN_DATA_SIZE];
+} DMUS_WAVEDATA;
+
+typedef struct _DMUS_WAVE
+{
+ ULONG ulFirstExtCkIdx; /* If zero no 3rd party entenstion chunks associated with the wave */
+ ULONG ulCopyrightIdx; /* If zero no Copyright information associated with the wave */
+ ULONG ulWaveDataIdx; /* Location of actual wave data. */
+ WAVEFORMATEX WaveformatEx;
+} DMUS_WAVE;
+
+typedef struct _DMUS_NOTERANGE *LPDMUS_NOTERANGE;
+typedef struct _DMUS_NOTERANGE
+{
+ DWORD dwLowNote; /* Sets the low note for the range of MIDI note events to which the instrument responds.*/
+ DWORD dwHighNote; /* Sets the high note for the range of MIDI note events to which the instrument responds.*/
+} DMUS_NOTERANGE;
+
+typedef struct _DMUS_WAVEARTDL
+{
+ ULONG ulDownloadIdIdx; /* Download ID's of each buffer */
+ ULONG ulBus; /* Playback bus */
+ ULONG ulBuffers; /* Buffers */
+ ULONG ulMasterDLId; /* Download ID of master voice of slave group */
+ USHORT usOptions; /* Same as DLS2 region options */
+} DMUS_WAVEARTDL,
+ *LPDMUS_WAVEARTDL;
+
+typedef struct _DMUS_WAVEDL
+{
+ ULONG cbWaveData; /* Bytes of wave data */
+} DMUS_WAVEDL,
+ *LPDMUS_WAVEDL;
+
+#endif
+
+
diff --git a/plugins/!NotAdopted/sndVol/dmerror.h b/plugins/!NotAdopted/sndVol/dmerror.h
new file mode 100644
index 0000000000..9279f735b9
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dmerror.h
@@ -0,0 +1,843 @@
+/************************************************************************
+* *
+* dmerror.h -- Error codes returned by DirectMusic API's *
+* *
+* Copyright (c) Microsoft Corporation. All rights reserved. *
+* *
+************************************************************************/
+
+#ifndef _DMERROR_
+#define _DMERROR_
+
+#define FACILITY_DIRECTMUSIC 0x878 /* Shared with DirectSound */
+#define DMUS_ERRBASE 0x1000 /* Make error codes human readable in hex */
+
+#ifndef MAKE_HRESULT
+#define MAKE_HRESULT(sev,fac,code) \
+ ((HRESULT) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
+#endif
+
+#define MAKE_DMHRESULTSUCCESS(code) MAKE_HRESULT(0, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))
+#define MAKE_DMHRESULTERROR(code) MAKE_HRESULT(1, FACILITY_DIRECTMUSIC, (DMUS_ERRBASE + (code)))
+
+/* DMUS_S_PARTIALLOAD
+ *
+ * The object could only load partially. This can happen if some components are
+ * not registered properly, such as embedded tracks and tools. This can also happen
+ * if some content is missing. For example, if a segment uses a DLS collection that
+ * is not in the loader's current search directory.
+ */
+#define DMUS_S_PARTIALLOAD MAKE_DMHRESULTSUCCESS(0x091)
+
+/* DMUS_S_PARTIALDOWNLOAD
+ *
+ * Return value from IDirectMusicBand::Download() which indicates that
+ * some of the instruments safely downloaded, but others failed. This usually
+ * occurs when some instruments are on PChannels not supported by the performance
+ * or port.
+ */
+#define DMUS_S_PARTIALDOWNLOAD MAKE_DMHRESULTSUCCESS(0x092)
+
+/* DMUS_S_REQUEUE
+ *
+ * Return value from IDirectMusicTool::ProcessPMsg() which indicates to the
+ * performance that it should cue the PMsg again automatically.
+ */
+#define DMUS_S_REQUEUE MAKE_DMHRESULTSUCCESS(0x200)
+
+/* DMUS_S_FREE
+ *
+ * Return value from IDirectMusicTool::ProcessPMsg() which indicates to the
+ * performance that it should free the PMsg automatically.
+ */
+#define DMUS_S_FREE MAKE_DMHRESULTSUCCESS(0x201)
+
+/* DMUS_S_END
+ *
+ * Return value from IDirectMusicTrack::Play() which indicates to the
+ * segment that the track has no more data after mtEnd.
+ */
+#define DMUS_S_END MAKE_DMHRESULTSUCCESS(0x202)
+
+/* DMUS_S_STRING_TRUNCATED
+ *
+ * Returned string has been truncated to fit the buffer size.
+ */
+#define DMUS_S_STRING_TRUNCATED MAKE_DMHRESULTSUCCESS(0x210)
+
+/* DMUS_S_LAST_TOOL
+ *
+ * Returned from IDirectMusicGraph::StampPMsg(), this indicates that the PMsg
+ * is already stamped with the last tool in the graph. The returned PMsg's
+ * tool pointer is now NULL.
+ */
+#define DMUS_S_LAST_TOOL MAKE_DMHRESULTSUCCESS(0x211)
+
+/* DMUS_S_OVER_CHORD
+ *
+ * Returned from IDirectMusicPerformance::MusicToMIDI(), this indicates
+ * that no note has been calculated because the music value has the note
+ * at a position higher than the top note of the chord. This applies only
+ * to DMUS_PLAYMODE_NORMALCHORD play mode. This success code indicates
+ * that the caller should not do anything with the note. It is not meant
+ * to be played against this chord.
+ */
+#define DMUS_S_OVER_CHORD MAKE_DMHRESULTSUCCESS(0x212)
+
+/* DMUS_S_UP_OCTAVE
+ *
+ * Returned from IDirectMusicPerformance::MIDIToMusic(), and
+ * IDirectMusicPerformance::MusicToMIDI(), this indicates
+ * that the note conversion generated a note value that is below 0,
+ * so it has been bumped up one or more octaves to be in the proper
+ * MIDI range of 0 through 127.
+ * Note that this is valid for MIDIToMusic() when using play modes
+ * DMUS_PLAYMODE_FIXEDTOCHORD and DMUS_PLAYMODE_FIXEDTOKEY, both of
+ * which store MIDI values in wMusicValue. With MusicToMIDI(), it is
+ * valid for all play modes.
+ * Ofcourse, DMUS_PLAYMODE_FIXED will never return this success code.
+ */
+#define DMUS_S_UP_OCTAVE MAKE_DMHRESULTSUCCESS(0x213)
+
+/* DMUS_S_DOWN_OCTAVE
+ *
+ * Returned from IDirectMusicPerformance::MIDIToMusic(), and
+ * IDirectMusicPerformance::MusicToMIDI(), this indicates
+ * that the note conversion generated a note value that is above 127,
+ * so it has been bumped down one or more octaves to be in the proper
+ * MIDI range of 0 through 127.
+ * Note that this is valid for MIDIToMusic() when using play modes
+ * DMUS_PLAYMODE_FIXEDTOCHORD and DMUS_PLAYMODE_FIXEDTOKEY, both of
+ * which store MIDI values in wMusicValue. With MusicToMIDI(), it is
+ * valid for all play modes.
+ * Ofcourse, DMUS_PLAYMODE_FIXED will never return this success code.
+ */
+#define DMUS_S_DOWN_OCTAVE MAKE_DMHRESULTSUCCESS(0x214)
+
+/* DMUS_S_NOBUFFERCONTROL
+ *
+ * Although the audio output from the port will be routed to the
+ * same device as the given DirectSound buffer, buffer controls
+ * such as pan and volume will not affect the output.
+ *
+ */
+#define DMUS_S_NOBUFFERCONTROL MAKE_DMHRESULTSUCCESS(0x215)
+
+/* DMUS_S_GARBAGE_COLLECTED
+ *
+ * The requested operation was not performed because during CollectGarbage
+ * the loader determined that the object had been released.
+ */
+#define DMUS_S_GARBAGE_COLLECTED MAKE_DMHRESULTSUCCESS(0x216)
+
+/* DMUS_E_DRIVER_FAILED
+ *
+ * An unexpected error was returned from a device driver, indicating
+ * possible failure of the driver or hardware.
+ */
+#define DMUS_E_DRIVER_FAILED MAKE_DMHRESULTERROR(0x0101)
+
+/* DMUS_E_PORTS_OPEN
+ *
+ * The requested operation cannot be performed while there are
+ * instantiated ports in any process in the system.
+ */
+#define DMUS_E_PORTS_OPEN MAKE_DMHRESULTERROR(0x0102)
+
+/* DMUS_E_DEVICE_IN_USE
+ *
+ * The requested device is already in use (possibly by a non-DirectMusic
+ * client) and cannot be opened again.
+ */
+#define DMUS_E_DEVICE_IN_USE MAKE_DMHRESULTERROR(0x0103)
+
+/* DMUS_E_INSUFFICIENTBUFFER
+ *
+ * Buffer is not large enough for requested operation.
+ */
+#define DMUS_E_INSUFFICIENTBUFFER MAKE_DMHRESULTERROR(0x0104)
+
+/* DMUS_E_BUFFERNOTSET
+ *
+ * No buffer was prepared for the download data.
+ */
+#define DMUS_E_BUFFERNOTSET MAKE_DMHRESULTERROR(0x0105)
+
+/* DMUS_E_BUFFERNOTAVAILABLE
+ *
+ * Download failed due to inability to access or create download buffer.
+ */
+#define DMUS_E_BUFFERNOTAVAILABLE MAKE_DMHRESULTERROR(0x0106)
+
+/* DMUS_E_NOTADLSCOL
+ *
+ * Error parsing DLS collection. File is corrupt.
+ */
+#define DMUS_E_NOTADLSCOL MAKE_DMHRESULTERROR(0x0108)
+
+/* DMUS_E_INVALIDOFFSET
+ *
+ * Wave chunks in DLS collection file are at incorrect offsets.
+ */
+#define DMUS_E_INVALIDOFFSET MAKE_DMHRESULTERROR(0x0109)
+
+/* DMUS_E_ALREADY_LOADED
+ *
+ * Second attempt to load a DLS collection that is currently open.
+ */
+#define DMUS_E_ALREADY_LOADED MAKE_DMHRESULTERROR(0x0111)
+
+/* DMUS_E_INVALIDPOS
+ *
+ * Error reading wave data from DLS collection. Indicates bad file.
+ */
+#define DMUS_E_INVALIDPOS MAKE_DMHRESULTERROR(0x0113)
+
+/* DMUS_E_INVALIDPATCH
+ *
+ * There is no instrument in the collection that matches patch number.
+ */
+#define DMUS_E_INVALIDPATCH MAKE_DMHRESULTERROR(0x0114)
+
+/* DMUS_E_CANNOTSEEK
+ *
+ * The IStream* doesn't support Seek().
+ */
+#define DMUS_E_CANNOTSEEK MAKE_DMHRESULTERROR(0x0115)
+
+/* DMUS_E_CANNOTWRITE
+ *
+ * The IStream* doesn't support Write().
+ */
+#define DMUS_E_CANNOTWRITE MAKE_DMHRESULTERROR(0x0116)
+
+/* DMUS_E_CHUNKNOTFOUND
+ *
+ * The RIFF parser doesn't contain a required chunk while parsing file.
+ */
+#define DMUS_E_CHUNKNOTFOUND MAKE_DMHRESULTERROR(0x0117)
+
+/* DMUS_E_INVALID_DOWNLOADID
+ *
+ * Invalid download id was used in the process of creating a download buffer.
+ */
+#define DMUS_E_INVALID_DOWNLOADID MAKE_DMHRESULTERROR(0x0119)
+
+/* DMUS_E_NOT_DOWNLOADED_TO_PORT
+ *
+ * Tried to unload an object that was not downloaded or previously unloaded.
+ */
+#define DMUS_E_NOT_DOWNLOADED_TO_PORT MAKE_DMHRESULTERROR(0x0120)
+
+/* DMUS_E_ALREADY_DOWNLOADED
+ *
+ * Buffer was already downloaded to synth.
+ */
+#define DMUS_E_ALREADY_DOWNLOADED MAKE_DMHRESULTERROR(0x0121)
+
+/* DMUS_E_UNKNOWN_PROPERTY
+ *
+ * The specified property item was not recognized by the target object.
+ */
+#define DMUS_E_UNKNOWN_PROPERTY MAKE_DMHRESULTERROR(0x0122)
+
+/* DMUS_E_SET_UNSUPPORTED
+ *
+ * The specified property item may not be set on the target object.
+ */
+#define DMUS_E_SET_UNSUPPORTED MAKE_DMHRESULTERROR(0x0123)
+
+/* DMUS_E_GET_UNSUPPORTED
+ *
+ * The specified property item may not be retrieved from the target object.
+ */
+#define DMUS_E_GET_UNSUPPORTED MAKE_DMHRESULTERROR(0x0124)
+
+/* DMUS_E_NOTMONO
+ *
+ * Wave chunk has more than one interleaved channel. DLS format requires MONO.
+ */
+#define DMUS_E_NOTMONO MAKE_DMHRESULTERROR(0x0125)
+
+/* DMUS_E_BADARTICULATION
+ *
+ * Invalid articulation chunk in DLS collection.
+ */
+#define DMUS_E_BADARTICULATION MAKE_DMHRESULTERROR(0x0126)
+
+/* DMUS_E_BADINSTRUMENT
+ *
+ * Invalid instrument chunk in DLS collection.
+ */
+#define DMUS_E_BADINSTRUMENT MAKE_DMHRESULTERROR(0x0127)
+
+/* DMUS_E_BADWAVELINK
+ *
+ * Wavelink chunk in DLS collection points to invalid wave.
+ */
+#define DMUS_E_BADWAVELINK MAKE_DMHRESULTERROR(0x0128)
+
+/* DMUS_E_NOARTICULATION
+ *
+ * Articulation missing from instrument in DLS collection.
+ */
+#define DMUS_E_NOARTICULATION MAKE_DMHRESULTERROR(0x0129)
+
+/* DMUS_E_NOTPCM
+ *
+ * Downoaded DLS wave is not in PCM format.
+*/
+#define DMUS_E_NOTPCM MAKE_DMHRESULTERROR(0x012A)
+
+/* DMUS_E_BADWAVE
+ *
+ * Bad wave chunk in DLS collection
+ */
+#define DMUS_E_BADWAVE MAKE_DMHRESULTERROR(0x012B)
+
+/* DMUS_E_BADOFFSETTABLE
+ *
+ * Offset Table for download buffer has errors.
+ */
+#define DMUS_E_BADOFFSETTABLE MAKE_DMHRESULTERROR(0x012C)
+
+/* DMUS_E_UNKNOWNDOWNLOAD
+ *
+ * Attempted to download unknown data type.
+ */
+#define DMUS_E_UNKNOWNDOWNLOAD MAKE_DMHRESULTERROR(0x012D)
+
+/* DMUS_E_NOSYNTHSINK
+ *
+ * The operation could not be completed because no sink was connected to
+ * the synthesizer.
+ */
+#define DMUS_E_NOSYNTHSINK MAKE_DMHRESULTERROR(0x012E)
+
+/* DMUS_E_ALREADYOPEN
+ *
+ * An attempt was made to open the software synthesizer while it was already
+ * open.
+ * ASSERT?
+ */
+#define DMUS_E_ALREADYOPEN MAKE_DMHRESULTERROR(0x012F)
+
+/* DMUS_E_ALREADYCLOSE
+ *
+ * An attempt was made to close the software synthesizer while it was already
+ * open.
+ * ASSERT?
+ */
+#define DMUS_E_ALREADYCLOSED MAKE_DMHRESULTERROR(0x0130)
+
+/* DMUS_E_SYNTHNOTCONFIGURED
+ *
+ * The operation could not be completed because the software synth has not
+ * yet been fully configured.
+ * ASSERT?
+ */
+#define DMUS_E_SYNTHNOTCONFIGURED MAKE_DMHRESULTERROR(0x0131)
+
+/* DMUS_E_SYNTHACTIVE
+ *
+ * The operation cannot be carried out while the synthesizer is active.
+ */
+#define DMUS_E_SYNTHACTIVE MAKE_DMHRESULTERROR(0x0132)
+
+/* DMUS_E_CANNOTREAD
+ *
+ * An error occurred while attempting to read from the IStream* object.
+ */
+#define DMUS_E_CANNOTREAD MAKE_DMHRESULTERROR(0x0133)
+
+/* DMUS_E_DMUSIC_RELEASED
+ *
+ * The operation cannot be performed because the final instance of the
+ * DirectMusic object was released. Ports cannot be used after final
+ * release of the DirectMusic object.
+ */
+#define DMUS_E_DMUSIC_RELEASED MAKE_DMHRESULTERROR(0x0134)
+
+/* DMUS_E_BUFFER_EMPTY
+ *
+ * There was no data in the referenced buffer.
+ */
+#define DMUS_E_BUFFER_EMPTY MAKE_DMHRESULTERROR(0x0135)
+
+/* DMUS_E_BUFFER_FULL
+ *
+ * There is insufficient space to insert the given event into the buffer.
+ */
+#define DMUS_E_BUFFER_FULL MAKE_DMHRESULTERROR(0x0136)
+
+/* DMUS_E_PORT_NOT_CAPTURE
+ *
+ * The given operation could not be carried out because the port is a
+ * capture port.
+ */
+#define DMUS_E_PORT_NOT_CAPTURE MAKE_DMHRESULTERROR(0x0137)
+
+/* DMUS_E_PORT_NOT_RENDER
+ *
+ * The given operation could not be carried out because the port is a
+ * render port.
+ */
+#define DMUS_E_PORT_NOT_RENDER MAKE_DMHRESULTERROR(0x0138)
+
+/* DMUS_E_DSOUND_NOT_SET
+ *
+ * The port could not be created because no DirectSound has been specified.
+ * Specify a DirectSound interface via the IDirectMusic::SetDirectSound
+ * method; pass NULL to have DirectMusic manage usage of DirectSound.
+ */
+#define DMUS_E_DSOUND_NOT_SET MAKE_DMHRESULTERROR(0x0139)
+
+/* DMUS_E_ALREADY_ACTIVATED
+ *
+ * The operation cannot be carried out while the port is active.
+ */
+#define DMUS_E_ALREADY_ACTIVATED MAKE_DMHRESULTERROR(0x013A)
+
+/* DMUS_E_INVALIDBUFFER
+ *
+ * Invalid DirectSound buffer was handed to port.
+ */
+#define DMUS_E_INVALIDBUFFER MAKE_DMHRESULTERROR(0x013B)
+
+/* DMUS_E_WAVEFORMATNOTSUPPORTED
+ *
+ * Invalid buffer format was handed to the synth sink.
+ */
+#define DMUS_E_WAVEFORMATNOTSUPPORTED MAKE_DMHRESULTERROR(0x013C)
+
+/* DMUS_E_SYNTHINACTIVE
+ *
+ * The operation cannot be carried out while the synthesizer is inactive.
+ */
+#define DMUS_E_SYNTHINACTIVE MAKE_DMHRESULTERROR(0x013D)
+
+/* DMUS_E_DSOUND_ALREADY_SET
+ *
+ * IDirectMusic::SetDirectSound has already been called. It may not be
+ * changed while in use.
+ */
+#define DMUS_E_DSOUND_ALREADY_SET MAKE_DMHRESULTERROR(0x013E)
+
+/* DMUS_E_INVALID_EVENT
+ *
+ * The given event is invalid (either it is not a valid MIDI message
+ * or it makes use of running status). The event cannot be packed
+ * into the buffer.
+ */
+#define DMUS_E_INVALID_EVENT MAKE_DMHRESULTERROR(0x013F)
+
+/* DMUS_E_UNSUPPORTED_STREAM
+ *
+ * The IStream* object does not contain data supported by the loading object.
+ */
+#define DMUS_E_UNSUPPORTED_STREAM MAKE_DMHRESULTERROR(0x0150)
+
+/* DMUS_E_ALREADY_INITED
+ *
+ * The object has already been initialized.
+ */
+#define DMUS_E_ALREADY_INITED MAKE_DMHRESULTERROR(0x0151)
+
+/* DMUS_E_INVALID_BAND
+ *
+ * The file does not contain a valid band.
+ */
+#define DMUS_E_INVALID_BAND MAKE_DMHRESULTERROR(0x0152)
+
+/* DMUS_E_TRACK_HDR_NOT_FIRST_CK
+ *
+ * The IStream* object's data does not have a track header as the first chunk,
+ * and therefore can not be read by the segment object.
+ */
+#define DMUS_E_TRACK_HDR_NOT_FIRST_CK MAKE_DMHRESULTERROR(0x0155)
+
+/* DMUS_E_TOOL_HDR_NOT_FIRST_CK
+ *
+ * The IStream* object's data does not have a tool header as the first chunk,
+ * and therefore can not be read by the graph object.
+ */
+#define DMUS_E_TOOL_HDR_NOT_FIRST_CK MAKE_DMHRESULTERROR(0x0156)
+
+/* DMUS_E_INVALID_TRACK_HDR
+ *
+ * The IStream* object's data contains an invalid track header (ckid is 0 and
+ * fccType is NULL,) and therefore can not be read by the segment object.
+ */
+#define DMUS_E_INVALID_TRACK_HDR MAKE_DMHRESULTERROR(0x0157)
+
+/* DMUS_E_INVALID_TOOL_HDR
+ *
+ * The IStream* object's data contains an invalid tool header (ckid is 0 and
+ * fccType is NULL,) and therefore can not be read by the graph object.
+ */
+#define DMUS_E_INVALID_TOOL_HDR MAKE_DMHRESULTERROR(0x0158)
+
+/* DMUS_E_ALL_TOOLS_FAILED
+ *
+ * The graph object was unable to load all tools from the IStream* object data.
+ * This may be due to errors in the stream, or the tools being incorrectly
+ * registered on the client.
+ */
+#define DMUS_E_ALL_TOOLS_FAILED MAKE_DMHRESULTERROR(0x0159)
+
+/* DMUS_E_ALL_TRACKS_FAILED
+ *
+ * The segment object was unable to load all tracks from the IStream* object data.
+ * This may be due to errors in the stream, or the tracks being incorrectly
+ * registered on the client.
+ */
+#define DMUS_E_ALL_TRACKS_FAILED MAKE_DMHRESULTERROR(0x0160)
+
+/* DMUS_E_NOT_FOUND
+ *
+ * The requested item was not contained by the object.
+ */
+#define DMUS_E_NOT_FOUND MAKE_DMHRESULTERROR(0x0161)
+
+/* DMUS_E_NOT_INIT
+ *
+ * A required object is not initialized or failed to initialize.
+ */
+#define DMUS_E_NOT_INIT MAKE_DMHRESULTERROR(0x0162)
+
+/* DMUS_E_TYPE_DISABLED
+ *
+ * The requested parameter type is currently disabled. Parameter types may
+ * be enabled and disabled by certain calls to SetParam().
+ */
+#define DMUS_E_TYPE_DISABLED MAKE_DMHRESULTERROR(0x0163)
+
+/* DMUS_E_TYPE_UNSUPPORTED
+ *
+ * The requested parameter type is not supported on the object.
+ */
+#define DMUS_E_TYPE_UNSUPPORTED MAKE_DMHRESULTERROR(0x0164)
+
+/* DMUS_E_TIME_PAST
+ *
+ * The time is in the past, and the operation can not succeed.
+ */
+#define DMUS_E_TIME_PAST MAKE_DMHRESULTERROR(0x0165)
+
+/* DMUS_E_TRACK_NOT_FOUND
+ *
+ * The requested track is not contained by the segment.
+ */
+#define DMUS_E_TRACK_NOT_FOUND MAKE_DMHRESULTERROR(0x0166)
+
+/* DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT
+ *
+ * The track does not support clock time playback or getparam.
+ */
+#define DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT MAKE_DMHRESULTERROR(0x0167)
+
+/* DMUS_E_NO_MASTER_CLOCK
+ *
+ * There is no master clock in the performance. Be sure to call
+ * IDirectMusicPerformance::Init().
+ */
+#define DMUS_E_NO_MASTER_CLOCK MAKE_DMHRESULTERROR(0x0170)
+
+/* DMUS_E_LOADER_NOCLASSID
+ *
+ * The class id field is required and missing in the DMUS_OBJECTDESC.
+ */
+#define DMUS_E_LOADER_NOCLASSID MAKE_DMHRESULTERROR(0x0180)
+
+/* DMUS_E_LOADER_BADPATH
+ *
+ * The requested file path is invalid.
+ */
+#define DMUS_E_LOADER_BADPATH MAKE_DMHRESULTERROR(0x0181)
+
+/* DMUS_E_LOADER_FAILEDOPEN
+ *
+ * File open failed - either file doesn't exist or is locked.
+ */
+#define DMUS_E_LOADER_FAILEDOPEN MAKE_DMHRESULTERROR(0x0182)
+
+/* DMUS_E_LOADER_FORMATNOTSUPPORTED
+ *
+ * Search data type is not supported.
+ */
+#define DMUS_E_LOADER_FORMATNOTSUPPORTED MAKE_DMHRESULTERROR(0x0183)
+
+/* DMUS_E_LOADER_FAILEDCREATE
+ *
+ * Unable to find or create object.
+ */
+#define DMUS_E_LOADER_FAILEDCREATE MAKE_DMHRESULTERROR(0x0184)
+
+/* DMUS_E_LOADER_OBJECTNOTFOUND
+ *
+ * Object was not found.
+ */
+#define DMUS_E_LOADER_OBJECTNOTFOUND MAKE_DMHRESULTERROR(0x0185)
+
+/* DMUS_E_LOADER_NOFILENAME
+ *
+ * The file name is missing from the DMUS_OBJECTDESC.
+ */
+#define DMUS_E_LOADER_NOFILENAME MAKE_DMHRESULTERROR(0x0186)
+
+/* DMUS_E_INVALIDFILE
+ *
+ * The file requested is not a valid file.
+ */
+#define DMUS_E_INVALIDFILE MAKE_DMHRESULTERROR(0x0200)
+
+/* DMUS_E_ALREADY_EXISTS
+ *
+ * The tool is already contained in the graph. Create a new instance.
+ */
+#define DMUS_E_ALREADY_EXISTS MAKE_DMHRESULTERROR(0x0201)
+
+/* DMUS_E_OUT_OF_RANGE
+ *
+ * Value is out of range, for instance the requested length is longer than
+ * the segment.
+ */
+#define DMUS_E_OUT_OF_RANGE MAKE_DMHRESULTERROR(0x0202)
+
+/* DMUS_E_SEGMENT_INIT_FAILED
+ *
+ * Segment initialization failed, most likely due to a critical memory situation.
+ */
+#define DMUS_E_SEGMENT_INIT_FAILED MAKE_DMHRESULTERROR(0x0203)
+
+/* DMUS_E_ALREADY_SENT
+ *
+ * The DMUS_PMSG has already been sent to the performance object via
+ * IDirectMusicPerformance::SendPMsg().
+ */
+#define DMUS_E_ALREADY_SENT MAKE_DMHRESULTERROR(0x0204)
+
+/* DMUS_E_CANNOT_FREE
+ *
+ * The DMUS_PMSG was either not allocated by the performance via
+ * IDirectMusicPerformance::AllocPMsg(), or it was already freed via
+ * IDirectMusicPerformance::FreePMsg().
+ */
+#define DMUS_E_CANNOT_FREE MAKE_DMHRESULTERROR(0x0205)
+
+/* DMUS_E_CANNOT_OPEN_PORT
+ *
+ * The default system port could not be opened.
+ */
+#define DMUS_E_CANNOT_OPEN_PORT MAKE_DMHRESULTERROR(0x0206)
+
+/* DMUS_E_CANNOT_CONVERT
+ *
+ * A call to MIDIToMusic() or MusicToMIDI() resulted in an error because
+ * the requested conversion could not happen. This usually occurs when the
+ * provided DMUS_CHORD_KEY structure has an invalid chord or scale pattern.
+ */
+#define DMUS_E_CANNOT_CONVERT MAKE_DMHRESULTERROR(0x0207)
+/* misspelling in previous versions of DirectX preserved for backward compatibility */
+#define DMUS_E_CONNOT_CONVERT DMUS_E_CANNOT_CONVERT
+
+/* DMUS_E_DESCEND_CHUNK_FAIL
+ *
+ * DMUS_E_DESCEND_CHUNK_FAIL is returned when the end of the file
+ * was reached before the desired chunk was found.
+ */
+#define DMUS_E_DESCEND_CHUNK_FAIL MAKE_DMHRESULTERROR(0x0210)
+
+/* DMUS_E_NOT_LOADED
+ *
+ * An attempt to use this object failed because it first needs to
+ * be loaded.
+ */
+#define DMUS_E_NOT_LOADED MAKE_DMHRESULTERROR(0x0211)
+
+/* DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE
+ *
+ * The activeX scripting engine for the script's language is not compatible with
+ * DirectMusic.
+ *
+ */
+#define DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE MAKE_DMHRESULTERROR(0x0213)
+
+/* DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE
+ *
+ * A varient was used that had a type that is not supported by DirectMusic.
+ *
+ */
+#define DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE MAKE_DMHRESULTERROR(0x0214)
+
+/* DMUS_E_SCRIPT_ERROR_IN_SCRIPT
+ *
+ * An error was encountered while parsing or executing the script.
+ * The pErrorInfo parameter (if supplied) was filled with information about the error.
+ */
+#define DMUS_E_SCRIPT_ERROR_IN_SCRIPT MAKE_DMHRESULTERROR(0x0215)
+
+/* DMUS_E_SCRIPT_CANTLOAD_OLEAUT32
+ *
+ * Loading of oleaut32.dll failed. VBScript and other activeX scripting languages
+ * require use of oleaut32.dll. On platforms where oleaut32.dll is not present, only
+ * the DirectMusicScript language, which doesn't require oleaut32.dll can be used.
+ */
+#define DMUS_E_SCRIPT_CANTLOAD_OLEAUT32 MAKE_DMHRESULTERROR(0x0216)
+
+/* DMUS_E_SCRIPT_LOADSCRIPT_ERROR
+ *
+ * An error occured while parsing a script loaded using LoadScript. The script that
+ * was loaded contains an error.
+ */
+#define DMUS_E_SCRIPT_LOADSCRIPT_ERROR MAKE_DMHRESULTERROR(0x0217)
+
+/* DMUS_E_SCRIPT_INVALID_FILE
+ *
+ * The script file is invalid.
+ */
+#define DMUS_E_SCRIPT_INVALID_FILE MAKE_DMHRESULTERROR(0x0218)
+
+/* DMUS_E_INVALID_SCRIPTTRACK
+ *
+ * The file contains an invalid script track.
+ */
+#define DMUS_E_INVALID_SCRIPTTRACK MAKE_DMHRESULTERROR(0x0219)
+
+/* DMUS_E_SCRIPT_VARIABLE_NOT_FOUND
+ *
+ * The script does not contain a variable with the specified name.
+ */
+#define DMUS_E_SCRIPT_VARIABLE_NOT_FOUND MAKE_DMHRESULTERROR(0x021A)
+
+/* DMUS_E_SCRIPT_ROUTINE_NOT_FOUND
+ *
+ * The script does not contain a routine with the specified name.
+ */
+#define DMUS_E_SCRIPT_ROUTINE_NOT_FOUND MAKE_DMHRESULTERROR(0x021B)
+
+/* DMUS_E_SCRIPT_CONTENT_READONLY
+ *
+ * Scripts variables for content referenced or embedded in a script cannot be set.
+ */
+#define DMUS_E_SCRIPT_CONTENT_READONLY MAKE_DMHRESULTERROR(0x021C)
+
+/* DMUS_E_SCRIPT_NOT_A_REFERENCE
+ *
+ * Attempt was made to set a script's variable by reference to a value that was
+ * not an object type.
+ */
+#define DMUS_E_SCRIPT_NOT_A_REFERENCE MAKE_DMHRESULTERROR(0x021D)
+
+/* DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED
+ *
+ * Attempt was made to set a script's variable by value to an object that does
+ * not support a default value property.
+ */
+#define DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED MAKE_DMHRESULTERROR(0x021E)
+
+/* DMUS_E_INVALID_SEGMENTTRIGGERTRACK
+ *
+ * The file contains an invalid segment trigger track.
+ */
+#define DMUS_E_INVALID_SEGMENTTRIGGERTRACK MAKE_DMHRESULTERROR(0x0220)
+
+/* DMUS_E_INVALID_LYRICSTRACK
+ *
+ * The file contains an invalid lyrics track.
+ */
+#define DMUS_E_INVALID_LYRICSTRACK MAKE_DMHRESULTERROR(0x0221)
+
+/* DMUS_E_INVALID_PARAMCONTROLTRACK
+ *
+ * The file contains an invalid parameter control track.
+ */
+#define DMUS_E_INVALID_PARAMCONTROLTRACK MAKE_DMHRESULTERROR(0x0222)
+
+/* DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR
+ *
+ * A script written in AudioVBScript could not be read because it contained a statement that
+ * is not allowed by the AudioVBScript language.
+ */
+#define DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR MAKE_DMHRESULTERROR(0x0223)
+
+/* DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR
+ *
+ * A script routine written in AudioVBScript failed because an invalid operation occurred. For example,
+ * adding the number 3 to a segment object would produce this error. So would attempting to call a routine
+ * that doesn't exist.
+ */
+#define DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR MAKE_DMHRESULTERROR(0x0224)
+
+/* DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE
+ *
+ * A script routine written in AudioVBScript failed because a function outside of a script failed to complete.
+ * For example, a call to PlaySegment that fails to play because of low memory would return this error.
+ */
+#define DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE MAKE_DMHRESULTERROR(0x0225)
+
+/* DMUS_E_AUDIOPATHS_NOT_VALID
+ *
+ * The Performance has set up some PChannels using the AssignPChannel command, which
+ * makes it not capable of supporting audio paths.
+ */
+#define DMUS_E_AUDIOPATHS_NOT_VALID MAKE_DMHRESULTERROR(0x0226)
+
+/* DMUS_E_AUDIOPATHS_IN_USE
+ *
+ * This is the inverse of the previous error.
+ * The Performance has set up some audio paths, which makes is incompatible
+ * with the calls to allocate pchannels, etc.
+ */
+#define DMUS_E_AUDIOPATHS_IN_USE MAKE_DMHRESULTERROR(0x0227)
+
+/* DMUS_E_NO_AUDIOPATH_CONFIG
+ *
+ * A segment was asked for its embedded audio path configuration,
+ * but there isn't any.
+ */
+#define DMUS_E_NO_AUDIOPATH_CONFIG MAKE_DMHRESULTERROR(0x0228)
+
+/* DMUS_E_AUDIOPATH_INACTIVE
+ *
+ * An audiopath is inactive, perhaps because closedown was called.
+ */
+#define DMUS_E_AUDIOPATH_INACTIVE MAKE_DMHRESULTERROR(0x0229)
+
+/* DMUS_E_AUDIOPATH_NOBUFFER
+ *
+ * An audiopath failed to create because a requested buffer could not be created.
+ */
+#define DMUS_E_AUDIOPATH_NOBUFFER MAKE_DMHRESULTERROR(0x022A)
+
+/* DMUS_E_AUDIOPATH_NOPORT
+ *
+ * An audiopath could not be used for playback because it lacked port assignments.
+ */
+#define DMUS_E_AUDIOPATH_NOPORT MAKE_DMHRESULTERROR(0x022B)
+
+/* DMUS_E_NO_AUDIOPATH
+ *
+ * Attempt was made to play segment in audiopath mode and there was no audiopath.
+ */
+#define DMUS_E_NO_AUDIOPATH MAKE_DMHRESULTERROR(0x022C)
+
+/* DMUS_E_INVALIDCHUNK
+ *
+ * Invalid data was found in a RIFF file chunk.
+ */
+#define DMUS_E_INVALIDCHUNK MAKE_DMHRESULTERROR(0x022D)
+
+/* DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER
+ *
+ * Attempt was made to create an audiopath that sends to a global effects buffer which did not exist.
+ */
+#define DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER MAKE_DMHRESULTERROR(0x022E)
+
+/* DMUS_E_INVALID_CONTAINER_OBJECT
+ *
+ * The file does not contain a valid container object.
+ */
+#define DMUS_E_INVALID_CONTAINER_OBJECT MAKE_DMHRESULTERROR(0x022F)
+
+#endif
diff --git a/plugins/!NotAdopted/sndVol/dmplugin.h b/plugins/!NotAdopted/sndVol/dmplugin.h
new file mode 100644
index 0000000000..7c7d311f92
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dmplugin.h
@@ -0,0 +1,280 @@
+/************************************************************************
+* *
+* dmplugin.h -- This module contains the API for plugins for the *
+* DirectMusic performance layer *
+* *
+* Copyright (c) Microsoft Corporation. All rights reserved. *
+* *
+************************************************************************/
+
+#ifndef _DMPLUGIN_
+#define _DMPLUGIN_
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#include <mmsystem.h>
+#include <dmusici.h>
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+interface IDirectMusicTrack;
+interface IDirectMusicTool;
+interface IDirectMusicTool8;
+interface IDirectMusicTrack8;
+interface IDirectMusicPerformance;
+interface IDirectMusicPerformance8;
+interface IDirectMusicSegment;
+interface IDirectMusicSegment8;
+interface IDirectMusicSegmentState;
+interface IDirectMusicSegmentState8;
+interface IDirectMusicGraph;
+#ifndef __cplusplus
+typedef interface IDirectMusicTrack IDirectMusicTrack;
+typedef interface IDirectMusicTool IDirectMusicTool;
+typedef interface IDirectMusicTool8 IDirectMusicTool8;
+typedef interface IDirectMusicTrack8 IDirectMusicTrack8;
+typedef interface IDirectMusicPerformance IDirectMusicPerformance;
+typedef interface IDirectMusicPerformance8 IDirectMusicPerformance8;
+typedef interface IDirectMusicSegment IDirectMusicSegment;
+typedef interface IDirectMusicSegment8 IDirectMusicSegment8;
+typedef interface IDirectMusicSegmentState IDirectMusicSegmentState;
+typedef interface IDirectMusicSegmentState8 IDirectMusicSegmentState8;
+typedef interface IDirectMusicGraph IDirectMusicGraph;
+#endif
+
+typedef struct _DMUS_PMSG DMUS_PMSG;
+typedef long MUSIC_TIME;
+
+/* Registry location for tools */
+#define DMUS_REGSTR_PATH_TOOLS "Software\\Microsoft\\DirectMusic\\Tools"
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicTool */
+#undef INTERFACE
+#define INTERFACE IDirectMusicTool
+DECLARE_INTERFACE_(IDirectMusicTool, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicTool */
+ STDMETHOD(Init) (THIS_ IDirectMusicGraph* pGraph) PURE;
+ STDMETHOD(GetMsgDeliveryType) (THIS_ DWORD* pdwDeliveryType ) PURE;
+ STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD* pdwNumElements ) PURE;
+ STDMETHOD(GetMediaTypes) (THIS_ DWORD** padwMediaTypes,
+ DWORD dwNumElements) PURE;
+ STDMETHOD(ProcessPMsg) (THIS_ IDirectMusicPerformance* pPerf,
+ DMUS_PMSG* pPMSG) PURE;
+ STDMETHOD(Flush) (THIS_ IDirectMusicPerformance* pPerf,
+ DMUS_PMSG* pPMSG,
+ REFERENCE_TIME rtTime) PURE;
+};
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicTool8 */
+#undef INTERFACE
+#define INTERFACE IDirectMusicTool8
+DECLARE_INTERFACE_(IDirectMusicTool8, IDirectMusicTool)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicTool */
+ STDMETHOD(Init) (THIS_ IDirectMusicGraph* pGraph) PURE;
+ STDMETHOD(GetMsgDeliveryType) (THIS_ DWORD* pdwDeliveryType ) PURE;
+ STDMETHOD(GetMediaTypeArraySize)(THIS_ DWORD* pdwNumElements ) PURE;
+ STDMETHOD(GetMediaTypes) (THIS_ DWORD** padwMediaTypes,
+ DWORD dwNumElements) PURE;
+ STDMETHOD(ProcessPMsg) (THIS_ IDirectMusicPerformance* pPerf,
+ DMUS_PMSG* pPMSG) PURE;
+ STDMETHOD(Flush) (THIS_ IDirectMusicPerformance* pPerf,
+ DMUS_PMSG* pPMSG,
+ REFERENCE_TIME rtTime) PURE;
+ /* IDirectMusicTool8 */
+ STDMETHOD(Clone) (THIS_ IDirectMusicTool ** ppTool) PURE;
+};
+
+
+/* The following flags are sent in the IDirectMusicTrack::Play() method */
+/* inside the dwFlags parameter */
+typedef enum enumDMUS_TRACKF_FLAGS
+{
+ DMUS_TRACKF_SEEK = 1, /* set on a seek */
+ DMUS_TRACKF_LOOP = 2, /* set on a loop (repeat) */
+ DMUS_TRACKF_START = 4, /* set on first call to Play */
+ DMUS_TRACKF_FLUSH = 8, /* set when this call is in response to a flush on the perfomance */
+ DMUS_TRACKF_DIRTY = 0x10, /* set when the track should consider any cached values from a previous call to GetParam to be invalidated */
+ /* The following flags are DX8 only. */
+ DMUS_TRACKF_NOTIFY_OFF = 0x20, /* tells track not to send notifications. */
+ DMUS_TRACKF_PLAY_OFF = 0x40, /* tells track not to play anything (but can still send notifications.) */
+ DMUS_TRACKF_LOOPEND = 0x80, /* set when the end of range is also a loop end. */
+ DMUS_TRACKF_STOP = 0x100, /* set when the end of range is also end of playing this segment. */
+ DMUS_TRACKF_RECOMPOSE = 0x200, /* set to indicate the track should compose. */
+ DMUS_TRACKF_CLOCK = 0x400, /* set when time parameters are in reference (clock) time. Only valid for PlayEx(). */
+} DMUS_TRACKF_FLAGS;
+
+/* The following flags are sent in the IDirectMusicTrack8::GetParamEx() and SetParamEx() methods */
+/* inside the dwFlags parameter */
+#define DMUS_TRACK_PARAMF_CLOCK 0x01 /* set when the time is measured is in reference (clock) time */
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicTrack */
+#undef INTERFACE
+#define INTERFACE IDirectMusicTrack
+DECLARE_INTERFACE_(IDirectMusicTrack, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicTrack */
+ STDMETHOD(Init) (THIS_ IDirectMusicSegment* pSegment) PURE;
+ STDMETHOD(InitPlay) (THIS_ IDirectMusicSegmentState* pSegmentState,
+ IDirectMusicPerformance* pPerformance,
+ void** ppStateData,
+ DWORD dwVirtualTrackID,
+ DWORD dwFlags) PURE;
+ STDMETHOD(EndPlay) (THIS_ void* pStateData) PURE;
+ STDMETHOD(Play) (THIS_ void* pStateData,
+ MUSIC_TIME mtStart,
+ MUSIC_TIME mtEnd,
+ MUSIC_TIME mtOffset,
+ DWORD dwFlags,
+ IDirectMusicPerformance* pPerf,
+ IDirectMusicSegmentState* pSegSt,
+ DWORD dwVirtualID) PURE;
+ STDMETHOD(GetParam) (THIS_ REFGUID rguidType,
+ MUSIC_TIME mtTime,
+ MUSIC_TIME* pmtNext,
+ void* pParam) PURE;
+ STDMETHOD(SetParam) (THIS_ REFGUID rguidType,
+ MUSIC_TIME mtTime,
+ void* pParam) PURE;
+ STDMETHOD(IsParamSupported) (THIS_ REFGUID rguidType) PURE;
+ STDMETHOD(AddNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(Clone) (THIS_ MUSIC_TIME mtStart,
+ MUSIC_TIME mtEnd,
+ IDirectMusicTrack** ppTrack) PURE;
+};
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicTrack8 */
+#undef INTERFACE
+#define INTERFACE IDirectMusicTrack8
+DECLARE_INTERFACE_(IDirectMusicTrack8, IDirectMusicTrack)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicTrack */
+ STDMETHOD(Init) (THIS_ IDirectMusicSegment* pSegment) PURE;
+ STDMETHOD(InitPlay) (THIS_ IDirectMusicSegmentState* pSegmentState,
+ IDirectMusicPerformance* pPerformance,
+ void** ppStateData,
+ DWORD dwVirtualTrackID,
+ DWORD dwFlags) PURE;
+ STDMETHOD(EndPlay) (THIS_ void* pStateData) PURE;
+ STDMETHOD(Play) (THIS_ void* pStateData,
+ MUSIC_TIME mtStart,
+ MUSIC_TIME mtEnd,
+ MUSIC_TIME mtOffset,
+ DWORD dwFlags,
+ IDirectMusicPerformance* pPerf,
+ IDirectMusicSegmentState* pSegSt,
+ DWORD dwVirtualID) PURE;
+ STDMETHOD(GetParam) (THIS_ REFGUID rguidType,
+ MUSIC_TIME mtTime,
+ MUSIC_TIME* pmtNext,
+ void* pParam) PURE;
+ STDMETHOD(SetParam) (THIS_ REFGUID rguidType,
+ MUSIC_TIME mtTime,
+ void* pParam) PURE;
+ STDMETHOD(IsParamSupported) (THIS_ REFGUID rguidType) PURE;
+ STDMETHOD(AddNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(Clone) (THIS_ MUSIC_TIME mtStart,
+ MUSIC_TIME mtEnd,
+ IDirectMusicTrack** ppTrack) PURE;
+ /* IDirectMusicTrack8 */
+ STDMETHOD(PlayEx) (THIS_ void* pStateData,
+ REFERENCE_TIME rtStart,
+ REFERENCE_TIME rtEnd,
+ REFERENCE_TIME rtOffset,
+ DWORD dwFlags,
+ IDirectMusicPerformance* pPerf,
+ IDirectMusicSegmentState* pSegSt,
+ DWORD dwVirtualID) PURE;
+ STDMETHOD(GetParamEx) (THIS_ REFGUID rguidType, /* Command type. */
+ REFERENCE_TIME rtTime, /* Time, in ref time if dwFlags == DMUS_TRACK_PARAMF_CLOCK. Otherwise, music time. */
+ REFERENCE_TIME* prtNext, /* Time of next parameter, relative to rtTime, in music or clock time units. */
+ void* pParam, /* Pointer to the parameter data. */
+ void * pStateData, /* State data for track instance. */
+ DWORD dwFlags) PURE; /* Control flags. */
+ STDMETHOD(SetParamEx) (THIS_ REFGUID rguidType,
+ REFERENCE_TIME rtTime,
+ void* pParam, /* Pointer to the parameter data. */
+ void * pStateData, /* State data for track instance. */
+ DWORD dwFlags) PURE; /* Control flags. */
+ STDMETHOD(Compose) (THIS_ IUnknown* pContext, /* Context for composition */
+ DWORD dwTrackGroup,
+ IDirectMusicTrack** ppResultTrack) PURE;
+ STDMETHOD(Join) (THIS_ IDirectMusicTrack* pNewTrack,
+ MUSIC_TIME mtJoin,
+ IUnknown* pContext, /* Context for joining */
+ DWORD dwTrackGroup,
+ IDirectMusicTrack** ppResultTrack) PURE;
+};
+
+/* CLSID's */
+DEFINE_GUID(CLSID_DirectMusicTempoTrack,0xd2ac2885, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicSeqTrack,0xd2ac2886, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicSysExTrack,0xd2ac2887, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicTimeSigTrack,0xd2ac2888, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicChordTrack,0xd2ac288b, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicCommandTrack,0xd2ac288c, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicStyleTrack,0xd2ac288d, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicMotifTrack,0xd2ac288e, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicSignPostTrack,0xf17e8672, 0xc3b4, 0x11d1, 0x87, 0xb, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicBandTrack,0xd2ac2894, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicChordMapTrack,0xd2ac2896, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicMuteTrack,0xd2ac2898, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* New CLSID's for DX8 */
+DEFINE_GUID(CLSID_DirectMusicScriptTrack,0x4108fa85, 0x3586, 0x11d3, 0x8b, 0xd7, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xb6); /* {4108FA85-3586-11d3-8BD7-00600893B1B6} */
+DEFINE_GUID(CLSID_DirectMusicMarkerTrack,0x55a8fd00, 0x4288, 0x11d3, 0x9b, 0xd1, 0x8a, 0xd, 0x61, 0xc8, 0x88, 0x35);
+DEFINE_GUID(CLSID_DirectMusicSegmentTriggerTrack, 0xbae4d665, 0x4ea1, 0x11d3, 0x8b, 0xda, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xb6); /* {BAE4D665-4EA1-11d3-8BDA-00600893B1B6} */
+DEFINE_GUID(CLSID_DirectMusicLyricsTrack, 0x995c1cf5, 0x54ff, 0x11d3, 0x8b, 0xda, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xb6); /* {995C1CF5-54FF-11d3-8BDA-00600893B1B6} */
+DEFINE_GUID(CLSID_DirectMusicParamControlTrack, 0x4be0537b, 0x5c19, 0x11d3, 0x8b, 0xdc, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xb6); /* {4BE0537B-5C19-11d3-8BDC-00600893B1B6} */
+DEFINE_GUID(CLSID_DirectMusicWaveTrack,0xeed36461, 0x9ea5, 0x11d3, 0x9b, 0xd1, 0x0, 0x80, 0xc7, 0x15, 0xa, 0x74);
+
+/* IID's */
+DEFINE_GUID(IID_IDirectMusicTrack, 0xf96029a1, 0x4282, 0x11d2, 0x87, 0x17, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicTool,0xd2ac28ba, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Interface IDs for DX8 */
+/* changed interfaces (GUID only) */
+DEFINE_GUID(IID_IDirectMusicTool8, 0xe674303, 0x3b05, 0x11d3, 0x9b, 0xd1, 0xf9, 0xe7, 0xf0, 0xa0, 0x15, 0x36);
+DEFINE_GUID(IID_IDirectMusicTrack8, 0xe674304, 0x3b05, 0x11d3, 0x9b, 0xd1, 0xf9, 0xe7, 0xf0, 0xa0, 0x15, 0x36);
+
+#ifdef __cplusplus
+}; /* extern "C" */
+#endif
+
+#include <poppack.h>
+
+#endif /* #ifndef _DMPLUGIN_ */
diff --git a/plugins/!NotAdopted/sndVol/dmusbuff.h b/plugins/!NotAdopted/sndVol/dmusbuff.h
new file mode 100644
index 0000000000..68414014b3
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dmusbuff.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+* *
+* DMusBuff.h -- This module defines the buffer format for DirectMusic *
+* Shared file between user mode and kernel mode components *
+* *
+* Copyright (c) 1998, Microsoft Corp. All rights reserved. *
+* *
+***************************************************************************/
+
+#ifndef _DMusBuff_
+#define _DMusBuff_
+
+/* Format of DirectMusic events in a buffer
+ *
+ * A buffer contains 1 or more events, each with the following header.
+ * Immediately following the header is the event data. The header+data
+ * size is rounded to the nearest quadword (8 bytes).
+ */
+
+#include <pshpack4.h> /* Do not pad at end - that's where the data is */
+typedef struct _DMUS_EVENTHEADER *LPDMUS_EVENTHEADER;
+typedef struct _DMUS_EVENTHEADER
+{
+ DWORD cbEvent; /* Unrounded bytes in event */
+ DWORD dwChannelGroup; /* Channel group of event */
+ REFERENCE_TIME rtDelta; /* Delta from start time of entire buffer */
+ DWORD dwFlags; /* Flags DMUS_EVENT_xxx */
+} DMUS_EVENTHEADER;
+#include <poppack.h>
+
+#define DMUS_EVENT_STRUCTURED 0x00000001 /* Unstructured data (SysEx, etc.) */
+
+/* The number of bytes to allocate for an event with 'cb' data bytes.
+ */
+#define QWORD_ALIGN(x) (((x) + 7) & ~7)
+#define DMUS_EVENT_SIZE(cb) QWORD_ALIGN(sizeof(DMUS_EVENTHEADER) + cb)
+
+
+#endif /* _DMusBuff_ */
+
+
diff --git a/plugins/!NotAdopted/sndVol/dmusicc.h b/plugins/!NotAdopted/sndVol/dmusicc.h
new file mode 100644
index 0000000000..74f18685e7
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dmusicc.h
@@ -0,0 +1,784 @@
+/************************************************************************
+* *
+* dmusicc.h -- This module defines the DirectMusic core API's *
+* *
+* Copyright (c) Microsoft Corporation. All rights reserved. *
+* *
+************************************************************************/
+
+#ifndef _DMUSICC_
+#define _DMUSICC_
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#include <mmsystem.h>
+
+#include "dls1.h"
+#include "dmerror.h"
+#include "dmdls.h"
+#include "dsound.h"
+#include "dmusbuff.h"
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef ULONGLONG SAMPLE_TIME;
+typedef ULONGLONG SAMPLE_POSITION;
+typedef SAMPLE_TIME *LPSAMPLE_TIME;
+
+#define DMUS_MAX_DESCRIPTION 128
+#define DMUS_MAX_DRIVER 128
+
+typedef struct _DMUS_BUFFERDESC *LPDMUS_BUFFERDESC;
+typedef struct _DMUS_BUFFERDESC
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidBufferFormat;
+ DWORD cbBuffer;
+} DMUS_BUFFERDESC;
+
+/* DMUS_EFFECT_ flags are used in the dwEffectFlags fields of both DMUS_PORTCAPS
+ * and DMUS_PORTPARAMS.
+ */
+#define DMUS_EFFECT_NONE 0x00000000
+#define DMUS_EFFECT_REVERB 0x00000001
+#define DMUS_EFFECT_CHORUS 0x00000002
+#define DMUS_EFFECT_DELAY 0x00000004
+
+/* For DMUS_PORTCAPS dwClass
+ */
+#define DMUS_PC_INPUTCLASS (0)
+#define DMUS_PC_OUTPUTCLASS (1)
+
+/* For DMUS_PORTCAPS dwFlags
+ */
+#define DMUS_PC_DLS (0x00000001) // Supports DLS downloading and DLS level 1.
+#define DMUS_PC_EXTERNAL (0x00000002) // External MIDI module.
+#define DMUS_PC_SOFTWARESYNTH (0x00000004) // Software synthesizer.
+#define DMUS_PC_MEMORYSIZEFIXED (0x00000008) // Memory size is fixed.
+#define DMUS_PC_GMINHARDWARE (0x00000010) // GM sound set is built in, no need to download.
+#define DMUS_PC_GSINHARDWARE (0x00000020) // GS sound set is built in.
+#define DMUS_PC_XGINHARDWARE (0x00000040) // XG sound set is built in.
+#define DMUS_PC_DIRECTSOUND (0x00000080) // Connects to DirectSound via a DirectSound buffer.
+#define DMUS_PC_SHAREABLE (0x00000100) // Synth can be actively shared by multiple apps at once.
+#define DMUS_PC_DLS2 (0x00000200) // Supports DLS2 instruments.
+#define DMUS_PC_AUDIOPATH (0x00000400) // Multiple outputs can be connected to DirectSound for audiopaths.
+#define DMUS_PC_WAVE (0x00000800) // Supports streaming and one shot waves.
+
+#define DMUS_PC_SYSTEMMEMORY (0x7FFFFFFF) // Sample memory is system memory.
+
+
+typedef struct _DMUS_PORTCAPS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidPort;
+ DWORD dwClass;
+ DWORD dwType;
+ DWORD dwMemorySize;
+ DWORD dwMaxChannelGroups;
+ DWORD dwMaxVoices;
+ DWORD dwMaxAudioChannels;
+ DWORD dwEffectFlags;
+ WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
+} DMUS_PORTCAPS;
+
+typedef DMUS_PORTCAPS *LPDMUS_PORTCAPS;
+
+/* Values for DMUS_PORTCAPS dwType. This field indicates the underlying
+ * driver type of the port.
+ */
+#define DMUS_PORT_WINMM_DRIVER (0)
+#define DMUS_PORT_USER_MODE_SYNTH (1)
+#define DMUS_PORT_KERNEL_MODE (2)
+
+/* These flags (set in dwValidParams) indicate which other members of the */
+/* DMUS_PORTPARAMS are valid. */
+/* */
+#define DMUS_PORTPARAMS_VOICES 0x00000001
+#define DMUS_PORTPARAMS_CHANNELGROUPS 0x00000002
+#define DMUS_PORTPARAMS_AUDIOCHANNELS 0x00000004
+#define DMUS_PORTPARAMS_SAMPLERATE 0x00000008
+#define DMUS_PORTPARAMS_EFFECTS 0x00000020
+#define DMUS_PORTPARAMS_SHARE 0x00000040
+#define DMUS_PORTPARAMS_FEATURES 0x00000080 /* DirectX 8.0 and above */
+
+typedef struct _DMUS_PORTPARAMS
+{
+ DWORD dwSize;
+ DWORD dwValidParams;
+ DWORD dwVoices;
+ DWORD dwChannelGroups;
+ DWORD dwAudioChannels;
+ DWORD dwSampleRate;
+ DWORD dwEffectFlags;
+ BOOL fShare;
+} DMUS_PORTPARAMS7;
+
+typedef struct _DMUS_PORTPARAMS8
+{
+ DWORD dwSize;
+ DWORD dwValidParams;
+ DWORD dwVoices;
+ DWORD dwChannelGroups;
+ DWORD dwAudioChannels;
+ DWORD dwSampleRate;
+ DWORD dwEffectFlags;
+ BOOL fShare;
+ DWORD dwFeatures;
+} DMUS_PORTPARAMS8;
+
+#define DMUS_PORT_FEATURE_AUDIOPATH 0x00000001 /* Supports audiopath connection to DirectSound buffers. */
+#define DMUS_PORT_FEATURE_STREAMING 0x00000002 /* Supports streaming waves through the synth. */
+
+
+typedef DMUS_PORTPARAMS8 DMUS_PORTPARAMS;
+typedef DMUS_PORTPARAMS *LPDMUS_PORTPARAMS;
+
+typedef struct _DMUS_SYNTHSTATS *LPDMUS_SYNTHSTATS;
+typedef struct _DMUS_SYNTHSTATS8 *LPDMUS_SYNTHSTATS8;
+typedef struct _DMUS_SYNTHSTATS
+{
+ DWORD dwSize; /* Size in bytes of the structure */
+ DWORD dwValidStats; /* Flags indicating which fields below are valid. */
+ DWORD dwVoices; /* Average number of voices playing. */
+ DWORD dwTotalCPU; /* Total CPU usage as percent * 100. */
+ DWORD dwCPUPerVoice; /* CPU per voice as percent * 100. */
+ DWORD dwLostNotes; /* Number of notes lost in 1 second. */
+ DWORD dwFreeMemory; /* Free memory in bytes */
+ long lPeakVolume; /* Decibel level * 100. */
+} DMUS_SYNTHSTATS;
+
+typedef struct _DMUS_SYNTHSTATS8
+{
+ DWORD dwSize; /* Size in bytes of the structure */
+ DWORD dwValidStats; /* Flags indicating which fields below are valid. */
+ DWORD dwVoices; /* Average number of voices playing. */
+ DWORD dwTotalCPU; /* Total CPU usage as percent * 100. */
+ DWORD dwCPUPerVoice; /* CPU per voice as percent * 100. */
+ DWORD dwLostNotes; /* Number of notes lost in 1 second. */
+ DWORD dwFreeMemory; /* Free memory in bytes */
+ long lPeakVolume; /* Decibel level * 100. */
+ DWORD dwSynthMemUse; /* Memory used by synth wave data */
+} DMUS_SYNTHSTATS8;
+
+#define DMUS_SYNTHSTATS_VOICES (1 << 0)
+#define DMUS_SYNTHSTATS_TOTAL_CPU (1 << 1)
+#define DMUS_SYNTHSTATS_CPU_PER_VOICE (1 << 2)
+#define DMUS_SYNTHSTATS_LOST_NOTES (1 << 3)
+#define DMUS_SYNTHSTATS_PEAK_VOLUME (1 << 4)
+#define DMUS_SYNTHSTATS_FREE_MEMORY (1 << 5)
+
+#define DMUS_SYNTHSTATS_SYSTEMMEMORY DMUS_PC_SYSTEMMEMORY
+
+typedef struct _DMUS_WAVES_REVERB_PARAMS
+{
+ float fInGain; /* Input gain in dB (to avoid output overflows) */
+ float fReverbMix; /* Reverb mix in dB. 0dB means 100% wet reverb (no direct signal)
+ Negative values gives less wet signal.
+ The coeficients are calculated so that the overall output level stays
+ (approximately) constant regardless of the ammount of reverb mix. */
+ float fReverbTime; /* The reverb decay time, in milliseconds. */
+ float fHighFreqRTRatio; /* The ratio of the high frequencies to the global reverb time.
+ Unless very 'splashy-bright' reverbs are wanted, this should be set to
+ a value < 1.0.
+ For example if dRevTime==1000ms and dHighFreqRTRatio=0.1 than the
+ decay time for high frequencies will be 100ms.*/
+
+} DMUS_WAVES_REVERB_PARAMS;
+
+/* Note: Default values for Reverb are:
+ fInGain = 0.0dB (no change in level)
+ fReverbMix = -10.0dB (a reasonable reverb mix)
+ fReverbTime = 1000.0ms (one second global reverb time)
+ fHighFreqRTRatio = 0.001 (the ratio of the high frequencies to the global reverb time)
+*/
+
+typedef enum
+{
+ DMUS_CLOCK_SYSTEM = 0,
+ DMUS_CLOCK_WAVE = 1
+} DMUS_CLOCKTYPE;
+
+#define DMUS_CLOCKF_GLOBAL 0x00000001
+
+typedef struct _DMUS_CLOCKINFO7 *LPDMUS_CLOCKINFO7;
+typedef struct _DMUS_CLOCKINFO7
+{
+ DWORD dwSize;
+ DMUS_CLOCKTYPE ctType;
+ GUID guidClock; /* Identifies this time source */
+ WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
+} DMUS_CLOCKINFO7;
+
+typedef struct _DMUS_CLOCKINFO8 *LPDMUS_CLOCKINFO8;
+typedef struct _DMUS_CLOCKINFO8
+{
+ DWORD dwSize;
+ DMUS_CLOCKTYPE ctType;
+ GUID guidClock; /* Identifies this time source */
+ WCHAR wszDescription[DMUS_MAX_DESCRIPTION];
+ DWORD dwFlags;
+} DMUS_CLOCKINFO8;
+
+typedef DMUS_CLOCKINFO8 DMUS_CLOCKINFO;
+typedef DMUS_CLOCKINFO *LPDMUS_CLOCKINFO;
+
+/* Default bus identifiers
+ *
+ * The first 17 are direct mappings to the destinations defined in both
+ * the MMA DLS Level 2 specification and the Microsoft Multi-Channel audio
+ * specification.
+ */
+#define DSBUSID_FIRST_SPKR_LOC 0
+#define DSBUSID_FRONT_LEFT 0
+#define DSBUSID_LEFT 0 /* Front left is also just left */
+#define DSBUSID_FRONT_RIGHT 1
+#define DSBUSID_RIGHT 1 /* Ditto front right */
+#define DSBUSID_FRONT_CENTER 2
+#define DSBUSID_LOW_FREQUENCY 3
+#define DSBUSID_BACK_LEFT 4
+#define DSBUSID_BACK_RIGHT 5
+#define DSBUSID_FRONT_LEFT_OF_CENTER 6
+#define DSBUSID_FRONT_RIGHT_OF_CENTER 7
+#define DSBUSID_BACK_CENTER 8
+#define DSBUSID_SIDE_LEFT 9
+#define DSBUSID_SIDE_RIGHT 10
+#define DSBUSID_TOP_CENTER 11
+#define DSBUSID_TOP_FRONT_LEFT 12
+#define DSBUSID_TOP_FRONT_CENTER 13
+#define DSBUSID_TOP_FRONT_RIGHT 14
+#define DSBUSID_TOP_BACK_LEFT 15
+#define DSBUSID_TOP_BACK_CENTER 16
+#define DSBUSID_TOP_BACK_RIGHT 17
+#define DSBUSID_LAST_SPKR_LOC 17
+
+#define DSBUSID_IS_SPKR_LOC(id) ( ((id) >= DSBUSID_FIRST_SPKR_LOC) && ((id) <= DSBUSID_LAST_SPKR_LOC) )
+
+/* These bus identifiers are for the standard DLS effect sends
+ */
+#define DSBUSID_REVERB_SEND 64
+#define DSBUSID_CHORUS_SEND 65
+
+/* Dynamic bus identifiers start here. See the documentation for how
+ * synthesizers map the output of voices to static and dynamic
+ * bus identifiers.
+ */
+#define DSBUSID_DYNAMIC_0 512
+
+/* Null bus, used to identify busses that have no function mapping.
+*/
+#define DSBUSID_NULL 0xFFFFFFFF
+
+interface IDirectMusic;
+interface IDirectMusic8;
+interface IDirectMusicBuffer;
+interface IDirectMusicPort;
+interface IDirectMusicThru;
+interface IReferenceClock;
+
+#ifndef __cplusplus
+
+typedef interface IDirectMusic IDirectMusic;
+typedef interface IDirectMusic8 IDirectMusic8;
+typedef interface IDirectMusicPort IDirectMusicPort;
+typedef interface IDirectMusicBuffer IDirectMusicBuffer;
+typedef interface IDirectMusicThru IDirectMusicThru;
+typedef interface IReferenceClock IReferenceClock;
+
+#endif /* C++ */
+
+typedef IDirectMusic *LPDIRECTMUSIC;
+typedef IDirectMusic8 *LPDIRECTMUSIC8;
+typedef IDirectMusicPort *LPDIRECTMUSICPORT;
+typedef IDirectMusicBuffer *LPDIRECTMUSICBUFFER;
+
+#undef INTERFACE
+#define INTERFACE IDirectMusic
+DECLARE_INTERFACE_(IDirectMusic, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusic */
+ STDMETHOD(EnumPort) (THIS_ DWORD dwIndex,
+ LPDMUS_PORTCAPS pPortCaps) PURE;
+ STDMETHOD(CreateMusicBuffer) (THIS_ LPDMUS_BUFFERDESC pBufferDesc,
+ LPDIRECTMUSICBUFFER *ppBuffer,
+ LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(CreatePort) (THIS_ REFCLSID rclsidPort,
+ LPDMUS_PORTPARAMS pPortParams,
+ LPDIRECTMUSICPORT *ppPort,
+ LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumMasterClock) (THIS_ DWORD dwIndex,
+ LPDMUS_CLOCKINFO lpClockInfo) PURE;
+ STDMETHOD(GetMasterClock) (THIS_ LPGUID pguidClock,
+ IReferenceClock **ppReferenceClock) PURE;
+ STDMETHOD(SetMasterClock) (THIS_ REFGUID rguidClock) PURE;
+ STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
+ STDMETHOD(GetDefaultPort) (THIS_ LPGUID pguidPort) PURE;
+ STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound,
+ HWND hWnd) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDirectMusic8
+DECLARE_INTERFACE_(IDirectMusic8, IDirectMusic)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusic */
+ STDMETHOD(EnumPort) (THIS_ DWORD dwIndex,
+ LPDMUS_PORTCAPS pPortCaps) PURE;
+ STDMETHOD(CreateMusicBuffer) (THIS_ LPDMUS_BUFFERDESC pBufferDesc,
+ LPDIRECTMUSICBUFFER *ppBuffer,
+ LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(CreatePort) (THIS_ REFCLSID rclsidPort,
+ LPDMUS_PORTPARAMS pPortParams,
+ LPDIRECTMUSICPORT *ppPort,
+ LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(EnumMasterClock) (THIS_ DWORD dwIndex,
+ LPDMUS_CLOCKINFO lpClockInfo) PURE;
+ STDMETHOD(GetMasterClock) (THIS_ LPGUID pguidClock,
+ IReferenceClock **ppReferenceClock) PURE;
+ STDMETHOD(SetMasterClock) (THIS_ REFGUID rguidClock) PURE;
+ STDMETHOD(Activate) (THIS_ BOOL fEnable) PURE;
+ STDMETHOD(GetDefaultPort) (THIS_ LPGUID pguidPort) PURE;
+ STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound,
+ HWND hWnd) PURE;
+ /* IDirectMusic8 */
+ STDMETHOD(SetExternalMasterClock)
+ (THIS_ IReferenceClock *pClock) PURE;
+};
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicBuffer
+DECLARE_INTERFACE_(IDirectMusicBuffer, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicBuffer */
+ STDMETHOD(Flush) (THIS) PURE;
+ STDMETHOD(TotalTime) (THIS_ LPREFERENCE_TIME prtTime) PURE;
+
+ STDMETHOD(PackStructured) (THIS_ REFERENCE_TIME rt,
+ DWORD dwChannelGroup,
+ DWORD dwChannelMessage) PURE;
+
+ STDMETHOD(PackUnstructured) (THIS_ REFERENCE_TIME rt,
+ DWORD dwChannelGroup,
+ DWORD cb,
+ LPBYTE lpb) PURE;
+
+ STDMETHOD(ResetReadPtr) (THIS) PURE;
+ STDMETHOD(GetNextEvent) (THIS_ LPREFERENCE_TIME prt,
+ LPDWORD pdwChannelGroup,
+ LPDWORD pdwLength,
+ LPBYTE *ppData) PURE;
+
+ STDMETHOD(GetRawBufferPtr) (THIS_ LPBYTE *ppData) PURE;
+ STDMETHOD(GetStartTime) (THIS_ LPREFERENCE_TIME prt) PURE;
+ STDMETHOD(GetUsedBytes) (THIS_ LPDWORD pcb) PURE;
+ STDMETHOD(GetMaxBytes) (THIS_ LPDWORD pcb) PURE;
+ STDMETHOD(GetBufferFormat) (THIS_ LPGUID pGuidFormat) PURE;
+
+ STDMETHOD(SetStartTime) (THIS_ REFERENCE_TIME rt) PURE;
+ STDMETHOD(SetUsedBytes) (THIS_ DWORD cb) PURE;
+};
+
+typedef IDirectMusicBuffer IDirectMusicBuffer8;
+typedef IDirectMusicBuffer8 *LPDIRECTMUSICBUFFER8;
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicInstrument
+DECLARE_INTERFACE_(IDirectMusicInstrument, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicInstrument */
+ STDMETHOD(GetPatch) (THIS_ DWORD* pdwPatch) PURE;
+ STDMETHOD(SetPatch) (THIS_ DWORD dwPatch) PURE;
+};
+
+typedef IDirectMusicInstrument IDirectMusicInstrument8;
+typedef IDirectMusicInstrument8 *LPDIRECTMUSICINSTRUMENT8;
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicDownloadedInstrument
+DECLARE_INTERFACE_(IDirectMusicDownloadedInstrument, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicDownloadedInstrument */
+ /* None at this time */
+};
+
+typedef IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument8;
+typedef IDirectMusicDownloadedInstrument8 *LPDIRECTMUSICDOWNLOADEDINSTRUMENT8;
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicCollection
+DECLARE_INTERFACE_(IDirectMusicCollection, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicCollection */
+ STDMETHOD(GetInstrument) (THIS_ DWORD dwPatch,
+ IDirectMusicInstrument** ppInstrument) PURE;
+ STDMETHOD(EnumInstrument) (THIS_ DWORD dwIndex,
+ DWORD* pdwPatch,
+ LPWSTR pwszName,
+ DWORD dwNameLen) PURE;
+};
+
+typedef IDirectMusicCollection IDirectMusicCollection8;
+typedef IDirectMusicCollection8 *LPDIRECTMUSICCOLLECTION8;
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicDownload
+DECLARE_INTERFACE_(IDirectMusicDownload , IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicDownload */
+ STDMETHOD(GetBuffer) (THIS_ void** ppvBuffer,
+ DWORD* pdwSize) PURE;
+};
+
+typedef IDirectMusicDownload IDirectMusicDownload8;
+typedef IDirectMusicDownload8 *LPDIRECTMUSICDOWNLOAD8;
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicPortDownload
+DECLARE_INTERFACE_(IDirectMusicPortDownload, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicPortDownload */
+ STDMETHOD(GetBuffer) (THIS_ DWORD dwDLId,
+ IDirectMusicDownload** ppIDMDownload) PURE;
+ STDMETHOD(AllocateBuffer) (THIS_ DWORD dwSize,
+ IDirectMusicDownload** ppIDMDownload) PURE;
+ STDMETHOD(GetDLId) (THIS_ DWORD* pdwStartDLId,
+ DWORD dwCount) PURE;
+ STDMETHOD(GetAppend) (THIS_ DWORD* pdwAppend) PURE;
+ STDMETHOD(Download) (THIS_ IDirectMusicDownload* pIDMDownload) PURE;
+ STDMETHOD(Unload) (THIS_ IDirectMusicDownload* pIDMDownload) PURE;
+};
+
+typedef IDirectMusicPortDownload IDirectMusicPortDownload8;
+typedef IDirectMusicPortDownload8 *LPDIRECTMUSICPORTDOWNLOAD8;
+
+/* Standard values for voice priorities. Numerically higher priorities are higher in priority.
+ * These priorities are used to set the voice priority for all voices on a channel. They are
+ * used in the dwPriority parameter of IDirectMusicPort::GetPriority and returned in the
+ * lpwPriority parameter of pdwPriority.
+ *
+ * These priorities are shared with DirectSound.
+ */
+
+#ifndef _DIRECTAUDIO_PRIORITIES_DEFINED_
+#define _DIRECTAUDIO_PRIORITIES_DEFINED_
+
+#define DAUD_CRITICAL_VOICE_PRIORITY (0xF0000000)
+#define DAUD_HIGH_VOICE_PRIORITY (0xC0000000)
+#define DAUD_STANDARD_VOICE_PRIORITY (0x80000000)
+#define DAUD_LOW_VOICE_PRIORITY (0x40000000)
+#define DAUD_PERSIST_VOICE_PRIORITY (0x10000000)
+
+/* These are the default priorities assigned if not overridden. By default priorities are
+ * equal across channel groups (e.g. channel 5 on channel group 1 has the same priority as
+ * channel 5 on channel group 2).
+ *
+ * In accordance with DLS level 1, channel 10 has the highest priority, followed by 1 through 16
+ * except for 10.
+ */
+#define DAUD_CHAN1_VOICE_PRIORITY_OFFSET (0x0000000E)
+#define DAUD_CHAN2_VOICE_PRIORITY_OFFSET (0x0000000D)
+#define DAUD_CHAN3_VOICE_PRIORITY_OFFSET (0x0000000C)
+#define DAUD_CHAN4_VOICE_PRIORITY_OFFSET (0x0000000B)
+#define DAUD_CHAN5_VOICE_PRIORITY_OFFSET (0x0000000A)
+#define DAUD_CHAN6_VOICE_PRIORITY_OFFSET (0x00000009)
+#define DAUD_CHAN7_VOICE_PRIORITY_OFFSET (0x00000008)
+#define DAUD_CHAN8_VOICE_PRIORITY_OFFSET (0x00000007)
+#define DAUD_CHAN9_VOICE_PRIORITY_OFFSET (0x00000006)
+#define DAUD_CHAN10_VOICE_PRIORITY_OFFSET (0x0000000F)
+#define DAUD_CHAN11_VOICE_PRIORITY_OFFSET (0x00000005)
+#define DAUD_CHAN12_VOICE_PRIORITY_OFFSET (0x00000004)
+#define DAUD_CHAN13_VOICE_PRIORITY_OFFSET (0x00000003)
+#define DAUD_CHAN14_VOICE_PRIORITY_OFFSET (0x00000002)
+#define DAUD_CHAN15_VOICE_PRIORITY_OFFSET (0x00000001)
+#define DAUD_CHAN16_VOICE_PRIORITY_OFFSET (0x00000000)
+
+
+#define DAUD_CHAN1_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN1_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN2_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN2_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN3_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN3_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN4_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN4_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN5_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN5_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN6_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN6_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN7_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN7_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN8_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN8_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN9_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN9_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN10_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN10_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN11_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN11_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN12_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN12_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN13_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN13_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN14_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN14_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN15_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN15_VOICE_PRIORITY_OFFSET)
+#define DAUD_CHAN16_DEF_VOICE_PRIORITY (DAUD_STANDARD_VOICE_PRIORITY | DAUD_CHAN16_VOICE_PRIORITY_OFFSET)
+
+#endif /* _DIRECTAUDIO_PRIORITIES_DEFINED_ */
+
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicPort
+DECLARE_INTERFACE_(IDirectMusicPort, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicPort */
+ /* */
+ STDMETHOD(PlayBuffer) (THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE;
+ STDMETHOD(SetReadNotificationHandle) (THIS_ HANDLE hEvent) PURE;
+ STDMETHOD(Read) (THIS_ LPDIRECTMUSICBUFFER pBuffer) PURE;
+ STDMETHOD(DownloadInstrument) (THIS_ IDirectMusicInstrument *pInstrument,
+ IDirectMusicDownloadedInstrument **ppDownloadedInstrument,
+ DMUS_NOTERANGE *pNoteRanges,
+ DWORD dwNumNoteRanges) PURE;
+ STDMETHOD(UnloadInstrument) (THIS_ IDirectMusicDownloadedInstrument *pDownloadedInstrument) PURE;
+ STDMETHOD(GetLatencyClock) (THIS_ IReferenceClock **ppClock) PURE;
+ STDMETHOD(GetRunningStats) (THIS_ LPDMUS_SYNTHSTATS pStats) PURE;
+ STDMETHOD(Compact) (THIS) PURE;
+ STDMETHOD(GetCaps) (THIS_ LPDMUS_PORTCAPS pPortCaps) PURE;
+ STDMETHOD(DeviceIoControl) (THIS_ DWORD dwIoControlCode,
+ LPVOID lpInBuffer,
+ DWORD nInBufferSize,
+ LPVOID lpOutBuffer,
+ DWORD nOutBufferSize,
+ LPDWORD lpBytesReturned,
+ LPOVERLAPPED lpOverlapped) PURE;
+ STDMETHOD(SetNumChannelGroups) (THIS_ DWORD dwChannelGroups) PURE;
+ STDMETHOD(GetNumChannelGroups) (THIS_ LPDWORD pdwChannelGroups) PURE;
+ STDMETHOD(Activate) (THIS_ BOOL fActive) PURE;
+ STDMETHOD(SetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, DWORD dwPriority) PURE;
+ STDMETHOD(GetChannelPriority) (THIS_ DWORD dwChannelGroup, DWORD dwChannel, LPDWORD pdwPriority) PURE;
+ STDMETHOD(SetDirectSound) (THIS_ LPDIRECTSOUND pDirectSound, LPDIRECTSOUNDBUFFER pDirectSoundBuffer) PURE;
+ STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pWaveFormatEx, LPDWORD pdwWaveFormatExSize, LPDWORD pdwBufferSize) PURE;
+};
+
+typedef IDirectMusicPort IDirectMusicPort8;
+typedef IDirectMusicPort8 *LPDIRECTMUSICPORT8;
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicThru
+DECLARE_INTERFACE_(IDirectMusicThru, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicThru
+ */
+ STDMETHOD(ThruChannel) (THIS_ DWORD dwSourceChannelGroup,
+ DWORD dwSourceChannel,
+ DWORD dwDestinationChannelGroup,
+ DWORD dwDestinationChannel,
+ LPDIRECTMUSICPORT pDestinationPort) PURE;
+};
+
+typedef IDirectMusicThru IDirectMusicThru8;
+typedef IDirectMusicThru8 *LPDIRECTMUSICTHRU8;
+
+#ifndef __IReferenceClock_INTERFACE_DEFINED__
+#define __IReferenceClock_INTERFACE_DEFINED__
+
+DEFINE_GUID(IID_IReferenceClock,0x56a86897,0x0ad4,0x11ce,0xb0,0x3a,0x00,0x20,0xaf,0x0b,0xa7,0x70);
+
+#undef INTERFACE
+#define INTERFACE IReferenceClock
+DECLARE_INTERFACE_(IReferenceClock, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IReferenceClock */
+ /* */
+
+ /* get the time now */
+ STDMETHOD(GetTime) (THIS_ REFERENCE_TIME *pTime) PURE;
+
+ /* ask for an async notification that a time has elapsed */
+ STDMETHOD(AdviseTime) (THIS_ REFERENCE_TIME baseTime, /* base time */
+ REFERENCE_TIME streamTime, /* stream offset time */
+ HANDLE hEvent, /* advise via this event */
+ DWORD * pdwAdviseCookie) PURE; /* where your cookie goes */
+
+ /* ask for an async periodic notification that a time has elapsed */
+ STDMETHOD(AdvisePeriodic) (THIS_ REFERENCE_TIME startTime, /* starting at this time */
+ REFERENCE_TIME periodTime, /* time between notifications */
+ HANDLE hSemaphore, /* advise via a semaphore */
+ DWORD * pdwAdviseCookie) PURE; /* where your cookie goes */
+
+ /* cancel a request for notification */
+ STDMETHOD(Unadvise) (THIS_ DWORD dwAdviseCookie) PURE;
+};
+
+#endif /* __IReferenceClock_INTERFACE_DEFINED__ */
+
+DEFINE_GUID(CLSID_DirectMusic,0x636b9f10,0x0c7d,0x11d1,0x95,0xb2,0x00,0x20,0xaf,0xdc,0x74,0x21);
+DEFINE_GUID(CLSID_DirectMusicCollection,0x480ff4b0, 0x28b2, 0x11d1, 0xbe, 0xf7, 0x0, 0xc0, 0x4f, 0xbf, 0x8f, 0xef);
+DEFINE_GUID(CLSID_DirectMusicSynth,0x58C2B4D0,0x46E7,0x11D1,0x89,0xAC,0x00,0xA0,0xC9,0x05,0x41,0x29);
+
+DEFINE_GUID(IID_IDirectMusic,0x6536115a,0x7b2d,0x11d2,0xba,0x18,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(IID_IDirectMusicBuffer,0xd2ac2878, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicPort, 0x08f2d8c9,0x37c2,0x11d2,0xb9,0xf9,0x00,0x00,0xf8,0x75,0xac,0x12);
+DEFINE_GUID(IID_IDirectMusicThru, 0xced153e7, 0x3606, 0x11d2, 0xb9, 0xf9, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(IID_IDirectMusicPortDownload,0xd2ac287a, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicDownload,0xd2ac287b, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicCollection,0xd2ac287c, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicInstrument,0xd2ac287d, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicDownloadedInstrument,0xd2ac287e, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+
+/* Alternate interface ID for IID_IDirectMusic, available in DX7 release and after. */
+DEFINE_GUID(IID_IDirectMusic2,0x6fc2cae1, 0xbc78, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+
+DEFINE_GUID(IID_IDirectMusic8,0x2d3629f7,0x813d,0x4939,0x85,0x08,0xf0,0x5c,0x6b,0x75,0xfd,0x97);
+
+#define IID_IDirectMusicThru8 IID_IDirectMusicThru
+#define IID_IDirectMusicPortDownload8 IID_IDirectMusicPortDownload
+#define IID_IDirectMusicDownload8 IID_IDirectMusicDownload
+#define IID_IDirectMusicCollection8 IID_IDirectMusicCollection
+#define IID_IDirectMusicInstrument8 IID_IDirectMusicInstrument
+#define IID_IDirectMusicDownloadedInstrument8 IID_IDirectMusicDownloadedInstrument
+#define IID_IDirectMusicPort8 IID_IDirectMusicPort
+
+
+/* Property Query GUID_DMUS_PROP_GM_Hardware - Local GM set, no need to download
+ * Property Query GUID_DMUS_PROP_GS_Hardware - Local GS set, no need to download
+ * Property Query GUID_DMUS_PROP_XG_Hardware - Local XG set, no need to download
+ * Property Query GUID_DMUS_PROP_DLS1 - Support DLS level 1
+ * Property Query GUID_DMUS_PROP_INSTRUMENT2 - Support new INSTRUMENT2 download format
+ * Property Query GUID_DMUS_PROP_XG_Capable - Support minimum requirements of XG
+ * Property Query GUID_DMUS_PROP_GS_Capable - Support minimum requirements of GS
+ * Property Query GUID_DMUS_PROP_SynthSink_DSOUND - Synthsink talks to DirectSound
+ * Property Query GUID_DMUS_PROP_SynthSink_WAVE - Synthsink talks to Wave device
+ *
+ * Item 0: Supported
+ * Returns a DWORD which is non-zero if the feature is supported
+ */
+DEFINE_GUID(GUID_DMUS_PROP_GM_Hardware, 0x178f2f24, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(GUID_DMUS_PROP_GS_Hardware, 0x178f2f25, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(GUID_DMUS_PROP_XG_Hardware, 0x178f2f26, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(GUID_DMUS_PROP_XG_Capable, 0x6496aba1, 0x61b0, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_GS_Capable, 0x6496aba2, 0x61b0, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_DLS1, 0x178f2f27, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(GUID_DMUS_PROP_DLS2, 0xf14599e5, 0x4689, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+DEFINE_GUID(GUID_DMUS_PROP_INSTRUMENT2, 0x865fd372, 0x9f67, 0x11d2, 0x87, 0x2a, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_SynthSink_DSOUND,0xaa97844, 0xc877, 0x11d1, 0x87, 0xc, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_SynthSink_WAVE,0xaa97845, 0xc877, 0x11d1, 0x87, 0xc, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_DMUS_PROP_SampleMemorySize, 0x178f2f28, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+DEFINE_GUID(GUID_DMUS_PROP_SamplePlaybackRate, 0x2a91f713, 0xa4bf, 0x11d2, 0xbb, 0xdf, 0x0, 0x60, 0x8, 0x33, 0xdb, 0xd8);
+
+/* Property Get/Set GUID_DMUS_PROP_WriteLatency
+ *
+ * Item 0: Synth buffer write latency, in milliseconds
+ * Get/Set SynthSink latency, the average time after the play head that the next buffer gets written.
+ */
+DEFINE_GUID(GUID_DMUS_PROP_WriteLatency,0x268a0fa0, 0x60f2, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+
+/* Property Get/Set GUID_DMUS_PROP_WritePeriod
+ *
+ * Item 0: Synth buffer write period, in milliseconds
+ * Get/Set SynthSink buffer write period, time span between successive writes.
+ */
+DEFINE_GUID(GUID_DMUS_PROP_WritePeriod,0x268a0fa1, 0x60f2, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+
+/* Property Get GUID_DMUS_PROP_MemorySize
+ *
+ * Item 0: Memory size
+ * Returns a DWORD containing the total number of bytes of sample RAM
+ */
+DEFINE_GUID(GUID_DMUS_PROP_MemorySize, 0x178f2f28, 0xc364, 0x11d1, 0xa7, 0x60, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+
+/* Property Set GUID_DMUS_PROP_WavesReverb
+ *
+ * Item 0: DMUS_WAVES_REVERB structure
+ * Sets reverb parameters
+ */
+DEFINE_GUID(GUID_DMUS_PROP_WavesReverb,0x4cb5622, 0x32e5, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+
+/* Property Set GUID_DMUS_PROP_Effects
+ *
+ * Item 0: DWORD with effects flags.
+ * Get/Set effects bits, same as dwEffectFlags in DMUS_PORTPARAMS and DMUS_PORTCAPS:
+ * DMUS_EFFECT_NONE
+ * DMUS_EFFECT_REVERB
+ * DMUS_EFFECT_CHORUS
+ */
+DEFINE_GUID(GUID_DMUS_PROP_Effects, 0xcda8d611, 0x684a, 0x11d2, 0x87, 0x1e, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Property Set GUID_DMUS_PROP_LegacyCaps
+ *
+ * Item 0: The MIDINCAPS or MIDIOUTCAPS which describes the port's underlying WinMM device. This property is only supported
+ * by ports which wrap WinMM devices.
+ */
+
+DEFINE_GUID(GUID_DMUS_PROP_LegacyCaps,0xcfa7cdc2, 0x00a1, 0x11d2, 0xaa, 0xd5, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+
+/* Property Set GUID_DMUS_PROP_Volume
+ *
+ * Item 0: A long which contains an offset, in 1/100 dB, to be added to the final volume
+ *
+ */
+DEFINE_GUID(GUID_DMUS_PROP_Volume, 0xfedfae25L, 0xe46e, 0x11d1, 0xaa, 0xce, 0x00, 0x00, 0xf8, 0x75, 0xac, 0x12);
+
+/* Min and Max values for setting volume with GUID_DMUS_PROP_Volume */
+
+#define DMUS_VOLUME_MAX 2000 /* +20 dB */
+#define DMUS_VOLUME_MIN -20000 /* -200 dB */
+
+#ifdef __cplusplus
+}; /* extern "C" */
+#endif
+
+#include <poppack.h>
+
+#endif /* #ifndef _DMUSICC_ */
diff --git a/plugins/!NotAdopted/sndVol/dmusici.h b/plugins/!NotAdopted/sndVol/dmusici.h
new file mode 100644
index 0000000000..0af3a12f8b
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dmusici.h
@@ -0,0 +1,1883 @@
+/************************************************************************
+* *
+* dmusici.h -- This module contains the API for the *
+* DirectMusic performance layer *
+* *
+* Copyright (c) Microsoft Corporation. All rights reserved. *
+* *
+************************************************************************/
+
+#ifndef _DMUSICI_
+#define _DMUSICI_
+
+#include <windows.h>
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+
+#include <mmsystem.h>
+#include <dmusicc.h>
+/* plugin (track and tool) interfaces. This #include will eventually go away. */
+#include <dmplugin.h>
+
+#include <pshpack8.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef WORD TRANSITION_TYPE;
+typedef __int64 REFERENCE_TIME;
+typedef long MUSIC_TIME;
+
+#define MT_MIN 0x80000000 /* Minimum music time value. */
+#define MT_MAX 0x7FFFFFFF /* Maximum music time value. */
+
+#define DMUS_PPQ 768 /* parts per quarter note */
+
+interface IDirectMusicTrack;
+interface IDirectMusicPerformance;
+interface IDirectMusicPerformance8;
+interface IDirectMusicTool;
+interface IDirectMusicSegment;
+interface IDirectMusicSegment8;
+interface IDirectMusicSegmentState;
+interface IDirectMusicSegmentState8;
+interface IDirectMusicGraph;
+interface IDirectMusicBuffer;
+interface IDirectMusicInstrument;
+interface IDirectMusicDownloadedInstrument;
+interface IDirectMusicBand;
+interface IDirectMusicChordMap;
+interface IDirectMusicLoader;
+interface IDirectMusicLoader8;
+interface IDirectMusicScript;
+interface IDirectMusicObject;
+interface IDirectMusicStyle8;
+interface IDirectMusicPatternTrack;
+interface IDirectMusicContainer;
+interface IDirectMusicTool8;
+interface IDirectMusicTrack8;
+interface IDirectMusicAudioPath;
+#ifndef __cplusplus
+typedef interface IDirectMusicTrack IDirectMusicTrack;
+typedef interface IDirectMusicPerformance IDirectMusicPerformance;
+typedef interface IDirectMusicPerformance8 IDirectMusicPerformance8;
+typedef interface IDirectMusicTool IDirectMusicTool;
+typedef interface IDirectMusicSegment IDirectMusicSegment;
+typedef interface IDirectMusicSegment8 IDirectMusicSegment8;
+typedef interface IDirectMusicSegmentState IDirectMusicSegmentState;
+typedef interface IDirectMusicSegmentState8 IDirectMusicSegmentState8;
+typedef interface IDirectMusicGraph IDirectMusicGraph;
+typedef interface IDirectMusicBuffer IDirectMusicBuffer;
+typedef interface IDirectMusicInstrument IDirectMusicInstrument;
+typedef interface IDirectMusicDownloadedInstrument IDirectMusicDownloadedInstrument;
+typedef interface IDirectMusicBand IDirectMusicBand;
+typedef interface IDirectMusicChordMap IDirectMusicChordMap;
+typedef interface IDirectMusicObject IDirectMusicObject;
+typedef interface IDirectMusicLoader IDirectMusicLoader;
+typedef interface IDirectMusicLoader8 IDirectMusicLoader8;
+typedef interface IDirectMusicScript IDirectMusicScript;
+typedef interface IDirectMusicStyle8 IDirectMusicStyle8;
+typedef interface IDirectMusicPatternTrack IDirectMusicPatternTrack;
+typedef interface IDirectMusicContainer IDirectMusicContainer;
+typedef interface IDirectMusicTool8 IDirectMusicTool8;
+typedef interface IDirectMusicTrack8 IDirectMusicTrack8;
+typedef interface IDirectMusicAudioPath IDirectMusicAudioPath;
+#endif
+
+typedef enum enumDMUS_STYLET_TYPES
+{
+ DMUS_STYLET_PATTERN = 0,
+ DMUS_STYLET_MOTIF = 1,
+} DMUS_STYLET_TYPES;
+
+
+typedef enum enumDMUS_COMMANDT_TYPES
+{
+ DMUS_COMMANDT_GROOVE = 0,
+ DMUS_COMMANDT_FILL = 1,
+ DMUS_COMMANDT_INTRO = 2,
+ DMUS_COMMANDT_BREAK = 3,
+ DMUS_COMMANDT_END = 4,
+ DMUS_COMMANDT_ENDANDINTRO = 5
+} DMUS_COMMANDT_TYPES;
+
+typedef enum enumDMUS_SHAPET_TYPES
+{
+ DMUS_SHAPET_FALLING = 0,
+ DMUS_SHAPET_LEVEL = 1,
+ DMUS_SHAPET_LOOPABLE = 2,
+ DMUS_SHAPET_LOUD = 3,
+ DMUS_SHAPET_QUIET = 4,
+ DMUS_SHAPET_PEAKING = 5,
+ DMUS_SHAPET_RANDOM = 6,
+ DMUS_SHAPET_RISING = 7,
+ DMUS_SHAPET_SONG = 8
+} DMUS_SHAPET_TYPES;
+
+typedef enum enumDMUS_COMPOSEF_FLAGS
+{
+ DMUS_COMPOSEF_NONE = 0,
+ DMUS_COMPOSEF_ALIGN = 0x1,
+ DMUS_COMPOSEF_OVERLAP = 0x2,
+ DMUS_COMPOSEF_IMMEDIATE = 0x4,
+ DMUS_COMPOSEF_GRID = 0x8,
+ DMUS_COMPOSEF_BEAT = 0x10,
+ DMUS_COMPOSEF_MEASURE = 0x20,
+ DMUS_COMPOSEF_AFTERPREPARETIME = 0x40,
+ DMUS_COMPOSEF_VALID_START_BEAT = 0x80, /* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur on any beat. */
+ DMUS_COMPOSEF_VALID_START_GRID = 0x100, /* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur on any grid. */
+ DMUS_COMPOSEF_VALID_START_TICK = 0x200, /* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur any time. */
+ DMUS_COMPOSEF_SEGMENTEND = 0x400, /* Play the transition at the end of the current segment. */
+ DMUS_COMPOSEF_MARKER = 0x800, /* Play the transition at the next marker in the current segment. */
+ DMUS_COMPOSEF_MODULATE = 0x1000,
+ DMUS_COMPOSEF_LONG = 0x2000,
+ DMUS_COMPOSEF_ENTIRE_TRANSITION = 0x4000, /* play the entire transition pattern */
+ DMUS_COMPOSEF_1BAR_TRANSITION = 0x8000, /* play one bar of the transition pattern */
+ DMUS_COMPOSEF_ENTIRE_ADDITION = 0x10000, /* play the additional pattern in its entirety */
+ DMUS_COMPOSEF_1BAR_ADDITION = 0x20000, /* play one bar of the additional pattern */
+ DMUS_COMPOSEF_VALID_START_MEASURE = 0x40000, /* In conjunction with DMUS_COMPOSEF_ALIGN, allows the switch to occur on any bar. */
+ DMUS_COMPOSEF_DEFAULT = 0x80000, /* Use segment's default boundary */
+ DMUS_COMPOSEF_NOINVALIDATE = 0x100000, /* Play without invalidating the currently playing segment(s) */
+ DMUS_COMPOSEF_USE_AUDIOPATH = 0x200000, /* Uses the audio paths that are embedded in the segments */
+ DMUS_COMPOSEF_INVALIDATE_PRI = 0x400000 /* Invalidate only the current primary seg state */
+} DMUS_COMPOSEF_FLAGS;
+
+#define DMUS_PMSG_PART \
+ DWORD dwSize; \
+ REFERENCE_TIME rtTime; /* real time (in 100 nanosecond increments) */ \
+ MUSIC_TIME mtTime; /* music time */ \
+ DWORD dwFlags; /* various bits (see DMUS_PMSGF_FLAGS enumeration) */ \
+ DWORD dwPChannel; /* Performance Channel. The Performance can */ \
+ /* use this to determine the port/channel. */ \
+ DWORD dwVirtualTrackID; /* virtual track ID */ \
+ IDirectMusicTool* pTool; /* tool interface pointer */ \
+ IDirectMusicGraph* pGraph; /* tool graph interface pointer */ \
+ DWORD dwType; /* PMSG type (see DMUS_PMSGT_TYPES defines) */ \
+ DWORD dwVoiceID; /* unique voice id which allows synthesizers to */ \
+ /* identify a specific event. For DirectX 6.0, */ \
+ /* this field should always be 0. */ \
+ DWORD dwGroupID; /* Track group id */ \
+ IUnknown* punkUser; /* user com pointer, auto released upon PMSG free */
+
+/* every DMUS_PMSG is based off of this structure. The Performance needs
+ to access these members consistently in every PMSG that goes through it. */
+typedef struct _DMUS_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+} DMUS_PMSG;
+
+#define DMUS_PCHANNEL_BROADCAST_PERFORMANCE 0xFFFFFFFF /* PMsg is sent on all PChannels of the performance. */
+#define DMUS_PCHANNEL_BROADCAST_AUDIOPATH 0xFFFFFFFE /* PMsg is sent on all PChannels of the audio path. */
+#define DMUS_PCHANNEL_BROADCAST_SEGMENT 0xFFFFFFFD /* PMsg is sent on all PChannels of the segment. */
+#define DMUS_PCHANNEL_BROADCAST_GROUPS 0xFFFFFFFC /* A duplicate PMsg is for each Channels Groups in the performance. */
+
+/* The DMUS_PATH constants are used in conjunction with GetObjectInPath to find a requested
+ interface at a particular stage in the audio path.
+*/
+#define DMUS_PATH_SEGMENT 0x1000 /* Get the segment itself (from a segment state.) */
+#define DMUS_PATH_SEGMENT_TRACK 0x1100 /* Look in Track List of Segment. */
+#define DMUS_PATH_SEGMENT_GRAPH 0x1200 /* Get the segment's tool graph. */
+#define DMUS_PATH_SEGMENT_TOOL 0x1300 /* Look in Tool Graph of Segment. */
+#define DMUS_PATH_AUDIOPATH 0x2000 /* Get the audiopath itself (from a segment state.) */
+#define DMUS_PATH_AUDIOPATH_GRAPH 0x2200 /* Get the audiopath's tool graph. */
+#define DMUS_PATH_AUDIOPATH_TOOL 0x2300 /* Look in Tool Graph of Audio Path. */
+#define DMUS_PATH_PERFORMANCE 0x3000 /* Access the performance. */
+#define DMUS_PATH_PERFORMANCE_GRAPH 0x3200 /* Get the performance's tool graph. */
+#define DMUS_PATH_PERFORMANCE_TOOL 0x3300 /* Look in Tool Graph of Performance. */
+#define DMUS_PATH_PORT 0x4000 /* Access the synth. */
+#define DMUS_PATH_BUFFER 0x6000 /* Look in DirectSoundBuffer. */
+#define DMUS_PATH_BUFFER_DMO 0x6100 /* Access a DMO in the buffer. */
+#define DMUS_PATH_MIXIN_BUFFER 0x7000 /* Look in a global mixin buffer. */
+#define DMUS_PATH_MIXIN_BUFFER_DMO 0x7100 /* Access a DMO in a global mixin buffer. */
+#define DMUS_PATH_PRIMARY_BUFFER 0x8000 /* Access the primary buffer. */
+
+/* To ignore PChannels when calling GetObjectInPath(), use the DMUS_PCHANNEL_ALL constant. */
+#define DMUS_PCHANNEL_ALL 0xFFFFFFFB
+
+/* The DMUS_APATH types are used in conjunction with CreateStandardAudioPath to
+ build default path types. _SHARED_ means the same buffer is shared across multiple
+ instantiations of the audiopath type. _DYNAMIC_ means a unique buffer is created
+ every time.
+*/
+
+#define DMUS_APATH_SHARED_STEREOPLUSREVERB 1 /* A standard music set up with stereo outs and reverb. */
+#define DMUS_APATH_DYNAMIC_3D 6 /* An audio path with one dynamic bus from the synth feeding to a dynamic 3d buffer. Does not send to env reverb. */
+#define DMUS_APATH_DYNAMIC_MONO 7 /* An audio path with one dynamic bus from the synth feeding to a dynamic mono buffer. */
+#define DMUS_APATH_DYNAMIC_STEREO 8 /* An audio path with two dynamic buses from the synth feeding to a dynamic stereo buffer. */
+
+typedef struct _DMUS_AUDIOPARAMS
+{
+ DWORD dwSize; /* Size of this structure. */
+ BOOL fInitNow; /* If true, the sink and synth are created immediately and results returned in this structure. */
+ DWORD dwValidData; /* Flags indicating which fields below are valid. */
+ DWORD dwFeatures; /* Required DMUS_AUDIOF features. */
+ DWORD dwVoices; /* Required number of voices. */
+ DWORD dwSampleRate; /* Sample rate of synths and sink. */
+ CLSID clsidDefaultSynth; /* Class ID of default synthesizer. */
+} DMUS_AUDIOPARAMS;
+
+/* dwFeatures flags. These indicate which features are required for the audio environment. */
+#define DMUS_AUDIOF_3D 0x1 /* Require 3D buffers. */
+#define DMUS_AUDIOF_ENVIRON 0x2 /* Require environmental modeling. */
+#define DMUS_AUDIOF_EAX 0x4 /* Require use of EAX effects. */
+#define DMUS_AUDIOF_DMOS 0x8 /* Require use of additional DMOs. */
+#define DMUS_AUDIOF_STREAMING 0x10 /* Require support for streaming waves. */
+#define DMUS_AUDIOF_BUFFERS 0x20 /* Require support for multiple buffers (all above cases need this.) */
+#define DMUS_AUDIOF_ALL 0x3F /* Requires everything. */
+
+/* dwValidData flags. These indicate which fields in DMUS_AUDIOPARAMS have been filled in. If fInitNow is set, these also return what was allocated. */
+#define DMUS_AUDIOPARAMS_FEATURES 0x00000001
+#define DMUS_AUDIOPARAMS_VOICES 0x00000002
+#define DMUS_AUDIOPARAMS_SAMPLERATE 0x00000004
+#define DMUS_AUDIOPARAMS_DEFAULTSYNTH 0x00000008
+
+/* DMUS_PMSGF_FLAGS fill the DMUS_PMSG's dwFlags member */
+typedef enum enumDMUS_PMSGF_FLAGS
+{
+ DMUS_PMSGF_REFTIME = 1, /* if rtTime is valid */
+ DMUS_PMSGF_MUSICTIME = 2, /* if mtTime is valid */
+ DMUS_PMSGF_TOOL_IMMEDIATE = 4, /* if PMSG should be processed immediately */
+ DMUS_PMSGF_TOOL_QUEUE = 8, /* if PMSG should be processed a little early, at Queue time */
+ DMUS_PMSGF_TOOL_ATTIME = 0x10, /* if PMSG should be processed at the time stamp */
+ DMUS_PMSGF_TOOL_FLUSH = 0x20, /* if PMSG is being flushed */
+ DMUS_PMSGF_LOCKTOREFTIME = 0x40, /* if rtTime can not be overriden by a tempo change. */
+ DMUS_PMSGF_DX8 = 0x80 /* if the message has DX8 or later extensions. */
+ /* The values of DMUS_TIME_RESOLVE_FLAGS may also be used inside the */
+ /* DMUS_PMSG's dwFlags member. */
+} DMUS_PMSGF_FLAGS;
+
+/* DMUS_PMSGT_TYPES fill the DMUS_PMSG's dwType member */
+typedef enum enumDMUS_PMSGT_TYPES
+{
+ DMUS_PMSGT_MIDI = 0, /* MIDI short message */
+ DMUS_PMSGT_NOTE = 1, /* Interactive Music Note */
+ DMUS_PMSGT_SYSEX = 2, /* MIDI long message (system exclusive message) */
+ DMUS_PMSGT_NOTIFICATION = 3, /* Notification message */
+ DMUS_PMSGT_TEMPO = 4, /* Tempo message */
+ DMUS_PMSGT_CURVE = 5, /* Control change / pitch bend, etc. curve */
+ DMUS_PMSGT_TIMESIG = 6, /* Time signature */
+ DMUS_PMSGT_PATCH = 7, /* Patch changes */
+ DMUS_PMSGT_TRANSPOSE = 8, /* Transposition messages */
+ DMUS_PMSGT_CHANNEL_PRIORITY = 9, /* Channel priority */
+ DMUS_PMSGT_STOP = 10, /* Stop message */
+ DMUS_PMSGT_DIRTY = 11, /* Tells Tools that cache GetParam() info to refresh */
+ DMUS_PMSGT_WAVE = 12, /* Carries control information for playing a wave. */
+ DMUS_PMSGT_LYRIC = 13, /* Lyric message from lyric track. */
+ DMUS_PMSGT_SCRIPTLYRIC = 14, /* Lyric message sent by a script with the Trace function. */
+ DMUS_PMSGT_USER = 255 /* User message */
+} DMUS_PMSGT_TYPES;
+
+/* DMUS_SEGF_FLAGS correspond to IDirectMusicPerformance::PlaySegment, and other API */
+typedef enum enumDMUS_SEGF_FLAGS
+{
+ DMUS_SEGF_REFTIME = 1<<6, /* 0x40 Time parameter is in reference time */
+ DMUS_SEGF_SECONDARY = 1<<7, /* 0x80 Secondary segment */
+ DMUS_SEGF_QUEUE = 1<<8, /* 0x100 Queue at the end of the primary segment queue (primary only) */
+ DMUS_SEGF_CONTROL = 1<<9, /* 0x200 Play as a control track (secondary segments only) */
+ DMUS_SEGF_AFTERPREPARETIME = 1<<10, /* 0x400 Play after the prepare time (See IDirectMusicPerformance::GetPrepareTime) */
+ DMUS_SEGF_GRID = 1<<11, /* 0x800 Play on grid boundary */
+ DMUS_SEGF_BEAT = 1<<12, /* 0x1000 Play on beat boundary */
+ DMUS_SEGF_MEASURE = 1<<13, /* 0x2000 Play on measure boundary */
+ DMUS_SEGF_DEFAULT = 1<<14, /* 0x4000 Use segment's default boundary */
+ DMUS_SEGF_NOINVALIDATE = 1<<15, /* 0x8000 Play without invalidating the currently playing segment(s) */
+ DMUS_SEGF_ALIGN = 1<<16, /* 0x10000 Align segment with requested boundary, but switch at first valid point */
+ DMUS_SEGF_VALID_START_BEAT = 1<<17, /* 0x20000 In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur on any beat. */
+ DMUS_SEGF_VALID_START_GRID = 1<<18, /* 0x40000 In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur on any grid. */
+ DMUS_SEGF_VALID_START_TICK = 1<<19, /* 0x80000 In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur any time. */
+ DMUS_SEGF_AUTOTRANSITION = 1<<20, /* 0x100000 Compose and play a transition segment, using the transition template. */
+ DMUS_SEGF_AFTERQUEUETIME = 1<<21, /* 0x200000 Make sure to play after the queue time. This is default for primary segments */
+ DMUS_SEGF_AFTERLATENCYTIME = 1<<22, /* 0x400000 Make sure to play after the latency time. This is true for all segments, so this is a nop */
+ DMUS_SEGF_SEGMENTEND = 1<<23, /* 0x800000 Play at the next end of segment. */
+ DMUS_SEGF_MARKER = 1<<24, /* 0x1000000 Play at next marker in the primary segment. If there are no markers, default to any other resolution requests. */
+ DMUS_SEGF_TIMESIG_ALWAYS = 1<<25, /* 0x2000000 Even if there is no primary segment, align start time with current time signature. */
+ DMUS_SEGF_USE_AUDIOPATH = 1<<26, /* 0x4000000 Uses the audio path that is embedded in the segment. */
+ DMUS_SEGF_VALID_START_MEASURE = 1<<27, /* 0x8000000 In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur on any bar. */
+ DMUS_SEGF_INVALIDATE_PRI = 1<<28 /* 0x10000000 invalidate only the current primary seg state */
+} DMUS_SEGF_FLAGS;
+
+#define DMUS_SEG_REPEAT_INFINITE 0xFFFFFFFF /* For IDirectMusicSegment::SetRepeat*/
+#define DMUS_SEG_ALLTRACKS 0x80000000 /* For IDirectMusicSegment::SetParam() and SetTrackConfig() - selects all tracks instead on nth index. */
+#define DMUS_SEG_ANYTRACK 0x80000000 /* For IDirectMusicSegment::GetParam() - checks each track until it finds one that returns data (not DMUS_E_NOT_FOUND.) */
+
+
+/* DMUS_TIME_RESOLVE_FLAGS correspond to IDirectMusicPerformance::GetResolvedTime, and can */
+/* also be used interchangeably with the corresponding DMUS_SEGF_FLAGS, since their values */
+/* are intentionally the same */
+typedef enum enumDMUS_TIME_RESOLVE_FLAGS
+{
+ DMUS_TIME_RESOLVE_AFTERPREPARETIME = DMUS_SEGF_AFTERPREPARETIME,
+ DMUS_TIME_RESOLVE_AFTERQUEUETIME = DMUS_SEGF_AFTERQUEUETIME,
+ DMUS_TIME_RESOLVE_AFTERLATENCYTIME = DMUS_SEGF_AFTERLATENCYTIME,
+ DMUS_TIME_RESOLVE_GRID = DMUS_SEGF_GRID,
+ DMUS_TIME_RESOLVE_BEAT = DMUS_SEGF_BEAT,
+ DMUS_TIME_RESOLVE_MEASURE = DMUS_SEGF_MEASURE,
+ DMUS_TIME_RESOLVE_MARKER = DMUS_SEGF_MARKER,
+ DMUS_TIME_RESOLVE_SEGMENTEND = DMUS_SEGF_SEGMENTEND,
+} DMUS_TIME_RESOLVE_FLAGS;
+
+/* The following flags are sent inside the DMUS_CHORD_KEY.dwFlags parameter */
+typedef enum enumDMUS_CHORDKEYF_FLAGS
+{
+ DMUS_CHORDKEYF_SILENT = 1, /* is the chord silent? */
+} DMUS_CHORDKEYF_FLAGS;
+
+#define DMUS_MAXSUBCHORD 8
+
+typedef struct _DMUS_SUBCHORD
+{
+ DWORD dwChordPattern; /* Notes in the subchord */
+ DWORD dwScalePattern; /* Notes in the scale */
+ DWORD dwInversionPoints; /* Where inversions can occur */
+ DWORD dwLevels; /* Which levels are supported by this subchord */
+ BYTE bChordRoot; /* Root of the subchord */
+ BYTE bScaleRoot; /* Root of the scale */
+} DMUS_SUBCHORD;
+
+typedef struct _DMUS_CHORD_KEY
+{
+ WCHAR wszName[16]; /* Name of the chord */
+ WORD wMeasure; /* Measure this falls on */
+ BYTE bBeat; /* Beat this falls on */
+ BYTE bSubChordCount; /* Number of chords in the list of subchords */
+ DMUS_SUBCHORD SubChordList[DMUS_MAXSUBCHORD]; /* List of sub chords */
+ DWORD dwScale; /* Scale underlying the entire chord */
+ BYTE bKey; /* Key underlying the entire chord */
+ BYTE bFlags; /* Miscelaneous flags */
+} DMUS_CHORD_KEY;
+
+/* DMUS_NOTE_PMSG */
+typedef struct _DMUS_NOTE_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ MUSIC_TIME mtDuration; /* duration */
+ WORD wMusicValue; /* Description of note in chord and key. */
+ WORD wMeasure; /* Measure in which this note occurs */
+ short nOffset; /* Offset from grid at which this note occurs */
+ BYTE bBeat; /* Beat (in measure) at which this note occurs */
+ BYTE bGrid; /* Grid offset from beat at which this note occurs */
+ BYTE bVelocity; /* Note velocity */
+ BYTE bFlags; /* see DMUS_NOTEF_FLAGS */
+ BYTE bTimeRange; /* Range to randomize time. */
+ BYTE bDurRange; /* Range to randomize duration. */
+ BYTE bVelRange; /* Range to randomize velocity. */
+ BYTE bPlayModeFlags; /* Play mode */
+ BYTE bSubChordLevel; /* Which subchord level this note uses. */
+ BYTE bMidiValue; /* The MIDI note value, converted from wMusicValue */
+ char cTranspose; /* Transposition to add to midi note value after converted from wMusicValue. */
+} DMUS_NOTE_PMSG;
+
+typedef enum enumDMUS_NOTEF_FLAGS
+{
+ DMUS_NOTEF_NOTEON = 1, /* Set if this is a MIDI Note On. Otherwise, it is MIDI Note Off */
+ /* DX8 flags: */
+ DMUS_NOTEF_NOINVALIDATE = 2, /* Don't invalidate this note off. */
+ DMUS_NOTEF_NOINVALIDATE_INSCALE = 4,/* Don't invalidate if still within the scale. */
+ DMUS_NOTEF_NOINVALIDATE_INCHORD = 8,/* Don't invalidate if still within the chord. */
+ DMUS_NOTEF_REGENERATE = 0x10, /* Regenerate the note on an invalidate. */
+} DMUS_NOTEF_FLAGS;
+
+/* The DMUS_PLAYMODE_FLAGS are used to determine how to convert wMusicValue
+ into the appropriate bMidiValue.
+*/
+
+typedef enum enumDMUS_PLAYMODE_FLAGS
+{
+ DMUS_PLAYMODE_KEY_ROOT = 1, /* Transpose on top of the key root. */
+ DMUS_PLAYMODE_CHORD_ROOT = 2, /* Transpose on top of the chord root. */
+ DMUS_PLAYMODE_SCALE_INTERVALS = 4, /* Use scale intervals from scale pattern. */
+ DMUS_PLAYMODE_CHORD_INTERVALS = 8, /* Use chord intervals from chord pattern. */
+ DMUS_PLAYMODE_NONE = 16, /* No mode. Indicates the parent part's mode should be used. */
+} DMUS_PLAYMODE_FLAGS;
+
+/* The following are playback modes that can be created by combining the DMUS_PLAYMODE_FLAGS
+ in various ways:
+*/
+
+/* Fixed. wMusicValue holds final MIDI note value. This is used for drums, sound effects, and sequenced
+ notes that should not be transposed by the chord or scale.
+*/
+#define DMUS_PLAYMODE_FIXED 0
+/* In fixed to key, the musicvalue is again a fixed MIDI value, but it
+ is transposed on top of the key root.
+*/
+#define DMUS_PLAYMODE_FIXEDTOKEY DMUS_PLAYMODE_KEY_ROOT
+/* In fixed to chord, the musicvalue is also a fixed MIDI value, but it
+ is transposed on top of the chord root.
+*/
+#define DMUS_PLAYMODE_FIXEDTOCHORD DMUS_PLAYMODE_CHORD_ROOT
+/* In Pedalpoint, the key root is used and the notes only track the intervals in
+ the scale. The chord root and intervals are completely ignored. This is useful
+ for melodic lines that play relative to the key root.
+*/
+#define DMUS_PLAYMODE_PEDALPOINT (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS)
+/* In the Melodic mode, the chord root is used but the notes only track the intervals in
+ the scale. The key root and chord intervals are completely ignored. This is useful
+ for melodic lines that play relative to the chord root.
+*/
+#define DMUS_PLAYMODE_MELODIC (DMUS_PLAYMODE_CHORD_ROOT | DMUS_PLAYMODE_SCALE_INTERVALS)
+/* Normal chord mode is the prevalent playback mode.
+ The notes track the intervals in the chord, which is based on the chord root.
+ If there is a scale component to the MusicValue, the additional intervals
+ are pulled from the scale and added.
+ If the chord does not have an interval to match the chord component of
+ the MusicValue, the note is silent.
+*/
+#define DMUS_PLAYMODE_NORMALCHORD (DMUS_PLAYMODE_CHORD_ROOT | DMUS_PLAYMODE_CHORD_INTERVALS)
+/* If it is desirable to play a note that is above the top of the chord, the
+ always play mode (known as "purpleized" in a former life) finds a position
+ for the note by using intervals from the scale. Essentially, this mode is
+ a combination of the Normal and Melodic playback modes, where a failure
+ in Normal causes a second try in Melodic mode.
+*/
+#define DMUS_PLAYMODE_ALWAYSPLAY (DMUS_PLAYMODE_MELODIC | DMUS_PLAYMODE_NORMALCHORD)
+
+/* These playmodes are new for dx8. */
+/* In PedalpointChord, the key root is used and the notes only track the intervals in
+ the chord. The chord root and scale intervals are completely ignored. This is useful
+ for chordal lines that play relative to the key root.
+*/
+#define DMUS_PLAYMODE_PEDALPOINTCHORD (DMUS_PLAYMODE_KEY_ROOT | DMUS_PLAYMODE_CHORD_INTERVALS)
+
+/* For completeness, here's a mode that tries for pedalpointchord, but if it fails
+ uses scale intervals
+*/
+#define DMUS_PLAYMODE_PEDALPOINTALWAYS (DMUS_PLAYMODE_PEDALPOINT | DMUS_PLAYMODE_PEDALPOINTCHORD)
+
+
+/* Legacy names for modes... */
+#define DMUS_PLAYMODE_PURPLEIZED DMUS_PLAYMODE_ALWAYSPLAY
+#define DMUS_PLAYMODE_SCALE_ROOT DMUS_PLAYMODE_KEY_ROOT
+#define DMUS_PLAYMODE_FIXEDTOSCALE DMUS_PLAYMODE_FIXEDTOKEY
+
+
+/* DMUS_MIDI_PMSG */
+typedef struct _DMUS_MIDI_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ BYTE bStatus;
+ BYTE bByte1;
+ BYTE bByte2;
+ BYTE bPad[1];
+} DMUS_MIDI_PMSG;
+
+/* DMUS_PATCH_PMSG */
+typedef struct _DMUS_PATCH_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ BYTE byInstrument;
+ BYTE byMSB;
+ BYTE byLSB;
+ BYTE byPad[1];
+} DMUS_PATCH_PMSG;
+
+/* DMUS_TRANSPOSE_PMSG */
+typedef struct _DMUS_TRANSPOSE_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ short nTranspose;
+ /* Following exists only under DX8 and on (check dwFlags for DMUS_PMSGF_DX8) */
+ WORD wMergeIndex; /* Allows multiple parameters to be merged (pitchbend, volume, and expression.)*/
+} DMUS_TRANSPOSE_PMSG;
+
+/* DMUS_CHANNEL_PRIORITY_PMSG */
+typedef struct _DMUS_CHANNEL_PRIORITY_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ DWORD dwChannelPriority;
+} DMUS_CHANNEL_PRIORITY_PMSG;
+
+/* DMUS_TEMPO_PMSG */
+typedef struct _DMUS_TEMPO_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ double dblTempo; /* the tempo */
+} DMUS_TEMPO_PMSG;
+
+#define DMUS_TEMPO_MAX 1000
+#define DMUS_TEMPO_MIN 1
+
+#define DMUS_MASTERTEMPO_MAX 100.0f
+#define DMUS_MASTERTEMPO_MIN 0.01f
+
+/* DMUS_SYSEX_PMSG */
+typedef struct _DMUS_SYSEX_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ DWORD dwLen; /* length of the data */
+ BYTE abData[1]; /* array of data, length equal to dwLen */
+} DMUS_SYSEX_PMSG;
+
+/* DMUS_CURVE_PMSG */
+typedef struct _DMUS_CURVE_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ MUSIC_TIME mtDuration; /* how long this curve lasts */
+ MUSIC_TIME mtOriginalStart; /* must be set to either zero when this PMSG is created or to the original mtTime of the curve */
+ MUSIC_TIME mtResetDuration; /* how long after the curve is finished to allow a flush or
+ invalidation to reset to the reset value, nResetValue */
+ short nStartValue; /* curve's start value */
+ short nEndValue; /* curve's end value */
+ short nResetValue; /* curve's reset value, set when a flush or invalidation
+ occurs within mtDuration + mtResetDuration */
+ WORD wMeasure; /* Measure in which this curve occurs */
+ short nOffset; /* Offset from grid at which this curve occurs */
+ BYTE bBeat; /* Beat (in measure) at which this curve occurs */
+ BYTE bGrid; /* Grid offset from beat at which this curve occurs */
+ BYTE bType; /* type of curve */
+ BYTE bCurveShape; /* shape of curve */
+ BYTE bCCData; /* CC# if this is a control change type */
+ BYTE bFlags; /* Curve reset and start from current value flags. */
+ /* Following exists only under DX8 and on (check dwFlags for DMUS_PMSGF_DX8) */
+ WORD wParamType; /* RPN or NRPN parameter number. */
+ WORD wMergeIndex; /* Allows multiple parameters to be merged (pitchbend, volume, and expression.)*/
+} DMUS_CURVE_PMSG;
+
+typedef enum enumDMUS_CURVE_FLAGS
+{
+ DMUS_CURVE_RESET = 1, /* When set, the nResetValue must be sent when the
+ time is reached or an invalidate occurs because
+ of a transition. If not set, the curve stays
+ permanently stuck at the new value. */
+ DMUS_CURVE_START_FROM_CURRENT = 2/* Ignore Start, start the curve at the current value.
+ This only works for volume, expression, and pitchbend. */
+} DMUS_CURVE_FLAGS;
+
+
+#define DMUS_CURVE_RESET 1
+
+/* Curve shapes */
+enum
+{
+ DMUS_CURVES_LINEAR = 0,
+ DMUS_CURVES_INSTANT = 1,
+ DMUS_CURVES_EXP = 2,
+ DMUS_CURVES_LOG = 3,
+ DMUS_CURVES_SINE = 4
+};
+/* curve types */
+#define DMUS_CURVET_PBCURVE 0x03 /* Pitch bend curve. */
+#define DMUS_CURVET_CCCURVE 0x04 /* Control change curve. */
+#define DMUS_CURVET_MATCURVE 0x05 /* Mono aftertouch curve. */
+#define DMUS_CURVET_PATCURVE 0x06 /* Poly aftertouch curve. */
+#define DMUS_CURVET_RPNCURVE 0x07 /* RPN curve with curve type in wParamType. */
+#define DMUS_CURVET_NRPNCURVE 0x08 /* NRPN curve with curve type in wParamType. */
+
+/* DMUS_TIMESIG_PMSG */
+typedef struct _DMUS_TIMESIG_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ /* Time signatures define how many beats per measure, which note receives */
+ /* the beat, and the grid resolution. */
+ BYTE bBeatsPerMeasure; /* beats per measure (top of time sig) */
+ BYTE bBeat; /* what note receives the beat (bottom of time sig.) */
+ /* we can assume that 0 means 256th note */
+ WORD wGridsPerBeat; /* grids per beat */
+} DMUS_TIMESIG_PMSG;
+
+
+
+/* notification type values */
+/* The following correspond to GUID_NOTIFICATION_SEGMENT */
+#define DMUS_NOTIFICATION_SEGSTART 0
+#define DMUS_NOTIFICATION_SEGEND 1
+#define DMUS_NOTIFICATION_SEGALMOSTEND 2
+#define DMUS_NOTIFICATION_SEGLOOP 3
+#define DMUS_NOTIFICATION_SEGABORT 4
+/* The following correspond to GUID_NOTIFICATION_PERFORMANCE */
+#define DMUS_NOTIFICATION_MUSICSTARTED 0
+#define DMUS_NOTIFICATION_MUSICSTOPPED 1
+#define DMUS_NOTIFICATION_MUSICALMOSTEND 2
+/* The following corresponds to GUID_NOTIFICATION_MEASUREANDBEAT */
+#define DMUS_NOTIFICATION_MEASUREBEAT 0
+/* The following corresponds to GUID_NOTIFICATION_CHORD */
+#define DMUS_NOTIFICATION_CHORD 0
+/* The following correspond to GUID_NOTIFICATION_COMMAND */
+#define DMUS_NOTIFICATION_GROOVE 0
+#define DMUS_NOTIFICATION_EMBELLISHMENT 1
+/* The following corresponds to GUID_NOTIFICATION_RECOMPOSE */
+#define DMUS_NOTIFICATION_RECOMPOSE 0
+
+/* DMUS_NOTIFICATION_PMSG */
+typedef struct _DMUS_NOTIFICATION_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ GUID guidNotificationType;
+ DWORD dwNotificationOption;
+ DWORD dwField1;
+ DWORD dwField2;
+} DMUS_NOTIFICATION_PMSG;
+
+/* DMUS_WAVE_PMSG */
+typedef struct _DMUS_WAVE_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ REFERENCE_TIME rtStartOffset; /* How far into the wave to start, in reference time units only. */
+ REFERENCE_TIME rtDuration; /* Duration of the wave, in either reference time or music time. */
+ long lOffset; /* Offset from actual time to logical time, in music or ref time. */
+ long lVolume; /* Initial volume, in 100ths of a dB. */
+ long lPitch; /* Initial pitch, in 100ths of a semitone. */
+ BYTE bFlags; /* Flags, including DMUS_WAVEF_OFF... */
+} DMUS_WAVE_PMSG;
+
+#define DMUS_WAVEF_OFF 1 /* If wave is playing and this is the off message. */
+#define DMUS_WAVEF_STREAMING 2 /* If wave is streaming. */
+#define DMUS_WAVEF_NOINVALIDATE 4 /* Don't invalidate this wave. */
+#define DMUS_WAVEF_NOPREROLL 8 /* Don't preroll any wave data. */
+#define DMUS_WAVEF_IGNORELOOPS 0x20 /* Ignore segment looping. */
+
+/* DMUS_LYRIC_PMSG */
+typedef struct _DMUS_LYRIC_PMSG
+{
+ /* begin DMUS_PMSG_PART */
+ DMUS_PMSG_PART
+ /* end DMUS_PMSG_PART */
+
+ WCHAR wszString[1]; /* null-terminated Unicode lyric string (structure is actually larger than size 1) */
+} DMUS_LYRIC_PMSG;
+
+#define DMUS_MAX_NAME 64 /* Maximum object name length. */
+#define DMUS_MAX_CATEGORY 64 /* Maximum object category name length. */
+#define DMUS_MAX_FILENAME MAX_PATH
+
+typedef struct _DMUS_VERSION {
+ DWORD dwVersionMS;
+ DWORD dwVersionLS;
+}DMUS_VERSION, FAR *LPDMUS_VERSION;
+
+/* Time Signature structure, used by IDirectMusicStyle */
+/* Also used as a parameter for GetParam() and SetParam */
+typedef struct _DMUS_TIMESIGNATURE
+{
+ MUSIC_TIME mtTime;
+ BYTE bBeatsPerMeasure; /* beats per measure (top of time sig) */
+ BYTE bBeat; /* what note receives the beat (bottom of time sig.) */
+ /* we can assume that 0 means 256th note */
+ WORD wGridsPerBeat; /* grids per beat */
+} DMUS_TIMESIGNATURE;
+
+typedef struct _DMUS_VALID_START_PARAM
+{
+ MUSIC_TIME mtTime; /* Time of the first legal start
+ point after (or including) the requested time.
+ This is a returned value.
+ Time format is the relative offset from requested time. */
+} DMUS_VALID_START_PARAM;
+
+typedef struct _DMUS_PLAY_MARKER_PARAM
+{
+ MUSIC_TIME mtTime; /* Time of the first legal segment play
+ marker before (or including) the requested time.
+ This is a returned value.
+ Time format is the relative offset from requested time. */
+} DMUS_PLAY_MARKER_PARAM;
+
+/* The DMUSOBJECTDESC structure is used to communicate everything you could */
+/* possibly use to describe a DirectMusic object. */
+
+typedef struct _DMUS_OBJECTDESC
+{
+ DWORD dwSize; /* Size of this structure. */
+ DWORD dwValidData; /* Flags indicating which fields below are valid. */
+ GUID guidObject; /* Unique ID for this object. */
+ GUID guidClass; /* GUID for the class of object. */
+ FILETIME ftDate; /* Last edited date of object. */
+ DMUS_VERSION vVersion; /* Version. */
+ WCHAR wszName[DMUS_MAX_NAME]; /* Name of object. */
+ WCHAR wszCategory[DMUS_MAX_CATEGORY]; /* Category for object (optional). */
+ WCHAR wszFileName[DMUS_MAX_FILENAME]; /* File path. */
+ LONGLONG llMemLength; /* Size of Memory data. */
+ LPBYTE pbMemData; /* Memory pointer for data. */
+ IStream * pStream; /* Stream with data. */
+} DMUS_OBJECTDESC;
+
+typedef DMUS_OBJECTDESC *LPDMUS_OBJECTDESC;
+
+/* Flags for dwValidData. When set, a flag indicates that the */
+/* corresponding field in DMUSOBJECTDESC holds valid data. */
+
+#define DMUS_OBJ_OBJECT (1 << 0) /* Object GUID is valid. */
+#define DMUS_OBJ_CLASS (1 << 1) /* Class GUID is valid. */
+#define DMUS_OBJ_NAME (1 << 2) /* Name is valid. */
+#define DMUS_OBJ_CATEGORY (1 << 3) /* Category is valid. */
+#define DMUS_OBJ_FILENAME (1 << 4) /* File path is valid. */
+#define DMUS_OBJ_FULLPATH (1 << 5) /* Path is full path. */
+#define DMUS_OBJ_URL (1 << 6) /* Path is URL. */
+#define DMUS_OBJ_VERSION (1 << 7) /* Version is valid. */
+#define DMUS_OBJ_DATE (1 << 8) /* Date is valid. */
+#define DMUS_OBJ_LOADED (1 << 9) /* Object is currently loaded in memory. */
+#define DMUS_OBJ_MEMORY (1 << 10) /* Object is pointed to by pbMemData. */
+#define DMUS_OBJ_STREAM (1 << 11) /* Object is stored in pStream. */
+
+/* The DMUS_SCRIPT_ERRORINFO structure describes an error that occurred in a script.
+ It is returned by methods in IDirectMusicScript. */
+typedef struct _DMUS_SCRIPT_ERRORINFO
+{
+ DWORD dwSize; /* Size of this structure. */
+ HRESULT hr;
+ ULONG ulLineNumber;
+ LONG ichCharPosition;
+ WCHAR wszSourceFile[DMUS_MAX_FILENAME];
+ WCHAR wszSourceComponent[DMUS_MAX_FILENAME];
+ WCHAR wszDescription[DMUS_MAX_FILENAME];
+ WCHAR wszSourceLineText[DMUS_MAX_FILENAME];
+} DMUS_SCRIPT_ERRORINFO;
+
+/* Track configuration flags, used with IDirectMusicSegment8::SetTrackConfig() */
+
+#define DMUS_TRACKCONFIG_OVERRIDE_ALL 1 /* This track should get parameters from this segment before controlling and primary tracks. */
+#define DMUS_TRACKCONFIG_OVERRIDE_PRIMARY 2 /* This track should get parameters from this segment before the primary segment tracks. */
+#define DMUS_TRACKCONFIG_FALLBACK 4 /* This track should get parameters from this segment if the primary and controlling segments don't succeed. */
+#define DMUS_TRACKCONFIG_CONTROL_ENABLED 8 /* GetParam() enabled for this track. */
+#define DMUS_TRACKCONFIG_PLAY_ENABLED 0x10 /* Play() enabled for this track. */
+#define DMUS_TRACKCONFIG_NOTIFICATION_ENABLED 0x20 /* Notifications enabled for this track. */
+#define DMUS_TRACKCONFIG_PLAY_CLOCKTIME 0x40 /* This track plays in clock time, not music time. */
+#define DMUS_TRACKCONFIG_PLAY_COMPOSE 0x80 /* This track should regenerate data each time it starts playing. */
+#define DMUS_TRACKCONFIG_LOOP_COMPOSE 0x100 /* This track should regenerate data each time it repeats. */
+#define DMUS_TRACKCONFIG_COMPOSING 0x200 /* This track is used to compose other tracks. */
+#define DMUS_TRACKCONFIG_CONTROL_PLAY 0x10000 /* This track, when played in a controlling segment, overrides playback of primary segment tracks. */
+#define DMUS_TRACKCONFIG_CONTROL_NOTIFICATION 0x20000 /* This track, when played in a controlling segment, overrides notification of primary segment tracks. */
+/* Additional track config flags for composing transitions */
+#define DMUS_TRACKCONFIG_TRANS1_FROMSEGSTART 0x400 /* Get track info from start of From segment */
+#define DMUS_TRACKCONFIG_TRANS1_FROMSEGCURRENT 0x800 /* Get track info from current place in From segment */
+#define DMUS_TRACKCONFIG_TRANS1_TOSEGSTART 0x1000 /* Get track info from start of To segment */
+#define DMUS_TRACKCONFIG_DEFAULT (DMUS_TRACKCONFIG_CONTROL_ENABLED | DMUS_TRACKCONFIG_PLAY_ENABLED | DMUS_TRACKCONFIG_NOTIFICATION_ENABLED)
+
+/* Get/SetParam structs for commands */
+/* PARAM structures, used by GetParam() and SetParam() */
+typedef struct _DMUS_COMMAND_PARAM
+{
+ BYTE bCommand;
+ BYTE bGrooveLevel;
+ BYTE bGrooveRange;
+ BYTE bRepeatMode;
+} DMUS_COMMAND_PARAM;
+
+typedef struct _DMUS_COMMAND_PARAM_2
+{
+ MUSIC_TIME mtTime;
+ BYTE bCommand;
+ BYTE bGrooveLevel;
+ BYTE bGrooveRange;
+ BYTE bRepeatMode;
+} DMUS_COMMAND_PARAM_2;
+
+typedef IDirectMusicObject __RPC_FAR *LPDMUS_OBJECT;
+typedef IDirectMusicLoader __RPC_FAR *LPDMUS_LOADER;
+typedef IDirectMusicBand __RPC_FAR *LPDMUS_BAND;
+
+#define DMUSB_LOADED (1 << 0) /* Set when band has been loaded */
+#define DMUSB_DEFAULT (1 << 1) /* Set when band is default band for a style */
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicBand */
+#undef INTERFACE
+#define INTERFACE IDirectMusicBand
+DECLARE_INTERFACE_(IDirectMusicBand, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicBand */
+ STDMETHOD(CreateSegment) (THIS_ IDirectMusicSegment** ppSegment) PURE;
+ STDMETHOD(Download) (THIS_ IDirectMusicPerformance* pPerformance) PURE;
+ STDMETHOD(Unload) (THIS_ IDirectMusicPerformance* pPerformance) PURE;
+};
+
+typedef IDirectMusicBand IDirectMusicBand8;
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicObject */
+#undef INTERFACE
+#define INTERFACE IDirectMusicObject
+DECLARE_INTERFACE_(IDirectMusicObject, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicObject */
+ STDMETHOD(GetDescriptor) (THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+ STDMETHOD(SetDescriptor) (THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+ STDMETHOD(ParseDescriptor) (THIS_ LPSTREAM pStream,
+ LPDMUS_OBJECTDESC pDesc) PURE;
+};
+
+typedef IDirectMusicObject IDirectMusicObject8;
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicLoader */
+#undef INTERFACE
+#define INTERFACE IDirectMusicLoader
+DECLARE_INTERFACE_(IDirectMusicLoader, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicLoader */
+ STDMETHOD(GetObject) (THIS_ LPDMUS_OBJECTDESC pDesc,
+ REFIID riid,
+ LPVOID FAR *ppv) PURE;
+ STDMETHOD(SetObject) (THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+ STDMETHOD(SetSearchDirectory) (THIS_ REFGUID rguidClass,
+ WCHAR *pwzPath,
+ BOOL fClear) PURE;
+ STDMETHOD(ScanDirectory) (THIS_ REFGUID rguidClass,
+ WCHAR *pwzFileExtension,
+ WCHAR *pwzScanFileName) PURE;
+ STDMETHOD(CacheObject) (THIS_ IDirectMusicObject * pObject) PURE;
+ STDMETHOD(ReleaseObject) (THIS_ IDirectMusicObject * pObject) PURE;
+ STDMETHOD(ClearCache) (THIS_ REFGUID rguidClass) PURE;
+ STDMETHOD(EnableCache) (THIS_ REFGUID rguidClass,
+ BOOL fEnable) PURE;
+ STDMETHOD(EnumObject) (THIS_ REFGUID rguidClass,
+ DWORD dwIndex,
+ LPDMUS_OBJECTDESC pDesc) PURE;
+};
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicLoader8 */
+#undef INTERFACE
+#define INTERFACE IDirectMusicLoader8
+DECLARE_INTERFACE_(IDirectMusicLoader8, IDirectMusicLoader)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicLoader */
+ STDMETHOD(GetObject) (THIS_ LPDMUS_OBJECTDESC pDesc,
+ REFIID riid,
+ LPVOID FAR *ppv) PURE;
+ STDMETHOD(SetObject) (THIS_ LPDMUS_OBJECTDESC pDesc) PURE;
+ STDMETHOD(SetSearchDirectory) (THIS_ REFGUID rguidClass,
+ WCHAR *pwzPath,
+ BOOL fClear) PURE;
+ STDMETHOD(ScanDirectory) (THIS_ REFGUID rguidClass,
+ WCHAR *pwzFileExtension,
+ WCHAR *pwzScanFileName) PURE;
+ STDMETHOD(CacheObject) (THIS_ IDirectMusicObject * pObject) PURE;
+ STDMETHOD(ReleaseObject) (THIS_ IDirectMusicObject * pObject) PURE;
+ STDMETHOD(ClearCache) (THIS_ REFGUID rguidClass) PURE;
+ STDMETHOD(EnableCache) (THIS_ REFGUID rguidClass,
+ BOOL fEnable) PURE;
+ STDMETHOD(EnumObject) (THIS_ REFGUID rguidClass,
+ DWORD dwIndex,
+ LPDMUS_OBJECTDESC pDesc) PURE;
+
+ /* IDirectMusicLoader8 */
+ STDMETHOD_(void, CollectGarbage) (THIS) PURE;
+ STDMETHOD(ReleaseObjectByUnknown) (THIS_ IUnknown *pObject) PURE;
+ STDMETHOD(LoadObjectFromFile) (THIS_ REFGUID rguidClassID,
+ REFIID iidInterfaceID,
+ WCHAR *pwzFilePath,
+ void ** ppObject) PURE;
+};
+
+/* Stream object supports IDirectMusicGetLoader interface to access loader while file parsing. */
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicGetLoader
+DECLARE_INTERFACE_(IDirectMusicGetLoader, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicGetLoader */
+ STDMETHOD(GetLoader) (THIS_ IDirectMusicLoader ** ppLoader) PURE;
+};
+
+typedef IDirectMusicGetLoader IDirectMusicGetLoader8;
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicSegment */
+#undef INTERFACE
+#define INTERFACE IDirectMusicSegment
+DECLARE_INTERFACE_(IDirectMusicSegment, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicSegment */
+ STDMETHOD(GetLength) (THIS_ MUSIC_TIME* pmtLength) PURE;
+ STDMETHOD(SetLength) (THIS_ MUSIC_TIME mtLength) PURE;
+ STDMETHOD(GetRepeats) (THIS_ DWORD* pdwRepeats) PURE;
+ STDMETHOD(SetRepeats) (THIS_ DWORD dwRepeats) PURE;
+ STDMETHOD(GetDefaultResolution) (THIS_ DWORD* pdwResolution) PURE;
+ STDMETHOD(SetDefaultResolution) (THIS_ DWORD dwResolution) PURE;
+ STDMETHOD(GetTrack) (THIS_ REFGUID rguidType,
+ DWORD dwGroupBits,
+ DWORD dwIndex,
+ IDirectMusicTrack** ppTrack) PURE;
+ STDMETHOD(GetTrackGroup) (THIS_ IDirectMusicTrack* pTrack,
+ DWORD* pdwGroupBits) PURE;
+ STDMETHOD(InsertTrack) (THIS_ IDirectMusicTrack* pTrack,
+ DWORD dwGroupBits) PURE;
+ STDMETHOD(RemoveTrack) (THIS_ IDirectMusicTrack* pTrack) PURE;
+ STDMETHOD(InitPlay) (THIS_ IDirectMusicSegmentState** ppSegState,
+ IDirectMusicPerformance* pPerformance,
+ DWORD dwFlags) PURE;
+ STDMETHOD(GetGraph) (THIS_ IDirectMusicGraph** ppGraph) PURE;
+ STDMETHOD(SetGraph) (THIS_ IDirectMusicGraph* pGraph) PURE;
+ STDMETHOD(AddNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(GetParam) (THIS_ REFGUID rguidType,
+ DWORD dwGroupBits,
+ DWORD dwIndex,
+ MUSIC_TIME mtTime,
+ MUSIC_TIME* pmtNext,
+ void* pParam) PURE;
+ STDMETHOD(SetParam) (THIS_ REFGUID rguidType,
+ DWORD dwGroupBits,
+ DWORD dwIndex,
+ MUSIC_TIME mtTime,
+ void* pParam) PURE;
+ STDMETHOD(Clone) (THIS_ MUSIC_TIME mtStart,
+ MUSIC_TIME mtEnd,
+ IDirectMusicSegment** ppSegment) PURE;
+ STDMETHOD(SetStartPoint) (THIS_ MUSIC_TIME mtStart) PURE;
+ STDMETHOD(GetStartPoint) (THIS_ MUSIC_TIME* pmtStart) PURE;
+ STDMETHOD(SetLoopPoints) (THIS_ MUSIC_TIME mtStart,
+ MUSIC_TIME mtEnd) PURE;
+ STDMETHOD(GetLoopPoints) (THIS_ MUSIC_TIME* pmtStart,
+ MUSIC_TIME* pmtEnd) PURE;
+ STDMETHOD(SetPChannelsUsed) (THIS_ DWORD dwNumPChannels,
+ DWORD* paPChannels) PURE;
+};
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicSegment8 */
+#undef INTERFACE
+#define INTERFACE IDirectMusicSegment8
+DECLARE_INTERFACE_(IDirectMusicSegment8, IDirectMusicSegment)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicSegment */
+ STDMETHOD(GetLength) (THIS_ MUSIC_TIME* pmtLength) PURE;
+ STDMETHOD(SetLength) (THIS_ MUSIC_TIME mtLength) PURE;
+ STDMETHOD(GetRepeats) (THIS_ DWORD* pdwRepeats) PURE;
+ STDMETHOD(SetRepeats) (THIS_ DWORD dwRepeats) PURE;
+ STDMETHOD(GetDefaultResolution) (THIS_ DWORD* pdwResolution) PURE;
+ STDMETHOD(SetDefaultResolution) (THIS_ DWORD dwResolution) PURE;
+ STDMETHOD(GetTrack) (THIS_ REFGUID rguidType,
+ DWORD dwGroupBits,
+ DWORD dwIndex,
+ IDirectMusicTrack** ppTrack) PURE;
+ STDMETHOD(GetTrackGroup) (THIS_ IDirectMusicTrack* pTrack,
+ DWORD* pdwGroupBits) PURE;
+ STDMETHOD(InsertTrack) (THIS_ IDirectMusicTrack* pTrack,
+ DWORD dwGroupBits) PURE;
+ STDMETHOD(RemoveTrack) (THIS_ IDirectMusicTrack* pTrack) PURE;
+ STDMETHOD(InitPlay) (THIS_ IDirectMusicSegmentState** ppSegState,
+ IDirectMusicPerformance* pPerformance,
+ DWORD dwFlags) PURE;
+ STDMETHOD(GetGraph) (THIS_ IDirectMusicGraph** ppGraph) PURE;
+ STDMETHOD(SetGraph) (THIS_ IDirectMusicGraph* pGraph) PURE;
+ STDMETHOD(AddNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(GetParam) (THIS_ REFGUID rguidType,
+ DWORD dwGroupBits,
+ DWORD dwIndex,
+ MUSIC_TIME mtTime,
+ MUSIC_TIME* pmtNext,
+ void* pParam) PURE;
+ STDMETHOD(SetParam) (THIS_ REFGUID rguidType,
+ DWORD dwGroupBits,
+ DWORD dwIndex,
+ MUSIC_TIME mtTime,
+ void* pParam) PURE;
+ STDMETHOD(Clone) (THIS_ MUSIC_TIME mtStart,
+ MUSIC_TIME mtEnd,
+ IDirectMusicSegment** ppSegment) PURE;
+ STDMETHOD(SetStartPoint) (THIS_ MUSIC_TIME mtStart) PURE;
+ STDMETHOD(GetStartPoint) (THIS_ MUSIC_TIME* pmtStart) PURE;
+ STDMETHOD(SetLoopPoints) (THIS_ MUSIC_TIME mtStart,
+ MUSIC_TIME mtEnd) PURE;
+ STDMETHOD(GetLoopPoints) (THIS_ MUSIC_TIME* pmtStart,
+ MUSIC_TIME* pmtEnd) PURE;
+ STDMETHOD(SetPChannelsUsed) (THIS_ DWORD dwNumPChannels,
+ DWORD* paPChannels) PURE;
+ /* IDirectMusicSegment8 */
+ STDMETHOD(SetTrackConfig) (THIS_ REFGUID rguidTrackClassID, /* Class ID of the type of track on which to set the configuration flags. */
+ DWORD dwGroupBits, /* Group bits. */
+ DWORD dwIndex, /* Nth track (or DMUS_SEG_ALLTRACKS) that matches class id and group id. */
+ DWORD dwFlagsOn, /* DMUS_TRACKCONFIG_ flags to enable. */
+ DWORD dwFlagsOff) PURE; /* DMUS_TRACKCONFIG_ flags to disable. */
+ STDMETHOD(GetAudioPathConfig) (THIS_ IUnknown ** ppAudioPathConfig) PURE;
+ STDMETHOD(Compose) (THIS_ MUSIC_TIME mtTime,
+ IDirectMusicSegment* pFromSegment,
+ IDirectMusicSegment* pToSegment,
+ IDirectMusicSegment** ppComposedSegment) PURE;
+ STDMETHOD(Download) (THIS_ IUnknown *pAudioPath) PURE;
+ STDMETHOD(Unload) (THIS_ IUnknown *pAudioPath) PURE;
+};
+
+/*/////////////////////////////////////////////////////////////////////
+// IDirectMusicSegmentState */
+#undef INTERFACE
+#define INTERFACE IDirectMusicSegmentState
+DECLARE_INTERFACE_(IDirectMusicSegmentState, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicSegmentState */
+ STDMETHOD(GetRepeats) (THIS_ DWORD* pdwRepeats) PURE;
+ STDMETHOD(GetSegment ) (THIS_ IDirectMusicSegment** ppSegment) PURE;
+ STDMETHOD(GetStartTime) (THIS_ MUSIC_TIME* pmtStart) PURE;
+ STDMETHOD(GetSeek) (THIS_ MUSIC_TIME* pmtSeek) PURE;
+ STDMETHOD(GetStartPoint) (THIS_ MUSIC_TIME* pmtStart) PURE;
+};
+
+/*/////////////////////////////////////////////////////////////////////
+// IDirectMusicSegmentState8 */
+#undef INTERFACE
+#define INTERFACE IDirectMusicSegmentState8
+DECLARE_INTERFACE_(IDirectMusicSegmentState8, IDirectMusicSegmentState)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicSegmentState */
+ STDMETHOD(GetRepeats) (THIS_ DWORD* pdwRepeats) PURE;
+ STDMETHOD(GetSegment ) (THIS_ IDirectMusicSegment** ppSegment) PURE;
+ STDMETHOD(GetStartTime) (THIS_ MUSIC_TIME* pmtStart) PURE;
+ STDMETHOD(GetSeek) (THIS_ MUSIC_TIME* pmtSeek) PURE;
+ STDMETHOD(GetStartPoint) (THIS_ MUSIC_TIME* pmtStart) PURE;
+
+ /* IDirectMusicSegmentState8 */
+ STDMETHOD(SetTrackConfig) (THIS_ REFGUID rguidTrackClassID, /* Class ID of the type of track on which to set the configuration flags. */
+ DWORD dwGroupBits, /* Group bits. */
+ DWORD dwIndex, /* Nth track (or DMUS_SEG_ALLTRACKS) that matches class id and group id. */
+ DWORD dwFlagsOn, /* DMUS_TRACKCONFIG_ flags to enable. */
+ DWORD dwFlagsOff) PURE; /* DMUS_TRACKCONFIG_ flags to disable. */
+ STDMETHOD(GetObjectInPath) (THIS_ DWORD dwPChannel, /* PChannel to search. */
+ DWORD dwStage, /* Which stage in the path. */
+ DWORD dwBuffer, /* Which buffer to address, if more than one. */
+ REFGUID guidObject, /* ClassID of object. */
+ DWORD dwIndex, /* Which object of that class. */
+ REFGUID iidInterface,/* Requested COM interface. */
+ void ** ppObject) PURE; /* Pointer to interface. */
+};
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicAudioPath */
+#undef INTERFACE
+#define INTERFACE IDirectMusicAudioPath
+DECLARE_INTERFACE_(IDirectMusicAudioPath, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicAudioPath */
+ STDMETHOD(GetObjectInPath) (THIS_ DWORD dwPChannel, /* PChannel to search. */
+ DWORD dwStage, /* Which stage in the path. */
+ DWORD dwBuffer, /* Which buffer to address, if more than one. */
+ REFGUID guidObject, /* ClassID of object. */
+ DWORD dwIndex, /* Which object of that class. */
+ REFGUID iidInterface,/* Requested COM interface. */
+ void ** ppObject) PURE; /* Pointer to interface. */
+ STDMETHOD(Activate) (THIS_ BOOL fActivate) PURE;/* True to activate, False to deactivate. */
+ STDMETHOD(SetVolume) (THIS_ long lVolume, /* Gain, in 100ths of a dB. This must be negative (0 represents full volume.) */
+ DWORD dwDuration) PURE;/* Duration of volume ramp in milliseconds. Note that 0 is more efficient. */
+ STDMETHOD(ConvertPChannel) (THIS_ DWORD dwPChannelIn, /* Pchannel of source. */
+ DWORD *pdwPChannelOut) PURE; /* Equivalent pchannel on performance. */
+};
+
+typedef IDirectMusicAudioPath IDirectMusicAudioPath8;
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicPerformance */
+#undef INTERFACE
+#define INTERFACE IDirectMusicPerformance
+DECLARE_INTERFACE_(IDirectMusicPerformance, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicPerformance */
+ STDMETHOD(Init) (THIS_ IDirectMusic** ppDirectMusic,
+ LPDIRECTSOUND pDirectSound,
+ HWND hWnd) PURE;
+ STDMETHOD(PlaySegment) (THIS_ IDirectMusicSegment* pSegment,
+ DWORD dwFlags,
+ __int64 i64StartTime,
+ IDirectMusicSegmentState** ppSegmentState) PURE;
+ STDMETHOD(Stop) (THIS_ IDirectMusicSegment* pSegment,
+ IDirectMusicSegmentState* pSegmentState,
+ MUSIC_TIME mtTime,
+ DWORD dwFlags) PURE;
+ STDMETHOD(GetSegmentState) (THIS_ IDirectMusicSegmentState** ppSegmentState,
+ MUSIC_TIME mtTime) PURE;
+ STDMETHOD(SetPrepareTime) (THIS_ DWORD dwMilliSeconds) PURE;
+ STDMETHOD(GetPrepareTime) (THIS_ DWORD* pdwMilliSeconds) PURE;
+ STDMETHOD(SetBumperLength) (THIS_ DWORD dwMilliSeconds) PURE;
+ STDMETHOD(GetBumperLength) (THIS_ DWORD* pdwMilliSeconds) PURE;
+ STDMETHOD(SendPMsg) (THIS_ DMUS_PMSG* pPMSG) PURE;
+ STDMETHOD(MusicToReferenceTime) (THIS_ MUSIC_TIME mtTime,
+ REFERENCE_TIME* prtTime) PURE;
+ STDMETHOD(ReferenceToMusicTime) (THIS_ REFERENCE_TIME rtTime,
+ MUSIC_TIME* pmtTime) PURE;
+ STDMETHOD(IsPlaying) (THIS_ IDirectMusicSegment* pSegment,
+ IDirectMusicSegmentState* pSegState) PURE;
+ STDMETHOD(GetTime) (THIS_ REFERENCE_TIME* prtNow,
+ MUSIC_TIME* pmtNow) PURE;
+ STDMETHOD(AllocPMsg) (THIS_ ULONG cb,
+ DMUS_PMSG** ppPMSG) PURE;
+ STDMETHOD(FreePMsg) (THIS_ DMUS_PMSG* pPMSG) PURE;
+ STDMETHOD(GetGraph) (THIS_ IDirectMusicGraph** ppGraph) PURE;
+ STDMETHOD(SetGraph) (THIS_ IDirectMusicGraph* pGraph) PURE;
+ STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification,
+ REFERENCE_TIME rtMinimum) PURE;
+ STDMETHOD(GetNotificationPMsg) (THIS_ DMUS_NOTIFICATION_PMSG** ppNotificationPMsg) PURE;
+ STDMETHOD(AddNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(AddPort) (THIS_ IDirectMusicPort* pPort) PURE;
+ STDMETHOD(RemovePort) (THIS_ IDirectMusicPort* pPort ) PURE;
+ STDMETHOD(AssignPChannelBlock) (THIS_ DWORD dwBlockNum,
+ IDirectMusicPort* pPort,
+ DWORD dwGroup ) PURE;
+ STDMETHOD(AssignPChannel) (THIS_ DWORD dwPChannel,
+ IDirectMusicPort* pPort,
+ DWORD dwGroup,
+ DWORD dwMChannel ) PURE;
+ STDMETHOD(PChannelInfo) (THIS_ DWORD dwPChannel,
+ IDirectMusicPort** ppPort,
+ DWORD* pdwGroup,
+ DWORD* pdwMChannel ) PURE;
+ STDMETHOD(DownloadInstrument) (THIS_ IDirectMusicInstrument* pInst,
+ DWORD dwPChannel,
+ IDirectMusicDownloadedInstrument** ppDownInst,
+ DMUS_NOTERANGE* pNoteRanges,
+ DWORD dwNumNoteRanges,
+ IDirectMusicPort** ppPort,
+ DWORD* pdwGroup,
+ DWORD* pdwMChannel ) PURE;
+ STDMETHOD(Invalidate) (THIS_ MUSIC_TIME mtTime,
+ DWORD dwFlags) PURE;
+ STDMETHOD(GetParam) (THIS_ REFGUID rguidType,
+ DWORD dwGroupBits,
+ DWORD dwIndex,
+ MUSIC_TIME mtTime,
+ MUSIC_TIME* pmtNext,
+ void* pParam) PURE;
+ STDMETHOD(SetParam) (THIS_ REFGUID rguidType,
+ DWORD dwGroupBits,
+ DWORD dwIndex,
+ MUSIC_TIME mtTime,
+ void* pParam) PURE;
+ STDMETHOD(GetGlobalParam) (THIS_ REFGUID rguidType,
+ void* pParam,
+ DWORD dwSize) PURE;
+ STDMETHOD(SetGlobalParam) (THIS_ REFGUID rguidType,
+ void* pParam,
+ DWORD dwSize) PURE;
+ STDMETHOD(GetLatencyTime) (THIS_ REFERENCE_TIME* prtTime) PURE;
+ STDMETHOD(GetQueueTime) (THIS_ REFERENCE_TIME* prtTime) PURE;
+ STDMETHOD(AdjustTime) (THIS_ REFERENCE_TIME rtAmount) PURE;
+ STDMETHOD(CloseDown) (THIS) PURE;
+ STDMETHOD(GetResolvedTime) (THIS_ REFERENCE_TIME rtTime,
+ REFERENCE_TIME* prtResolved,
+ DWORD dwTimeResolveFlags) PURE;
+ STDMETHOD(MIDIToMusic) (THIS_ BYTE bMIDIValue,
+ DMUS_CHORD_KEY* pChord,
+ BYTE bPlayMode,
+ BYTE bChordLevel,
+ WORD *pwMusicValue) PURE;
+ STDMETHOD(MusicToMIDI) (THIS_ WORD wMusicValue,
+ DMUS_CHORD_KEY* pChord,
+ BYTE bPlayMode,
+ BYTE bChordLevel,
+ BYTE *pbMIDIValue) PURE;
+ STDMETHOD(TimeToRhythm) (THIS_ MUSIC_TIME mtTime,
+ DMUS_TIMESIGNATURE *pTimeSig,
+ WORD *pwMeasure,
+ BYTE *pbBeat,
+ BYTE *pbGrid,
+ short *pnOffset) PURE;
+ STDMETHOD(RhythmToTime) (THIS_ WORD wMeasure,
+ BYTE bBeat,
+ BYTE bGrid,
+ short nOffset,
+ DMUS_TIMESIGNATURE *pTimeSig,
+ MUSIC_TIME *pmtTime) PURE;
+};
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicPerformance8 */
+#undef INTERFACE
+#define INTERFACE IDirectMusicPerformance8
+DECLARE_INTERFACE_(IDirectMusicPerformance8, IDirectMusicPerformance)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicPerformance */
+ STDMETHOD(Init) (THIS_ IDirectMusic** ppDirectMusic,
+ LPDIRECTSOUND pDirectSound,
+ HWND hWnd) PURE;
+ STDMETHOD(PlaySegment) (THIS_ IDirectMusicSegment* pSegment,
+ DWORD dwFlags,
+ __int64 i64StartTime,
+ IDirectMusicSegmentState** ppSegmentState) PURE;
+ STDMETHOD(Stop) (THIS_ IDirectMusicSegment* pSegment,
+ IDirectMusicSegmentState* pSegmentState,
+ MUSIC_TIME mtTime,
+ DWORD dwFlags) PURE;
+ STDMETHOD(GetSegmentState) (THIS_ IDirectMusicSegmentState** ppSegmentState,
+ MUSIC_TIME mtTime) PURE;
+ STDMETHOD(SetPrepareTime) (THIS_ DWORD dwMilliSeconds) PURE;
+ STDMETHOD(GetPrepareTime) (THIS_ DWORD* pdwMilliSeconds) PURE;
+ STDMETHOD(SetBumperLength) (THIS_ DWORD dwMilliSeconds) PURE;
+ STDMETHOD(GetBumperLength) (THIS_ DWORD* pdwMilliSeconds) PURE;
+ STDMETHOD(SendPMsg) (THIS_ DMUS_PMSG* pPMSG) PURE;
+ STDMETHOD(MusicToReferenceTime) (THIS_ MUSIC_TIME mtTime,
+ REFERENCE_TIME* prtTime) PURE;
+ STDMETHOD(ReferenceToMusicTime) (THIS_ REFERENCE_TIME rtTime,
+ MUSIC_TIME* pmtTime) PURE;
+ STDMETHOD(IsPlaying) (THIS_ IDirectMusicSegment* pSegment,
+ IDirectMusicSegmentState* pSegState) PURE;
+ STDMETHOD(GetTime) (THIS_ REFERENCE_TIME* prtNow,
+ MUSIC_TIME* pmtNow) PURE;
+ STDMETHOD(AllocPMsg) (THIS_ ULONG cb,
+ DMUS_PMSG** ppPMSG) PURE;
+ STDMETHOD(FreePMsg) (THIS_ DMUS_PMSG* pPMSG) PURE;
+ STDMETHOD(GetGraph) (THIS_ IDirectMusicGraph** ppGraph) PURE;
+ STDMETHOD(SetGraph) (THIS_ IDirectMusicGraph* pGraph) PURE;
+ STDMETHOD(SetNotificationHandle)(THIS_ HANDLE hNotification,
+ REFERENCE_TIME rtMinimum) PURE;
+ STDMETHOD(GetNotificationPMsg) (THIS_ DMUS_NOTIFICATION_PMSG** ppNotificationPMsg) PURE;
+ STDMETHOD(AddNotificationType) (THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(RemoveNotificationType)(THIS_ REFGUID rguidNotificationType) PURE;
+ STDMETHOD(AddPort) (THIS_ IDirectMusicPort* pPort) PURE;
+ STDMETHOD(RemovePort) (THIS_ IDirectMusicPort* pPort ) PURE;
+ STDMETHOD(AssignPChannelBlock) (THIS_ DWORD dwBlockNum,
+ IDirectMusicPort* pPort,
+ DWORD dwGroup ) PURE;
+ STDMETHOD(AssignPChannel) (THIS_ DWORD dwPChannel,
+ IDirectMusicPort* pPort,
+ DWORD dwGroup,
+ DWORD dwMChannel ) PURE;
+ STDMETHOD(PChannelInfo) (THIS_ DWORD dwPChannel,
+ IDirectMusicPort** ppPort,
+ DWORD* pdwGroup,
+ DWORD* pdwMChannel ) PURE;
+ STDMETHOD(DownloadInstrument) (THIS_ IDirectMusicInstrument* pInst,
+ DWORD dwPChannel,
+ IDirectMusicDownloadedInstrument** ppDownInst,
+ DMUS_NOTERANGE* pNoteRanges,
+ DWORD dwNumNoteRanges,
+ IDirectMusicPort** ppPort,
+ DWORD* pdwGroup,
+ DWORD* pdwMChannel ) PURE;
+ STDMETHOD(Invalidate) (THIS_ MUSIC_TIME mtTime,
+ DWORD dwFlags) PURE;
+ STDMETHOD(GetParam) (THIS_ REFGUID rguidType,
+ DWORD dwGroupBits,
+ DWORD dwIndex,
+ MUSIC_TIME mtTime,
+ MUSIC_TIME* pmtNext,
+ void* pParam) PURE;
+ STDMETHOD(SetParam) (THIS_ REFGUID rguidType,
+ DWORD dwGroupBits,
+ DWORD dwIndex,
+ MUSIC_TIME mtTime,
+ void* pParam) PURE;
+ STDMETHOD(GetGlobalParam) (THIS_ REFGUID rguidType,
+ void* pParam,
+ DWORD dwSize) PURE;
+ STDMETHOD(SetGlobalParam) (THIS_ REFGUID rguidType,
+ void* pParam,
+ DWORD dwSize) PURE;
+ STDMETHOD(GetLatencyTime) (THIS_ REFERENCE_TIME* prtTime) PURE;
+ STDMETHOD(GetQueueTime) (THIS_ REFERENCE_TIME* prtTime) PURE;
+ STDMETHOD(AdjustTime) (THIS_ REFERENCE_TIME rtAmount) PURE;
+ STDMETHOD(CloseDown) (THIS) PURE;
+ STDMETHOD(GetResolvedTime) (THIS_ REFERENCE_TIME rtTime,
+ REFERENCE_TIME* prtResolved,
+ DWORD dwTimeResolveFlags) PURE;
+ STDMETHOD(MIDIToMusic) (THIS_ BYTE bMIDIValue,
+ DMUS_CHORD_KEY* pChord,
+ BYTE bPlayMode,
+ BYTE bChordLevel,
+ WORD *pwMusicValue) PURE;
+ STDMETHOD(MusicToMIDI) (THIS_ WORD wMusicValue,
+ DMUS_CHORD_KEY* pChord,
+ BYTE bPlayMode,
+ BYTE bChordLevel,
+ BYTE *pbMIDIValue) PURE;
+ STDMETHOD(TimeToRhythm) (THIS_ MUSIC_TIME mtTime,
+ DMUS_TIMESIGNATURE *pTimeSig,
+ WORD *pwMeasure,
+ BYTE *pbBeat,
+ BYTE *pbGrid,
+ short *pnOffset) PURE;
+ STDMETHOD(RhythmToTime) (THIS_ WORD wMeasure,
+ BYTE bBeat,
+ BYTE bGrid,
+ short nOffset,
+ DMUS_TIMESIGNATURE *pTimeSig,
+ MUSIC_TIME *pmtTime) PURE;
+ /* IDirectMusicPerformance8 */
+ STDMETHOD(InitAudio) (THIS_ IDirectMusic** ppDirectMusic, /* Optional DirectMusic pointer. */
+ IDirectSound** ppDirectSound, /* Optional DirectSound pointer. */
+ HWND hWnd, /* HWND for DirectSound. */
+ DWORD dwDefaultPathType, /* Requested default audio path type, also optional. */
+ DWORD dwPChannelCount, /* Number of PChannels, if default audio path to be created. */
+ DWORD dwFlags, /* DMUS_AUDIOF flags, if no pParams structure. */
+ DMUS_AUDIOPARAMS *pParams) PURE; /* Optional initialization structure, defining required voices, buffers, etc. */
+ STDMETHOD(PlaySegmentEx) (THIS_ IUnknown* pSource, /* Segment to play. */
+ WCHAR *pwzSegmentName, /* Not supported in DX8. */
+ IUnknown* pTransition, /* Optional template segment to compose transition with. */
+ DWORD dwFlags, /* DMUS_SEGF_ flags. */
+ __int64 i64StartTime, /* Time to start playback. */
+ IDirectMusicSegmentState** ppSegmentState, /* Returned Segment State. */
+ IUnknown *pFrom, /* Optional segmentstate or audiopath to replace. */
+ IUnknown *pAudioPath) PURE; /* Optional audioPath to play on. */
+ STDMETHOD(StopEx) (THIS_ IUnknown *pObjectToStop, /* Segstate, AudioPath, or Segment. */
+ __int64 i64StopTime,
+ DWORD dwFlags) PURE;
+ STDMETHOD(ClonePMsg) (THIS_ DMUS_PMSG* pSourcePMSG,
+ DMUS_PMSG** ppCopyPMSG) PURE;
+ STDMETHOD(CreateAudioPath) (THIS_ IUnknown *pSourceConfig, /* Source configuration, from AudioPathConfig file. */
+ BOOL fActivate, /* TRUE to activate on creation. */
+ IDirectMusicAudioPath **ppNewPath) PURE; /* Returns created audiopath. */
+ STDMETHOD(CreateStandardAudioPath)(THIS_ DWORD dwType, /* Type of path to create. */
+ DWORD dwPChannelCount, /* How many PChannels to allocate for it. */
+ BOOL fActivate, /* TRUE to activate on creation. */
+ IDirectMusicAudioPath **ppNewPath) PURE; /* Returns created audiopath. */
+ STDMETHOD(SetDefaultAudioPath) (THIS_ IDirectMusicAudioPath *pAudioPath) PURE;
+ STDMETHOD(GetDefaultAudioPath) (THIS_ IDirectMusicAudioPath **ppAudioPath) PURE;
+ STDMETHOD(GetParamEx) (THIS_ REFGUID rguidType, /* GetParam command ID. */
+ DWORD dwTrackID, /* Virtual track ID of caller. */
+ DWORD dwGroupBits, /* Group bits of caller. */
+ DWORD dwIndex, /* Index to Nth parameter. */
+ MUSIC_TIME mtTime, /* Time of requested parameter. */
+ MUSIC_TIME* pmtNext, /* Returned delta to next parameter. */
+ void* pParam) PURE; /* Data structure to fill with parameter. */
+};
+
+
+
+/*////////////////////////////////////////////////////////////////////
+// IDirectMusicGraph */
+#undef INTERFACE
+#define INTERFACE IDirectMusicGraph
+DECLARE_INTERFACE_(IDirectMusicGraph, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicGraph */
+ STDMETHOD(StampPMsg) (THIS_ DMUS_PMSG* pPMSG) PURE;
+ STDMETHOD(InsertTool) (THIS_ IDirectMusicTool* pTool,
+ DWORD* pdwPChannels,
+ DWORD cPChannels,
+ LONG lIndex) PURE;
+ STDMETHOD(GetTool) (THIS_ DWORD dwIndex,
+ IDirectMusicTool** ppTool) PURE;
+ STDMETHOD(RemoveTool) (THIS_ IDirectMusicTool* pTool) PURE;
+};
+
+typedef IDirectMusicGraph IDirectMusicGraph8;
+
+
+/*/////////////////////////////////////////////////////////////////////
+// IDirectMusicStyle */
+#undef INTERFACE
+#define INTERFACE IDirectMusicStyle
+DECLARE_INTERFACE_(IDirectMusicStyle, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicStyle */
+ STDMETHOD(GetBand) (THIS_ WCHAR* pwszName,
+ IDirectMusicBand** ppBand) PURE;
+ STDMETHOD(EnumBand) (THIS_ DWORD dwIndex,
+ WCHAR *pwszName) PURE;
+ STDMETHOD(GetDefaultBand) (THIS_ IDirectMusicBand** ppBand) PURE;
+ STDMETHOD(EnumMotif) (THIS_ DWORD dwIndex,
+ WCHAR* pwszName) PURE;
+ STDMETHOD(GetMotif) (THIS_ WCHAR* pwszName,
+ IDirectMusicSegment** ppSegment) PURE;
+ STDMETHOD(GetDefaultChordMap) (THIS_ IDirectMusicChordMap** ppChordMap) PURE;
+ STDMETHOD(EnumChordMap) (THIS_ DWORD dwIndex,
+ WCHAR *pwszName) PURE;
+ STDMETHOD(GetChordMap) (THIS_ WCHAR* pwszName,
+ IDirectMusicChordMap** ppChordMap) PURE;
+ STDMETHOD(GetTimeSignature) (THIS_ DMUS_TIMESIGNATURE* pTimeSig) PURE;
+ STDMETHOD(GetEmbellishmentLength) (THIS_ DWORD dwType,
+ DWORD dwLevel,
+ DWORD* pdwMin,
+ DWORD* pdwMax) PURE;
+ STDMETHOD(GetTempo) (THIS_ double* pTempo) PURE;
+};
+
+/*/////////////////////////////////////////////////////////////////////
+// IDirectMusicStyle8 */
+#undef INTERFACE
+#define INTERFACE IDirectMusicStyle8
+DECLARE_INTERFACE_(IDirectMusicStyle8, IDirectMusicStyle)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicStyle */
+ STDMETHOD(GetBand) (THIS_ WCHAR* pwszName,
+ IDirectMusicBand** ppBand) PURE;
+ STDMETHOD(EnumBand) (THIS_ DWORD dwIndex,
+ WCHAR *pwszName) PURE;
+ STDMETHOD(GetDefaultBand) (THIS_ IDirectMusicBand** ppBand) PURE;
+ STDMETHOD(EnumMotif) (THIS_ DWORD dwIndex,
+ WCHAR* pwszName) PURE;
+ STDMETHOD(GetMotif) (THIS_ WCHAR* pwszName,
+ IDirectMusicSegment** ppSegment) PURE;
+ STDMETHOD(GetDefaultChordMap) (THIS_ IDirectMusicChordMap** ppChordMap) PURE;
+ STDMETHOD(EnumChordMap) (THIS_ DWORD dwIndex,
+ WCHAR *pwszName) PURE;
+ STDMETHOD(GetChordMap) (THIS_ WCHAR* pwszName,
+ IDirectMusicChordMap** ppChordMap) PURE;
+ STDMETHOD(GetTimeSignature) (THIS_ DMUS_TIMESIGNATURE* pTimeSig) PURE;
+ STDMETHOD(GetEmbellishmentLength) (THIS_ DWORD dwType,
+ DWORD dwLevel,
+ DWORD* pdwMin,
+ DWORD* pdwMax) PURE;
+ STDMETHOD(GetTempo) (THIS_ double* pTempo) PURE;
+
+ /* IDirectMusicStyle8 */
+ STDMETHOD(EnumPattern) (THIS_ DWORD dwIndex,
+ DWORD dwPatternType,
+ WCHAR* pwszName) PURE;
+};
+
+/*/////////////////////////////////////////////////////////////////////
+// IDirectMusicChordMap */
+#undef INTERFACE
+#define INTERFACE IDirectMusicChordMap
+DECLARE_INTERFACE_(IDirectMusicChordMap, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicChordMap */
+ STDMETHOD(GetScale) (THIS_ DWORD* pdwScale) PURE;
+};
+
+typedef IDirectMusicChordMap IDirectMusicChordMap8;
+
+/*/////////////////////////////////////////////////////////////////////
+// IDirectMusicComposer */
+#undef INTERFACE
+#define INTERFACE IDirectMusicComposer
+DECLARE_INTERFACE_(IDirectMusicComposer, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicComposer */
+ STDMETHOD(ComposeSegmentFromTemplate) (THIS_ IDirectMusicStyle* pStyle,
+ IDirectMusicSegment* pTemplate,
+ WORD wActivity,
+ IDirectMusicChordMap* pChordMap,
+ IDirectMusicSegment** ppSegment) PURE;
+ STDMETHOD(ComposeSegmentFromShape) (THIS_ IDirectMusicStyle* pStyle,
+ WORD wNumMeasures,
+ WORD wShape,
+ WORD wActivity,
+ BOOL fIntro,
+ BOOL fEnd,
+ IDirectMusicChordMap* pChordMap,
+ IDirectMusicSegment** ppSegment ) PURE;
+ STDMETHOD(ComposeTransition) (THIS_ IDirectMusicSegment* pFromSeg,
+ IDirectMusicSegment* pToSeg,
+ MUSIC_TIME mtTime,
+ WORD wCommand,
+ DWORD dwFlags,
+ IDirectMusicChordMap* pChordMap,
+ IDirectMusicSegment** ppTransSeg) PURE;
+ STDMETHOD(AutoTransition) (THIS_ IDirectMusicPerformance* pPerformance,
+ IDirectMusicSegment* pToSeg,
+ WORD wCommand,
+ DWORD dwFlags,
+ IDirectMusicChordMap* pChordMap,
+ IDirectMusicSegment** ppTransSeg,
+ IDirectMusicSegmentState** ppToSegState,
+ IDirectMusicSegmentState** ppTransSegState) PURE;
+ STDMETHOD(ComposeTemplateFromShape) (THIS_ WORD wNumMeasures,
+ WORD wShape,
+ BOOL fIntro,
+ BOOL fEnd,
+ WORD wEndLength,
+ IDirectMusicSegment** ppTemplate) PURE;
+ STDMETHOD(ChangeChordMap) (THIS_ IDirectMusicSegment* pSegment,
+ BOOL fTrackScale,
+ IDirectMusicChordMap* pChordMap) PURE;
+};
+
+typedef IDirectMusicComposer IDirectMusicComposer8;
+
+/*/////////////////////////////////////////////////////////////////////
+// IDirectMusicPatternTrack */
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicPatternTrack
+DECLARE_INTERFACE_(IDirectMusicPatternTrack, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicPatternTrack */
+ STDMETHOD(CreateSegment) (THIS_ IDirectMusicStyle* pStyle,
+ IDirectMusicSegment** ppSegment) PURE;
+ STDMETHOD(SetVariation) (THIS_ IDirectMusicSegmentState* pSegState,
+ DWORD dwVariationFlags,
+ DWORD dwPart) PURE;
+ STDMETHOD(SetPatternByName) (THIS_ IDirectMusicSegmentState* pSegState,
+ WCHAR* wszName,
+ IDirectMusicStyle* pStyle,
+ DWORD dwPatternType,
+ DWORD* pdwLength) PURE;
+};
+
+typedef IDirectMusicPatternTrack IDirectMusicPatternTrack8;
+
+/*/////////////////////////////////////////////////////////////////////
+// IDirectMusicScript */
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicScript
+DECLARE_INTERFACE_(IDirectMusicScript, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicScript */
+ STDMETHOD(Init) (THIS_ IDirectMusicPerformance *pPerformance,
+ DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(CallRoutine) (THIS_ WCHAR *pwszRoutineName,
+ DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(SetVariableVariant) (THIS_ WCHAR *pwszVariableName,
+ VARIANT varValue,
+ BOOL fSetRef,
+ DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(GetVariableVariant) (THIS_ WCHAR *pwszVariableName,
+ VARIANT *pvarValue,
+ DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(SetVariableNumber) (THIS_ WCHAR *pwszVariableName,
+ LONG lValue,
+ DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(GetVariableNumber) (THIS_ WCHAR *pwszVariableName,
+ LONG *plValue,
+ DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(SetVariableObject) (THIS_ WCHAR *pwszVariableName,
+ IUnknown *punkValue,
+ DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(GetVariableObject) (THIS_ WCHAR *pwszVariableName,
+ REFIID riid,
+ LPVOID FAR *ppv,
+ DMUS_SCRIPT_ERRORINFO *pErrorInfo) PURE;
+ STDMETHOD(EnumRoutine) (THIS_ DWORD dwIndex,
+ WCHAR *pwszName) PURE;
+ STDMETHOD(EnumVariable) (THIS_ DWORD dwIndex,
+ WCHAR *pwszName) PURE;
+};
+
+typedef IDirectMusicScript IDirectMusicScript8;
+
+/*/////////////////////////////////////////////////////////////////////
+// IDirectMusicContainer */
+
+#undef INTERFACE
+#define INTERFACE IDirectMusicContainer
+DECLARE_INTERFACE_(IDirectMusicContainer, IUnknown)
+{
+ /* IUnknown */
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID FAR *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ /* IDirectMusicContainer */
+ STDMETHOD(EnumObject) (THIS_ REFGUID rguidClass,
+ DWORD dwIndex,
+ LPDMUS_OBJECTDESC pDesc,
+ WCHAR *pwszAlias) PURE;
+};
+
+typedef IDirectMusicContainer IDirectMusicContainer8;
+
+/* CLSID's */
+DEFINE_GUID(CLSID_DirectMusicPerformance,0xd2ac2881, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicSegment,0xd2ac2882, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicSegmentState,0xd2ac2883, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicGraph,0xd2ac2884, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicStyle,0xd2ac288a, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicChordMap,0xd2ac288f, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicComposer,0xd2ac2890, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicLoader,0xd2ac2892, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicBand,0x79ba9e00, 0xb6ee, 0x11d1, 0x86, 0xbe, 0x0, 0xc0, 0x4f, 0xbf, 0x8f, 0xef);
+
+/* New CLSID's for DX8 */
+DEFINE_GUID(CLSID_DirectMusicPatternTrack,0xd2ac2897, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(CLSID_DirectMusicScript,0x810b5013, 0xe88d, 0x11d2, 0x8b, 0xc1, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xb6); /* {810B5013-E88D-11d2-8BC1-00600893B1B6} */
+DEFINE_GUID(CLSID_DirectMusicContainer,0x9301e380, 0x1f22, 0x11d3, 0x82, 0x26, 0xd2, 0xfa, 0x76, 0x25, 0x5d, 0x47);
+DEFINE_GUID(CLSID_DirectSoundWave,0x8a667154, 0xf9cb, 0x11d2, 0xad, 0x8a, 0x0, 0x60, 0xb0, 0x57, 0x5a, 0xbc);
+DEFINE_GUID(CLSID_DirectMusicAudioPathConfig,0xee0b9ca0, 0xa81e, 0x11d3, 0x9b, 0xd1, 0x0, 0x80, 0xc7, 0x15, 0xa, 0x74);
+
+/* Special GUID for all object types. This is used by the loader. */
+DEFINE_GUID(GUID_DirectMusicAllTypes,0xd2ac2893, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Notification guids */
+DEFINE_GUID(GUID_NOTIFICATION_SEGMENT,0xd2ac2899, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_PERFORMANCE,0x81f75bc5, 0x4e5d, 0x11d2, 0xbc, 0xc7, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
+DEFINE_GUID(GUID_NOTIFICATION_MEASUREANDBEAT,0xd2ac289a, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_CHORD,0xd2ac289b, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_COMMAND,0xd2ac289c, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_NOTIFICATION_RECOMPOSE, 0xd348372b, 0x945b, 0x45ae, 0xa5, 0x22, 0x45, 0xf, 0x12, 0x5b, 0x84, 0xa5);
+
+/* Track param type guids */
+/* Use to get/set a DMUS_COMMAND_PARAM param in the Command track */
+DEFINE_GUID(GUID_CommandParam,0xd2ac289d, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Use to get a DMUS_COMMAND_PARAM_2 param in the Command track */
+DEFINE_GUID(GUID_CommandParam2, 0x28f97ef7, 0x9538, 0x11d2, 0x97, 0xa9, 0x0, 0xc0, 0x4f, 0xa3, 0x6e, 0x58);
+
+/* Use to get/set a DMUS_COMMAND_PARAM_2 param to be used as the command following all commands in
+the Command track (this information can't be saved) */
+DEFINE_GUID(GUID_CommandParamNext, 0x472afe7a, 0x281b, 0x11d3, 0x81, 0x7d, 0x0, 0xc0, 0x4f, 0xa3, 0x6e, 0x58);
+
+/* Use to get/set a DMUS_CHORD_PARAM param in the Chord track */
+DEFINE_GUID(GUID_ChordParam,0xd2ac289e, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Use to get a DMUS_RHYTHM_PARAM param in the Chord track */
+DEFINE_GUID(GUID_RhythmParam,0xd2ac289f, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Use to get/set an IDirectMusicStyle param in the Style track */
+DEFINE_GUID(GUID_IDirectMusicStyle,0xd2ac28a1, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Use to get a DMUS_TIMESIGNATURE param in the Style and TimeSig tracks */
+DEFINE_GUID(GUID_TimeSignature,0xd2ac28a4, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Use to get/set a DMUS_TEMPO_PARAM param in the Tempo track */
+DEFINE_GUID(GUID_TempoParam,0xd2ac28a5, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Use to get the next valid point in a segment at which it may start */
+DEFINE_GUID(GUID_Valid_Start_Time,0x7f6b1760, 0x1fdb, 0x11d3, 0x82, 0x26, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
+
+/* Use to get the next point in the currently playing primary segment at which a new segment may start */
+DEFINE_GUID(GUID_Play_Marker,0xd8761a41, 0x801a, 0x11d3, 0x9b, 0xd1, 0xda, 0xf7, 0xe1, 0xc3, 0xd8, 0x34);
+
+/* Use to get (GetParam) or add (SetParam) bands in the Band track */
+DEFINE_GUID(GUID_BandParam,0x2bb1938, 0xcb8b, 0x11d2, 0x8b, 0xb9, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xb6);
+typedef struct _DMUS_BAND_PARAM
+{
+ MUSIC_TIME mtTimePhysical; /* Note: If this is a clock-time track, then this field is interpreted in the track's internal time format, which is the number of milliseconds after the beginning of playback. */
+ IDirectMusicBand *pBand;
+} DMUS_BAND_PARAM;
+
+/* Obsolete -- doesn't distinguish physical and logical time. Use GUID_BandParam instead. */
+DEFINE_GUID(GUID_IDirectMusicBand,0xd2ac28ac, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Use to get/set an IDirectMusicChordMap param in the ChordMap track */
+DEFINE_GUID(GUID_IDirectMusicChordMap,0xd2ac28ad, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Use to get/set a DMUS_MUTE_PARAM param in the Mute track */
+DEFINE_GUID(GUID_MuteParam,0xd2ac28af, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* These guids are used in IDirectMusicSegment::SetParam to tell the band track to perform various actions.
+ Some of these guids (where noted) also apply to wave tracks.
+ */
+/* Download bands/waves for the IDirectMusicSegment */
+DEFINE_GUID(GUID_Download,0xd2ac28a7, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Unload bands/waves for the IDirectMusicSegment */
+DEFINE_GUID(GUID_Unload,0xd2ac28a8, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Connect segment's bands to an IDirectMusicCollection */
+DEFINE_GUID(GUID_ConnectToDLSCollection, 0x1db1ae6b, 0xe92e, 0x11d1, 0xa8, 0xc5, 0x0, 0xc0, 0x4f, 0xa3, 0x72, 0x6e);
+
+/* Enable/disable autodownloading of bands/waves */
+DEFINE_GUID(GUID_Enable_Auto_Download,0xd2ac28a9, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_Disable_Auto_Download,0xd2ac28aa, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Clear all bands */
+DEFINE_GUID(GUID_Clear_All_Bands,0xd2ac28ab, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Set segment to manage all program changes, bank selects, etc. for simple playback of a standard MIDI file */
+DEFINE_GUID(GUID_StandardMIDIFile, 0x6621075, 0xe92e, 0x11d1, 0xa8, 0xc5, 0x0, 0xc0, 0x4f, 0xa3, 0x72, 0x6e);
+/* For compatibility with beta releases... */
+#define GUID_IgnoreBankSelectForGM GUID_StandardMIDIFile
+
+/* Disable/enable param guids. Use these in SetParam calls to disable or enable sending
+ * specific PMsg types.
+ */
+DEFINE_GUID(GUID_DisableTimeSig, 0x45fc707b, 0x1db4, 0x11d2, 0xbc, 0xac, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
+DEFINE_GUID(GUID_EnableTimeSig, 0x45fc707c, 0x1db4, 0x11d2, 0xbc, 0xac, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
+DEFINE_GUID(GUID_DisableTempo, 0x45fc707d, 0x1db4, 0x11d2, 0xbc, 0xac, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
+DEFINE_GUID(GUID_EnableTempo, 0x45fc707e, 0x1db4, 0x11d2, 0xbc, 0xac, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
+
+/* Used in SetParam calls for pattern-based tracks. A nonzero value seeds the random number
+generator for variation selection; a value of zero reverts to the default behavior of
+getting the seed from the system clock.
+*/
+DEFINE_GUID(GUID_SeedVariations, 0x65b76fa5, 0xff37, 0x11d2, 0x81, 0x4e, 0x0, 0xc0, 0x4f, 0xa3, 0x6e, 0x58);
+
+/* Used to get the variations currently in effect across PChannels */
+DEFINE_GUID(GUID_Variations, 0x11f72cce, 0x26e6, 0x4ecd, 0xaf, 0x2e, 0xd6, 0x68, 0xe6, 0x67, 0x7, 0xd8);
+typedef struct _DMUS_VARIATIONS_PARAM
+{
+ DWORD dwPChannelsUsed; /* number of PChannels in use */
+ DWORD* padwPChannels; /* array of PChannels in use */
+ DWORD* padwVariations; /* array of variations in effect for each PChannel */
+} DMUS_VARIATIONS_PARAM;
+
+/* Download bands/waves for the IDirectMusicSegment, passed an IDirectMusicAudioPath instead of an IDirectMusicPerformance */
+DEFINE_GUID(GUID_DownloadToAudioPath,0x9f2c0341, 0xc5c4, 0x11d3, 0x9b, 0xd1, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
+
+/* Unload bands/waves for the IDirectMusicSegment, passed an IDirectMusicAudioPath instead of an IDirectMusicPerformance */
+DEFINE_GUID(GUID_UnloadFromAudioPath,0x9f2c0342, 0xc5c4, 0x11d3, 0x9b, 0xd1, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
+
+
+/* Global data guids */
+DEFINE_GUID(GUID_PerfMasterTempo,0xd2ac28b0, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_PerfMasterVolume,0xd2ac28b1, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_PerfMasterGrooveLevel,0xd2ac28b2, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(GUID_PerfAutoDownload, 0xfb09565b, 0x3631, 0x11d2, 0xbc, 0xb8, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
+
+/* GUID for default GM/GS dls collection. */
+DEFINE_GUID(GUID_DefaultGMCollection, 0xf17e8673, 0xc3b4, 0x11d1, 0x87, 0xb, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* GUID to define default synth, placed in AudioPath configuration file. */
+DEFINE_GUID(GUID_Synth_Default,0x26bb9432, 0x45fe, 0x48d3, 0xa3, 0x75, 0x24, 0x72, 0xc5, 0xe3, 0xe7, 0x86);
+
+/* GUIDs to define default buffer configurations to place in AudioPath configuration file. */
+DEFINE_GUID(GUID_Buffer_Reverb,0x186cc541, 0xdb29, 0x11d3, 0x9b, 0xd1, 0x0, 0x80, 0xc7, 0x15, 0xa, 0x74);
+DEFINE_GUID(GUID_Buffer_EnvReverb,0x186cc542, 0xdb29, 0x11d3, 0x9b, 0xd1, 0x0, 0x80, 0xc7, 0x15, 0xa, 0x74);
+DEFINE_GUID(GUID_Buffer_Stereo,0x186cc545, 0xdb29, 0x11d3, 0x9b, 0xd1, 0x0, 0x80, 0xc7, 0x15, 0xa, 0x74);
+DEFINE_GUID(GUID_Buffer_3D_Dry,0x186cc546, 0xdb29, 0x11d3, 0x9b, 0xd1, 0x0, 0x80, 0xc7, 0x15, 0xa, 0x74);
+DEFINE_GUID(GUID_Buffer_Mono,0x186cc547, 0xdb29, 0x11d3, 0x9b, 0xd1, 0x0, 0x80, 0xc7, 0x15, 0xa, 0x74);
+
+/* IID's */
+DEFINE_GUID(IID_IDirectMusicLoader, 0x2ffaaca2, 0x5dca, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+DEFINE_GUID(IID_IDirectMusicGetLoader,0x68a04844, 0xd13d, 0x11d1, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+DEFINE_GUID(IID_IDirectMusicObject,0xd2ac28b5, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicSegment, 0xf96029a2, 0x4282, 0x11d2, 0x87, 0x17, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicSegmentState, 0xa3afdcc7, 0xd3ee, 0x11d1, 0xbc, 0x8d, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
+DEFINE_GUID(IID_IDirectMusicPerformance,0x7d43d03, 0x6523, 0x11d2, 0x87, 0x1d, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicGraph,0x2befc277, 0x5497, 0x11d2, 0xbc, 0xcb, 0x0, 0xa0, 0xc9, 0x22, 0xe6, 0xeb);
+DEFINE_GUID(IID_IDirectMusicStyle,0xd2ac28bd, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicChordMap,0xd2ac28be, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicComposer,0xd2ac28bf, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+DEFINE_GUID(IID_IDirectMusicBand,0xd2ac28c0, 0xb39b, 0x11d1, 0x87, 0x4, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Alternate interface IDs, available in DX7 release and after. */
+DEFINE_GUID(IID_IDirectMusicPerformance2,0x6fc2cae0, 0xbc78, 0x11d2, 0xaf, 0xa6, 0x0, 0xaa, 0x0, 0x24, 0xd8, 0xb6);
+DEFINE_GUID(IID_IDirectMusicSegment2, 0xd38894d1, 0xc052, 0x11d2, 0x87, 0x2f, 0x0, 0x60, 0x8, 0x93, 0xb1, 0xbd);
+
+/* Interface IDs for DX8 */
+/* changed interfaces (GUID only) */
+DEFINE_GUID(IID_IDirectMusicLoader8, 0x19e7c08c, 0xa44, 0x4e6a, 0xa1, 0x16, 0x59, 0x5a, 0x7c, 0xd5, 0xde, 0x8c);
+DEFINE_GUID(IID_IDirectMusicPerformance8, 0x679c4137, 0xc62e, 0x4147, 0xb2, 0xb4, 0x9d, 0x56, 0x9a, 0xcb, 0x25, 0x4c);
+DEFINE_GUID(IID_IDirectMusicSegment8,0xc6784488, 0x41a3, 0x418f, 0xaa, 0x15, 0xb3, 0x50, 0x93, 0xba, 0x42, 0xd4);
+DEFINE_GUID(IID_IDirectMusicSegmentState8, 0xa50e4730, 0xae4, 0x48a7, 0x98, 0x39, 0xbc, 0x4, 0xbf, 0xe0, 0x77, 0x72);
+DEFINE_GUID(IID_IDirectMusicStyle8, 0xfd24ad8a, 0xa260, 0x453d, 0xbf, 0x50, 0x6f, 0x93, 0x84, 0xf7, 0x9, 0x85);
+/* new interfaces (GUID + alias) */
+DEFINE_GUID(IID_IDirectMusicPatternTrack, 0x51c22e10, 0xb49f, 0x46fc, 0xbe, 0xc2, 0xe6, 0x28, 0x8f, 0xb9, 0xed, 0xe6);
+#define IID_IDirectMusicPatternTrack8 IID_IDirectMusicPatternTrack
+DEFINE_GUID(IID_IDirectMusicScript, 0x2252373a, 0x5814, 0x489b, 0x82, 0x9, 0x31, 0xfe, 0xde, 0xba, 0xf1, 0x37); /* {2252373A-5814-489b-8209-31FEDEBAF137} */
+#define IID_IDirectMusicScript8 IID_IDirectMusicScript
+DEFINE_GUID(IID_IDirectMusicContainer, 0x9301e386, 0x1f22, 0x11d3, 0x82, 0x26, 0xd2, 0xfa, 0x76, 0x25, 0x5d, 0x47);
+#define IID_IDirectMusicContainer8 IID_IDirectMusicContainer
+DEFINE_GUID(IID_IDirectMusicAudioPath,0xc87631f5, 0x23be, 0x4986, 0x88, 0x36, 0x5, 0x83, 0x2f, 0xcc, 0x48, 0xf9);
+#define IID_IDirectMusicAudioPath8 IID_IDirectMusicAudioPath
+/* unchanged interfaces (alias only) */
+#define IID_IDirectMusicGetLoader8 IID_IDirectMusicGetLoader
+#define IID_IDirectMusicChordMap8 IID_IDirectMusicChordMap
+#define IID_IDirectMusicGraph8 IID_IDirectMusicGraph
+#define IID_IDirectMusicBand8 IID_IDirectMusicBand
+#define IID_IDirectMusicObject8 IID_IDirectMusicObject
+#define IID_IDirectMusicComposer8 IID_IDirectMusicComposer
+
+
+#ifdef __cplusplus
+}; /* extern "C" */
+#endif
+
+#include <poppack.h>
+
+#endif /* #ifndef _DMUSICI_ */
diff --git a/plugins/!NotAdopted/sndVol/dsound.h b/plugins/!NotAdopted/sndVol/dsound.h
new file mode 100644
index 0000000000..c088b63a35
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dsound.h
@@ -0,0 +1,2358 @@
+/*==========================================================================;
+ *
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ *
+ * File: dsound.h
+ * Content: DirectSound include file
+ *
+ **************************************************************************/
+
+#define COM_NO_WINDOWS_H
+#include <objbase.h>
+#include <float.h>
+
+#ifndef DIRECTSOUND_VERSION
+#define DIRECTSOUND_VERSION 0x0900 /* Version 9.0 */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif // __cplusplus
+
+#ifndef __DSOUND_INCLUDED__
+#define __DSOUND_INCLUDED__
+
+/* Type definitions shared with Direct3D */
+
+#ifndef DX_SHARED_DEFINES
+
+typedef float D3DVALUE, *LPD3DVALUE;
+
+#ifndef D3DCOLOR_DEFINED
+typedef DWORD D3DCOLOR;
+#define D3DCOLOR_DEFINED
+#endif
+
+#ifndef LPD3DCOLOR_DEFINED
+typedef DWORD *LPD3DCOLOR;
+#define LPD3DCOLOR_DEFINED
+#endif
+
+#ifndef D3DVECTOR_DEFINED
+typedef struct _D3DVECTOR {
+ float x;
+ float y;
+ float z;
+} D3DVECTOR;
+#define D3DVECTOR_DEFINED
+#endif
+
+#ifndef LPD3DVECTOR_DEFINED
+typedef D3DVECTOR *LPD3DVECTOR;
+#define LPD3DVECTOR_DEFINED
+#endif
+
+#define DX_SHARED_DEFINES
+#endif // DX_SHARED_DEFINES
+
+#define _FACDS 0x878 /* DirectSound's facility code */
+#define MAKE_DSHRESULT(code) MAKE_HRESULT(1, _FACDS, code)
+
+// DirectSound Component GUID {47D4D946-62E8-11CF-93BC-444553540000}
+DEFINE_GUID(CLSID_DirectSound, 0x47d4d946, 0x62e8, 0x11cf, 0x93, 0xbc, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0);
+
+// DirectSound 8.0 Component GUID {3901CC3F-84B5-4FA4-BA35-AA8172B8A09B}
+DEFINE_GUID(CLSID_DirectSound8, 0x3901cc3f, 0x84b5, 0x4fa4, 0xba, 0x35, 0xaa, 0x81, 0x72, 0xb8, 0xa0, 0x9b);
+
+// DirectSound Capture Component GUID {B0210780-89CD-11D0-AF08-00A0C925CD16}
+DEFINE_GUID(CLSID_DirectSoundCapture, 0xb0210780, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);
+
+// DirectSound 8.0 Capture Component GUID {E4BCAC13-7F99-4908-9A8E-74E3BF24B6E1}
+DEFINE_GUID(CLSID_DirectSoundCapture8, 0xe4bcac13, 0x7f99, 0x4908, 0x9a, 0x8e, 0x74, 0xe3, 0xbf, 0x24, 0xb6, 0xe1);
+
+// DirectSound Full Duplex Component GUID {FEA4300C-7959-4147-B26A-2377B9E7A91D}
+DEFINE_GUID(CLSID_DirectSoundFullDuplex, 0xfea4300c, 0x7959, 0x4147, 0xb2, 0x6a, 0x23, 0x77, 0xb9, 0xe7, 0xa9, 0x1d);
+
+
+// DirectSound default playback device GUID {DEF00000-9C6D-47ED-AAF1-4DDA8F2B5C03}
+DEFINE_GUID(DSDEVID_DefaultPlayback, 0xdef00000, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03);
+
+// DirectSound default capture device GUID {DEF00001-9C6D-47ED-AAF1-4DDA8F2B5C03}
+DEFINE_GUID(DSDEVID_DefaultCapture, 0xdef00001, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03);
+
+// DirectSound default device for voice playback {DEF00002-9C6D-47ED-AAF1-4DDA8F2B5C03}
+DEFINE_GUID(DSDEVID_DefaultVoicePlayback, 0xdef00002, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03);
+
+// DirectSound default device for voice capture {DEF00003-9C6D-47ED-AAF1-4DDA8F2B5C03}
+DEFINE_GUID(DSDEVID_DefaultVoiceCapture, 0xdef00003, 0x9c6d, 0x47ed, 0xaa, 0xf1, 0x4d, 0xda, 0x8f, 0x2b, 0x5c, 0x03);
+
+
+//
+// Forward declarations for interfaces.
+// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined
+//
+
+#ifdef __cplusplus
+struct IDirectSound;
+struct IDirectSoundBuffer;
+struct IDirectSound3DListener;
+struct IDirectSound3DBuffer;
+struct IDirectSoundCapture;
+struct IDirectSoundCaptureBuffer;
+struct IDirectSoundNotify;
+#endif // __cplusplus
+
+
+//
+// DirectSound 8.0 interfaces.
+//
+
+#if DIRECTSOUND_VERSION >= 0x0800
+
+#ifdef __cplusplus
+struct IDirectSound8;
+struct IDirectSoundBuffer8;
+struct IDirectSoundCaptureBuffer8;
+struct IDirectSoundFXGargle;
+struct IDirectSoundFXChorus;
+struct IDirectSoundFXFlanger;
+struct IDirectSoundFXEcho;
+struct IDirectSoundFXDistortion;
+struct IDirectSoundFXCompressor;
+struct IDirectSoundFXParamEq;
+struct IDirectSoundFXWavesReverb;
+struct IDirectSoundFXI3DL2Reverb;
+struct IDirectSoundCaptureFXAec;
+struct IDirectSoundCaptureFXNoiseSuppress;
+struct IDirectSoundFullDuplex;
+#endif // __cplusplus
+
+// IDirectSound8, IDirectSoundBuffer8 and IDirectSoundCaptureBuffer8 are the
+// only DirectSound 7.0 interfaces with changed functionality in version 8.0.
+// The other level 8 interfaces as equivalent to their level 7 counterparts:
+
+#define IDirectSoundCapture8 IDirectSoundCapture
+#define IDirectSound3DListener8 IDirectSound3DListener
+#define IDirectSound3DBuffer8 IDirectSound3DBuffer
+#define IDirectSoundNotify8 IDirectSoundNotify
+#define IDirectSoundFXGargle8 IDirectSoundFXGargle
+#define IDirectSoundFXChorus8 IDirectSoundFXChorus
+#define IDirectSoundFXFlanger8 IDirectSoundFXFlanger
+#define IDirectSoundFXEcho8 IDirectSoundFXEcho
+#define IDirectSoundFXDistortion8 IDirectSoundFXDistortion
+#define IDirectSoundFXCompressor8 IDirectSoundFXCompressor
+#define IDirectSoundFXParamEq8 IDirectSoundFXParamEq
+#define IDirectSoundFXWavesReverb8 IDirectSoundFXWavesReverb
+#define IDirectSoundFXI3DL2Reverb8 IDirectSoundFXI3DL2Reverb
+#define IDirectSoundCaptureFXAec8 IDirectSoundCaptureFXAec
+#define IDirectSoundCaptureFXNoiseSuppress8 IDirectSoundCaptureFXNoiseSuppress
+#define IDirectSoundFullDuplex8 IDirectSoundFullDuplex
+
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+typedef struct IDirectSound *LPDIRECTSOUND;
+typedef struct IDirectSoundBuffer *LPDIRECTSOUNDBUFFER;
+typedef struct IDirectSound3DListener *LPDIRECTSOUND3DLISTENER;
+typedef struct IDirectSound3DBuffer *LPDIRECTSOUND3DBUFFER;
+typedef struct IDirectSoundCapture *LPDIRECTSOUNDCAPTURE;
+typedef struct IDirectSoundCaptureBuffer *LPDIRECTSOUNDCAPTUREBUFFER;
+typedef struct IDirectSoundNotify *LPDIRECTSOUNDNOTIFY;
+
+
+#if DIRECTSOUND_VERSION >= 0x0800
+
+typedef struct IDirectSoundFXGargle *LPDIRECTSOUNDFXGARGLE;
+typedef struct IDirectSoundFXChorus *LPDIRECTSOUNDFXCHORUS;
+typedef struct IDirectSoundFXFlanger *LPDIRECTSOUNDFXFLANGER;
+typedef struct IDirectSoundFXEcho *LPDIRECTSOUNDFXECHO;
+typedef struct IDirectSoundFXDistortion *LPDIRECTSOUNDFXDISTORTION;
+typedef struct IDirectSoundFXCompressor *LPDIRECTSOUNDFXCOMPRESSOR;
+typedef struct IDirectSoundFXParamEq *LPDIRECTSOUNDFXPARAMEQ;
+typedef struct IDirectSoundFXWavesReverb *LPDIRECTSOUNDFXWAVESREVERB;
+typedef struct IDirectSoundFXI3DL2Reverb *LPDIRECTSOUNDFXI3DL2REVERB;
+typedef struct IDirectSoundCaptureFXAec *LPDIRECTSOUNDCAPTUREFXAEC;
+typedef struct IDirectSoundCaptureFXNoiseSuppress *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS;
+typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX;
+
+typedef struct IDirectSound8 *LPDIRECTSOUND8;
+typedef struct IDirectSoundBuffer8 *LPDIRECTSOUNDBUFFER8;
+typedef struct IDirectSound3DListener8 *LPDIRECTSOUND3DLISTENER8;
+typedef struct IDirectSound3DBuffer8 *LPDIRECTSOUND3DBUFFER8;
+typedef struct IDirectSoundCapture8 *LPDIRECTSOUNDCAPTURE8;
+typedef struct IDirectSoundCaptureBuffer8 *LPDIRECTSOUNDCAPTUREBUFFER8;
+typedef struct IDirectSoundNotify8 *LPDIRECTSOUNDNOTIFY8;
+typedef struct IDirectSoundFXGargle8 *LPDIRECTSOUNDFXGARGLE8;
+typedef struct IDirectSoundFXChorus8 *LPDIRECTSOUNDFXCHORUS8;
+typedef struct IDirectSoundFXFlanger8 *LPDIRECTSOUNDFXFLANGER8;
+typedef struct IDirectSoundFXEcho8 *LPDIRECTSOUNDFXECHO8;
+typedef struct IDirectSoundFXDistortion8 *LPDIRECTSOUNDFXDISTORTION8;
+typedef struct IDirectSoundFXCompressor8 *LPDIRECTSOUNDFXCOMPRESSOR8;
+typedef struct IDirectSoundFXParamEq8 *LPDIRECTSOUNDFXPARAMEQ8;
+typedef struct IDirectSoundFXWavesReverb8 *LPDIRECTSOUNDFXWAVESREVERB8;
+typedef struct IDirectSoundFXI3DL2Reverb8 *LPDIRECTSOUNDFXI3DL2REVERB8;
+typedef struct IDirectSoundCaptureFXAec8 *LPDIRECTSOUNDCAPTUREFXAEC8;
+typedef struct IDirectSoundCaptureFXNoiseSuppress8 *LPDIRECTSOUNDCAPTUREFXNOISESUPPRESS8;
+typedef struct IDirectSoundFullDuplex8 *LPDIRECTSOUNDFULLDUPLEX8;
+
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+//
+// IID definitions for the unchanged DirectSound 8.0 interfaces
+//
+
+#if DIRECTSOUND_VERSION >= 0x0800
+
+#define IID_IDirectSoundCapture8 IID_IDirectSoundCapture
+#define IID_IDirectSound3DListener8 IID_IDirectSound3DListener
+#define IID_IDirectSound3DBuffer8 IID_IDirectSound3DBuffer
+#define IID_IDirectSoundNotify8 IID_IDirectSoundNotify
+#define IID_IDirectSoundFXGargle8 IID_IDirectSoundFXGargle
+#define IID_IDirectSoundFXChorus8 IID_IDirectSoundFXChorus
+#define IID_IDirectSoundFXFlanger8 IID_IDirectSoundFXFlanger
+#define IID_IDirectSoundFXEcho8 IID_IDirectSoundFXEcho
+#define IID_IDirectSoundFXDistortion8 IID_IDirectSoundFXDistortion
+#define IID_IDirectSoundFXCompressor8 IID_IDirectSoundFXCompressor
+#define IID_IDirectSoundFXParamEq8 IID_IDirectSoundFXParamEq
+#define IID_IDirectSoundFXWavesReverb8 IID_IDirectSoundFXWavesReverb
+#define IID_IDirectSoundFXI3DL2Reverb8 IID_IDirectSoundFXI3DL2Reverb
+#define IID_IDirectSoundCaptureFXAec8 IID_IDirectSoundCaptureFXAec
+#define IID_IDirectSoundCaptureFXNoiseSuppress8 IID_IDirectSoundCaptureFXNoiseSuppress
+#define IID_IDirectSoundFullDuplex8 IID_IDirectSoundFullDuplex
+
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+//
+// Compatibility typedefs
+//
+
+#ifndef _LPCWAVEFORMATEX_DEFINED
+#define _LPCWAVEFORMATEX_DEFINED
+typedef const WAVEFORMATEX *LPCWAVEFORMATEX;
+#endif // _LPCWAVEFORMATEX_DEFINED
+
+#ifndef __LPCGUID_DEFINED__
+#define __LPCGUID_DEFINED__
+typedef const GUID *LPCGUID;
+#endif // __LPCGUID_DEFINED__
+
+typedef LPDIRECTSOUND *LPLPDIRECTSOUND;
+typedef LPDIRECTSOUNDBUFFER *LPLPDIRECTSOUNDBUFFER;
+typedef LPDIRECTSOUND3DLISTENER *LPLPDIRECTSOUND3DLISTENER;
+typedef LPDIRECTSOUND3DBUFFER *LPLPDIRECTSOUND3DBUFFER;
+typedef LPDIRECTSOUNDCAPTURE *LPLPDIRECTSOUNDCAPTURE;
+typedef LPDIRECTSOUNDCAPTUREBUFFER *LPLPDIRECTSOUNDCAPTUREBUFFER;
+typedef LPDIRECTSOUNDNOTIFY *LPLPDIRECTSOUNDNOTIFY;
+
+#if DIRECTSOUND_VERSION >= 0x0800
+typedef LPDIRECTSOUND8 *LPLPDIRECTSOUND8;
+typedef LPDIRECTSOUNDBUFFER8 *LPLPDIRECTSOUNDBUFFER8;
+typedef LPDIRECTSOUNDCAPTURE8 *LPLPDIRECTSOUNDCAPTURE8;
+typedef LPDIRECTSOUNDCAPTUREBUFFER8 *LPLPDIRECTSOUNDCAPTUREBUFFER8;
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+//
+// Structures
+//
+
+typedef struct _DSCAPS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwMinSecondarySampleRate;
+ DWORD dwMaxSecondarySampleRate;
+ DWORD dwPrimaryBuffers;
+ DWORD dwMaxHwMixingAllBuffers;
+ DWORD dwMaxHwMixingStaticBuffers;
+ DWORD dwMaxHwMixingStreamingBuffers;
+ DWORD dwFreeHwMixingAllBuffers;
+ DWORD dwFreeHwMixingStaticBuffers;
+ DWORD dwFreeHwMixingStreamingBuffers;
+ DWORD dwMaxHw3DAllBuffers;
+ DWORD dwMaxHw3DStaticBuffers;
+ DWORD dwMaxHw3DStreamingBuffers;
+ DWORD dwFreeHw3DAllBuffers;
+ DWORD dwFreeHw3DStaticBuffers;
+ DWORD dwFreeHw3DStreamingBuffers;
+ DWORD dwTotalHwMemBytes;
+ DWORD dwFreeHwMemBytes;
+ DWORD dwMaxContigFreeHwMemBytes;
+ DWORD dwUnlockTransferRateHwBuffers;
+ DWORD dwPlayCpuOverheadSwBuffers;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} DSCAPS, *LPDSCAPS;
+
+typedef const DSCAPS *LPCDSCAPS;
+
+typedef struct _DSBCAPS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwUnlockTransferRate;
+ DWORD dwPlayCpuOverhead;
+} DSBCAPS, *LPDSBCAPS;
+
+typedef const DSBCAPS *LPCDSBCAPS;
+
+#if DIRECTSOUND_VERSION >= 0x0800
+
+ typedef struct _DSEFFECTDESC
+ {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidDSFXClass;
+ DWORD_PTR dwReserved1;
+ DWORD_PTR dwReserved2;
+ } DSEFFECTDESC, *LPDSEFFECTDESC;
+ typedef const DSEFFECTDESC *LPCDSEFFECTDESC;
+
+ #define DSFX_LOCHARDWARE 0x00000001
+ #define DSFX_LOCSOFTWARE 0x00000002
+
+ enum
+ {
+ DSFXR_PRESENT, // 0
+ DSFXR_LOCHARDWARE, // 1
+ DSFXR_LOCSOFTWARE, // 2
+ DSFXR_UNALLOCATED, // 3
+ DSFXR_FAILED, // 4
+ DSFXR_UNKNOWN, // 5
+ DSFXR_SENDLOOP // 6
+ };
+
+ typedef struct _DSCEFFECTDESC
+ {
+ DWORD dwSize;
+ DWORD dwFlags;
+ GUID guidDSCFXClass;
+ GUID guidDSCFXInstance;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+ } DSCEFFECTDESC, *LPDSCEFFECTDESC;
+ typedef const DSCEFFECTDESC *LPCDSCEFFECTDESC;
+
+ #define DSCFX_LOCHARDWARE 0x00000001
+ #define DSCFX_LOCSOFTWARE 0x00000002
+
+ #define DSCFXR_LOCHARDWARE 0x00000010
+ #define DSCFXR_LOCSOFTWARE 0x00000020
+
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+typedef struct _DSBUFFERDESC
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+ LPWAVEFORMATEX lpwfxFormat;
+#if DIRECTSOUND_VERSION >= 0x0700
+ GUID guid3DAlgorithm;
+#endif
+} DSBUFFERDESC, *LPDSBUFFERDESC;
+
+typedef const DSBUFFERDESC *LPCDSBUFFERDESC;
+
+// Older version of this structure:
+
+typedef struct _DSBUFFERDESC1
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+ LPWAVEFORMATEX lpwfxFormat;
+} DSBUFFERDESC1, *LPDSBUFFERDESC1;
+
+typedef const DSBUFFERDESC1 *LPCDSBUFFERDESC1;
+
+typedef struct _DS3DBUFFER
+{
+ DWORD dwSize;
+ D3DVECTOR vPosition;
+ D3DVECTOR vVelocity;
+ DWORD dwInsideConeAngle;
+ DWORD dwOutsideConeAngle;
+ D3DVECTOR vConeOrientation;
+ LONG lConeOutsideVolume;
+ D3DVALUE flMinDistance;
+ D3DVALUE flMaxDistance;
+ DWORD dwMode;
+} DS3DBUFFER, *LPDS3DBUFFER;
+
+typedef const DS3DBUFFER *LPCDS3DBUFFER;
+
+typedef struct _DS3DLISTENER
+{
+ DWORD dwSize;
+ D3DVECTOR vPosition;
+ D3DVECTOR vVelocity;
+ D3DVECTOR vOrientFront;
+ D3DVECTOR vOrientTop;
+ D3DVALUE flDistanceFactor;
+ D3DVALUE flRolloffFactor;
+ D3DVALUE flDopplerFactor;
+} DS3DLISTENER, *LPDS3DLISTENER;
+
+typedef const DS3DLISTENER *LPCDS3DLISTENER;
+
+typedef struct _DSCCAPS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwFormats;
+ DWORD dwChannels;
+} DSCCAPS, *LPDSCCAPS;
+
+typedef const DSCCAPS *LPCDSCCAPS;
+
+typedef struct _DSCBUFFERDESC1
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+ LPWAVEFORMATEX lpwfxFormat;
+} DSCBUFFERDESC1, *LPDSCBUFFERDESC1;
+
+typedef struct _DSCBUFFERDESC
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+ LPWAVEFORMATEX lpwfxFormat;
+#if DIRECTSOUND_VERSION >= 0x0800
+ DWORD dwFXCount;
+ LPDSCEFFECTDESC lpDSCFXDesc;
+#endif
+} DSCBUFFERDESC, *LPDSCBUFFERDESC;
+
+typedef const DSCBUFFERDESC *LPCDSCBUFFERDESC;
+
+typedef struct _DSCBCAPS
+{
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwBufferBytes;
+ DWORD dwReserved;
+} DSCBCAPS, *LPDSCBCAPS;
+
+typedef const DSCBCAPS *LPCDSCBCAPS;
+
+typedef struct _DSBPOSITIONNOTIFY
+{
+ DWORD dwOffset;
+ HANDLE hEventNotify;
+} DSBPOSITIONNOTIFY, *LPDSBPOSITIONNOTIFY;
+
+typedef const DSBPOSITIONNOTIFY *LPCDSBPOSITIONNOTIFY;
+
+//
+// DirectSound API
+//
+
+typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID, LPCSTR, LPCSTR, LPVOID);
+typedef BOOL (CALLBACK *LPDSENUMCALLBACKW)(LPGUID, LPCWSTR, LPCWSTR, LPVOID);
+
+extern HRESULT WINAPI DirectSoundCreate(LPCGUID pcGuidDevice, LPDIRECTSOUND *ppDS, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext);
+extern HRESULT WINAPI DirectSoundEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext);
+
+extern HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID pcGuidDevice, LPDIRECTSOUNDCAPTURE *ppDSC, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext);
+extern HRESULT WINAPI DirectSoundCaptureEnumerateW(LPDSENUMCALLBACKW pDSEnumCallback, LPVOID pContext);
+
+#if DIRECTSOUND_VERSION >= 0x0800
+extern HRESULT WINAPI DirectSoundCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUND8 *ppDS8, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundCaptureCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUNDCAPTURE8 *ppDSC8, LPUNKNOWN pUnkOuter);
+extern HRESULT WINAPI DirectSoundFullDuplexCreate(LPCGUID pcGuidCaptureDevice, LPCGUID pcGuidRenderDevice,
+ LPCDSCBUFFERDESC pcDSCBufferDesc, LPCDSBUFFERDESC pcDSBufferDesc, HWND hWnd,
+ DWORD dwLevel, LPDIRECTSOUNDFULLDUPLEX* ppDSFD, LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8,
+ LPDIRECTSOUNDBUFFER8 *ppDSBuffer8, LPUNKNOWN pUnkOuter);
+#define DirectSoundFullDuplexCreate8 DirectSoundFullDuplexCreate
+
+extern HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest);
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+#ifdef UNICODE
+#define LPDSENUMCALLBACK LPDSENUMCALLBACKW
+#define DirectSoundEnumerate DirectSoundEnumerateW
+#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateW
+#else // UNICODE
+#define LPDSENUMCALLBACK LPDSENUMCALLBACKA
+#define DirectSoundEnumerate DirectSoundEnumerateA
+#define DirectSoundCaptureEnumerate DirectSoundCaptureEnumerateA
+#endif // UNICODE
+
+//
+// IUnknown
+//
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#ifndef IUnknown_QueryInterface
+#define IUnknown_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b)
+#endif // IUnknown_QueryInterface
+#ifndef IUnknown_AddRef
+#define IUnknown_AddRef(p) (p)->lpVtbl->AddRef(p)
+#endif // IUnknown_AddRef
+#ifndef IUnknown_Release
+#define IUnknown_Release(p) (p)->lpVtbl->Release(p)
+#endif // IUnknown_Release
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#ifndef IUnknown_QueryInterface
+#define IUnknown_QueryInterface(p,a,b) (p)->QueryInterface(a,b)
+#endif // IUnknown_QueryInterface
+#ifndef IUnknown_AddRef
+#define IUnknown_AddRef(p) (p)->AddRef()
+#endif // IUnknown_AddRef
+#ifndef IUnknown_Release
+#define IUnknown_Release(p) (p)->Release()
+#endif // IUnknown_Release
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+#ifndef __IReferenceClock_INTERFACE_DEFINED__
+#define __IReferenceClock_INTERFACE_DEFINED__
+
+typedef LONGLONG REFERENCE_TIME;
+typedef REFERENCE_TIME *LPREFERENCE_TIME;
+
+DEFINE_GUID(IID_IReferenceClock, 0x56a86897, 0x0ad4, 0x11ce, 0xb0, 0x3a, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70);
+
+#undef INTERFACE
+#define INTERFACE IReferenceClock
+
+DECLARE_INTERFACE_(IReferenceClock, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IReferenceClock methods
+ STDMETHOD(GetTime) (THIS_ REFERENCE_TIME *pTime) PURE;
+ STDMETHOD(AdviseTime) (THIS_ REFERENCE_TIME rtBaseTime, REFERENCE_TIME rtStreamTime,
+ HANDLE hEvent, LPDWORD pdwAdviseCookie) PURE;
+ STDMETHOD(AdvisePeriodic) (THIS_ REFERENCE_TIME rtStartTime, REFERENCE_TIME rtPeriodTime,
+ HANDLE hSemaphore, LPDWORD pdwAdviseCookie) PURE;
+ STDMETHOD(Unadvise) (THIS_ DWORD dwAdviseCookie) PURE;
+};
+
+#endif // __IReferenceClock_INTERFACE_DEFINED__
+
+#ifndef IReferenceClock_QueryInterface
+
+#define IReferenceClock_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IReferenceClock_AddRef(p) IUnknown_AddRef(p)
+#define IReferenceClock_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IReferenceClock_GetTime(p,a) (p)->lpVtbl->GetTime(p,a)
+#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->lpVtbl->AdviseTime(p,a,b,c,d)
+#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->lpVtbl->AdvisePeriodic(p,a,b,c,d)
+#define IReferenceClock_Unadvise(p,a) (p)->lpVtbl->Unadvise(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IReferenceClock_GetTime(p,a) (p)->GetTime(a)
+#define IReferenceClock_AdviseTime(p,a,b,c,d) (p)->AdviseTime(a,b,c,d)
+#define IReferenceClock_AdvisePeriodic(p,a,b,c,d) (p)->AdvisePeriodic(a,b,c,d)
+#define IReferenceClock_Unadvise(p,a) (p)->Unadvise(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+#endif // IReferenceClock_QueryInterface
+
+//
+// IDirectSound
+//
+
+DEFINE_GUID(IID_IDirectSound, 0x279AFA83, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);
+
+#undef INTERFACE
+#define INTERFACE IDirectSound
+
+DECLARE_INTERFACE_(IDirectSound, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSound methods
+ STDMETHOD(CreateSoundBuffer) (THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(GetCaps) (THIS_ LPDSCAPS pDSCaps) PURE;
+ STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE;
+ STDMETHOD(SetCooperativeLevel) (THIS_ HWND hwnd, DWORD dwLevel) PURE;
+ STDMETHOD(Compact) (THIS) PURE;
+ STDMETHOD(GetSpeakerConfig) (THIS_ LPDWORD pdwSpeakerConfig) PURE;
+ STDMETHOD(SetSpeakerConfig) (THIS_ DWORD dwSpeakerConfig) PURE;
+ STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE;
+};
+
+#define IDirectSound_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSound_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSound_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->lpVtbl->CreateSoundBuffer(p,a,b,c)
+#define IDirectSound_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->lpVtbl->DuplicateSoundBuffer(p,a,b)
+#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->lpVtbl->SetCooperativeLevel(p,a,b)
+#define IDirectSound_Compact(p) (p)->lpVtbl->Compact(p)
+#define IDirectSound_GetSpeakerConfig(p,a) (p)->lpVtbl->GetSpeakerConfig(p,a)
+#define IDirectSound_SetSpeakerConfig(p,b) (p)->lpVtbl->SetSpeakerConfig(p,b)
+#define IDirectSound_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSound_CreateSoundBuffer(p,a,b,c) (p)->CreateSoundBuffer(a,b,c)
+#define IDirectSound_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSound_DuplicateSoundBuffer(p,a,b) (p)->DuplicateSoundBuffer(a,b)
+#define IDirectSound_SetCooperativeLevel(p,a,b) (p)->SetCooperativeLevel(a,b)
+#define IDirectSound_Compact(p) (p)->Compact()
+#define IDirectSound_GetSpeakerConfig(p,a) (p)->GetSpeakerConfig(a)
+#define IDirectSound_SetSpeakerConfig(p,b) (p)->SetSpeakerConfig(b)
+#define IDirectSound_Initialize(p,a) (p)->Initialize(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+#if DIRECTSOUND_VERSION >= 0x0800
+
+//
+// IDirectSound8
+//
+
+DEFINE_GUID(IID_IDirectSound8, 0xC50A7E93, 0xF395, 0x4834, 0x9E, 0xF6, 0x7F, 0xA9, 0x9D, 0xE5, 0x09, 0x66);
+
+#undef INTERFACE
+#define INTERFACE IDirectSound8
+
+DECLARE_INTERFACE_(IDirectSound8, IDirectSound)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSound methods
+ STDMETHOD(CreateSoundBuffer) (THIS_ LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(GetCaps) (THIS_ LPDSCAPS pDSCaps) PURE;
+ STDMETHOD(DuplicateSoundBuffer) (THIS_ LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate) PURE;
+ STDMETHOD(SetCooperativeLevel) (THIS_ HWND hwnd, DWORD dwLevel) PURE;
+ STDMETHOD(Compact) (THIS) PURE;
+ STDMETHOD(GetSpeakerConfig) (THIS_ LPDWORD pdwSpeakerConfig) PURE;
+ STDMETHOD(SetSpeakerConfig) (THIS_ DWORD dwSpeakerConfig) PURE;
+ STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE;
+
+ // IDirectSound8 methods
+ STDMETHOD(VerifyCertification) (THIS_ LPDWORD pdwCertified) PURE;
+};
+
+#define IDirectSound8_QueryInterface(p,a,b) IDirectSound_QueryInterface(p,a,b)
+#define IDirectSound8_AddRef(p) IDirectSound_AddRef(p)
+#define IDirectSound8_Release(p) IDirectSound_Release(p)
+#define IDirectSound8_CreateSoundBuffer(p,a,b,c) IDirectSound_CreateSoundBuffer(p,a,b,c)
+#define IDirectSound8_GetCaps(p,a) IDirectSound_GetCaps(p,a)
+#define IDirectSound8_DuplicateSoundBuffer(p,a,b) IDirectSound_DuplicateSoundBuffer(p,a,b)
+#define IDirectSound8_SetCooperativeLevel(p,a,b) IDirectSound_SetCooperativeLevel(p,a,b)
+#define IDirectSound8_Compact(p) IDirectSound_Compact(p)
+#define IDirectSound8_GetSpeakerConfig(p,a) IDirectSound_GetSpeakerConfig(p,a)
+#define IDirectSound8_SetSpeakerConfig(p,a) IDirectSound_SetSpeakerConfig(p,a)
+#define IDirectSound8_Initialize(p,a) IDirectSound_Initialize(p,a)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSound8_VerifyCertification(p,a) (p)->lpVtbl->VerifyCertification(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSound8_VerifyCertification(p,a) (p)->VerifyCertification(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+//
+// IDirectSoundBuffer
+//
+
+DEFINE_GUID(IID_IDirectSoundBuffer, 0x279AFA85, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundBuffer
+
+DECLARE_INTERFACE_(IDirectSoundBuffer, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundBuffer methods
+ STDMETHOD(GetCaps) (THIS_ LPDSBCAPS pDSBufferCaps) PURE;
+ STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor) PURE;
+ STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE;
+ STDMETHOD(GetVolume) (THIS_ LPLONG plVolume) PURE;
+ STDMETHOD(GetPan) (THIS_ LPLONG plPan) PURE;
+ STDMETHOD(GetFrequency) (THIS_ LPDWORD pdwFrequency) PURE;
+ STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE;
+ STDMETHOD(Initialize) (THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc) PURE;
+ STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1,
+ LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;
+ STDMETHOD(Play) (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE;
+ STDMETHOD(SetCurrentPosition) (THIS_ DWORD dwNewPosition) PURE;
+ STDMETHOD(SetFormat) (THIS_ LPCWAVEFORMATEX pcfxFormat) PURE;
+ STDMETHOD(SetVolume) (THIS_ LONG lVolume) PURE;
+ STDMETHOD(SetPan) (THIS_ LONG lPan) PURE;
+ STDMETHOD(SetFrequency) (THIS_ DWORD dwFrequency) PURE;
+ STDMETHOD(Stop) (THIS) PURE;
+ STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE;
+ STDMETHOD(Restore) (THIS) PURE;
+};
+
+#define IDirectSoundBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundBuffer_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundBuffer_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b)
+#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectSoundBuffer_GetVolume(p,a) (p)->lpVtbl->GetVolume(p,a)
+#define IDirectSoundBuffer_GetPan(p,a) (p)->lpVtbl->GetPan(p,a)
+#define IDirectSoundBuffer_GetFrequency(p,a) (p)->lpVtbl->GetFrequency(p,a)
+#define IDirectSoundBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a)
+#define IDirectSoundBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundBuffer_Play(p,a,b,c) (p)->lpVtbl->Play(p,a,b,c)
+#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->lpVtbl->SetCurrentPosition(p,a)
+#define IDirectSoundBuffer_SetFormat(p,a) (p)->lpVtbl->SetFormat(p,a)
+#define IDirectSoundBuffer_SetVolume(p,a) (p)->lpVtbl->SetVolume(p,a)
+#define IDirectSoundBuffer_SetPan(p,a) (p)->lpVtbl->SetPan(p,a)
+#define IDirectSoundBuffer_SetFrequency(p,a) (p)->lpVtbl->SetFrequency(p,a)
+#define IDirectSoundBuffer_Stop(p) (p)->lpVtbl->Stop(p)
+#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
+#define IDirectSoundBuffer_Restore(p) (p)->lpVtbl->Restore(p)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundBuffer_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSoundBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b)
+#define IDirectSoundBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c)
+#define IDirectSoundBuffer_GetVolume(p,a) (p)->GetVolume(a)
+#define IDirectSoundBuffer_GetPan(p,a) (p)->GetPan(a)
+#define IDirectSoundBuffer_GetFrequency(p,a) (p)->GetFrequency(a)
+#define IDirectSoundBuffer_GetStatus(p,a) (p)->GetStatus(a)
+#define IDirectSoundBuffer_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g)
+#define IDirectSoundBuffer_Play(p,a,b,c) (p)->Play(a,b,c)
+#define IDirectSoundBuffer_SetCurrentPosition(p,a) (p)->SetCurrentPosition(a)
+#define IDirectSoundBuffer_SetFormat(p,a) (p)->SetFormat(a)
+#define IDirectSoundBuffer_SetVolume(p,a) (p)->SetVolume(a)
+#define IDirectSoundBuffer_SetPan(p,a) (p)->SetPan(a)
+#define IDirectSoundBuffer_SetFrequency(p,a) (p)->SetFrequency(a)
+#define IDirectSoundBuffer_Stop(p) (p)->Stop()
+#define IDirectSoundBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d)
+#define IDirectSoundBuffer_Restore(p) (p)->Restore()
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+#if DIRECTSOUND_VERSION >= 0x0800
+
+//
+// IDirectSoundBuffer8
+//
+
+DEFINE_GUID(IID_IDirectSoundBuffer8, 0x6825a449, 0x7524, 0x4d82, 0x92, 0x0f, 0x50, 0xe3, 0x6a, 0xb3, 0xab, 0x1e);
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundBuffer8
+
+DECLARE_INTERFACE_(IDirectSoundBuffer8, IDirectSoundBuffer)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundBuffer methods
+ STDMETHOD(GetCaps) (THIS_ LPDSBCAPS pDSBufferCaps) PURE;
+ STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor) PURE;
+ STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE;
+ STDMETHOD(GetVolume) (THIS_ LPLONG plVolume) PURE;
+ STDMETHOD(GetPan) (THIS_ LPLONG plPan) PURE;
+ STDMETHOD(GetFrequency) (THIS_ LPDWORD pdwFrequency) PURE;
+ STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE;
+ STDMETHOD(Initialize) (THIS_ LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc) PURE;
+ STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1,
+ LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;
+ STDMETHOD(Play) (THIS_ DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags) PURE;
+ STDMETHOD(SetCurrentPosition) (THIS_ DWORD dwNewPosition) PURE;
+ STDMETHOD(SetFormat) (THIS_ LPCWAVEFORMATEX pcfxFormat) PURE;
+ STDMETHOD(SetVolume) (THIS_ LONG lVolume) PURE;
+ STDMETHOD(SetPan) (THIS_ LONG lPan) PURE;
+ STDMETHOD(SetFrequency) (THIS_ DWORD dwFrequency) PURE;
+ STDMETHOD(Stop) (THIS) PURE;
+ STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE;
+ STDMETHOD(Restore) (THIS) PURE;
+
+ // IDirectSoundBuffer8 methods
+ STDMETHOD(SetFX) (THIS_ DWORD dwEffectsCount, LPDSEFFECTDESC pDSFXDesc, LPDWORD pdwResultCodes) PURE;
+ STDMETHOD(AcquireResources) (THIS_ DWORD dwFlags, DWORD dwEffectsCount, LPDWORD pdwResultCodes) PURE;
+ STDMETHOD(GetObjectInPath) (THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE;
+};
+
+// Special GUID meaning "select all objects" for use in GetObjectInPath()
+DEFINE_GUID(GUID_All_Objects, 0xaa114de5, 0xc262, 0x4169, 0xa1, 0xc8, 0x23, 0xd6, 0x98, 0xcc, 0x73, 0xb5);
+
+#define IDirectSoundBuffer8_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundBuffer8_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundBuffer8_Release(p) IUnknown_Release(p)
+
+#define IDirectSoundBuffer8_GetCaps(p,a) IDirectSoundBuffer_GetCaps(p,a)
+#define IDirectSoundBuffer8_GetCurrentPosition(p,a,b) IDirectSoundBuffer_GetCurrentPosition(p,a,b)
+#define IDirectSoundBuffer8_GetFormat(p,a,b,c) IDirectSoundBuffer_GetFormat(p,a,b,c)
+#define IDirectSoundBuffer8_GetVolume(p,a) IDirectSoundBuffer_GetVolume(p,a)
+#define IDirectSoundBuffer8_GetPan(p,a) IDirectSoundBuffer_GetPan(p,a)
+#define IDirectSoundBuffer8_GetFrequency(p,a) IDirectSoundBuffer_GetFrequency(p,a)
+#define IDirectSoundBuffer8_GetStatus(p,a) IDirectSoundBuffer_GetStatus(p,a)
+#define IDirectSoundBuffer8_Initialize(p,a,b) IDirectSoundBuffer_Initialize(p,a,b)
+#define IDirectSoundBuffer8_Lock(p,a,b,c,d,e,f,g) IDirectSoundBuffer_Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundBuffer8_Play(p,a,b,c) IDirectSoundBuffer_Play(p,a,b,c)
+#define IDirectSoundBuffer8_SetCurrentPosition(p,a) IDirectSoundBuffer_SetCurrentPosition(p,a)
+#define IDirectSoundBuffer8_SetFormat(p,a) IDirectSoundBuffer_SetFormat(p,a)
+#define IDirectSoundBuffer8_SetVolume(p,a) IDirectSoundBuffer_SetVolume(p,a)
+#define IDirectSoundBuffer8_SetPan(p,a) IDirectSoundBuffer_SetPan(p,a)
+#define IDirectSoundBuffer8_SetFrequency(p,a) IDirectSoundBuffer_SetFrequency(p,a)
+#define IDirectSoundBuffer8_Stop(p) IDirectSoundBuffer_Stop(p)
+#define IDirectSoundBuffer8_Unlock(p,a,b,c,d) IDirectSoundBuffer_Unlock(p,a,b,c,d)
+#define IDirectSoundBuffer8_Restore(p) IDirectSoundBuffer_Restore(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->lpVtbl->SetFX(p,a,b,c)
+#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->lpVtbl->AcquireResources(p,a,b,c)
+#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundBuffer8_SetFX(p,a,b,c) (p)->SetFX(a,b,c)
+#define IDirectSoundBuffer8_AcquireResources(p,a,b,c) (p)->AcquireResources(a,b,c)
+#define IDirectSoundBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+//
+// IDirectSound3DListener
+//
+
+DEFINE_GUID(IID_IDirectSound3DListener, 0x279AFA84, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);
+
+#undef INTERFACE
+#define INTERFACE IDirectSound3DListener
+
+DECLARE_INTERFACE_(IDirectSound3DListener, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSound3DListener methods
+ STDMETHOD(GetAllParameters) (THIS_ LPDS3DLISTENER pListener) PURE;
+ STDMETHOD(GetDistanceFactor) (THIS_ D3DVALUE* pflDistanceFactor) PURE;
+ STDMETHOD(GetDopplerFactor) (THIS_ D3DVALUE* pflDopplerFactor) PURE;
+ STDMETHOD(GetOrientation) (THIS_ D3DVECTOR* pvOrientFront, D3DVECTOR* pvOrientTop) PURE;
+ STDMETHOD(GetPosition) (THIS_ D3DVECTOR* pvPosition) PURE;
+ STDMETHOD(GetRolloffFactor) (THIS_ D3DVALUE* pflRolloffFactor) PURE;
+ STDMETHOD(GetVelocity) (THIS_ D3DVECTOR* pvVelocity) PURE;
+ STDMETHOD(SetAllParameters) (THIS_ LPCDS3DLISTENER pcListener, DWORD dwApply) PURE;
+ STDMETHOD(SetDistanceFactor) (THIS_ D3DVALUE flDistanceFactor, DWORD dwApply) PURE;
+ STDMETHOD(SetDopplerFactor) (THIS_ D3DVALUE flDopplerFactor, DWORD dwApply) PURE;
+ STDMETHOD(SetOrientation) (THIS_ D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront,
+ D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply) PURE;
+ STDMETHOD(SetPosition) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+ STDMETHOD(SetRolloffFactor) (THIS_ D3DVALUE flRolloffFactor, DWORD dwApply) PURE;
+ STDMETHOD(SetVelocity) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+ STDMETHOD(CommitDeferredSettings) (THIS) PURE;
+};
+
+#define IDirectSound3DListener_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSound3DListener_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSound3DListener_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSound3DListener_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->lpVtbl->GetDistanceFactor(p,a)
+#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->lpVtbl->GetDopplerFactor(p,a)
+#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->lpVtbl->GetOrientation(p,a,b)
+#define IDirectSound3DListener_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a)
+#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->lpVtbl->GetRolloffFactor(p,a)
+#define IDirectSound3DListener_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a)
+#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b)
+#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->lpVtbl->SetDistanceFactor(p,a,b)
+#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->lpVtbl->SetDopplerFactor(p,a,b)
+#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->lpVtbl->SetOrientation(p,a,b,c,d,e,f,g)
+#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->lpVtbl->SetRolloffFactor(p,a,b)
+#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d)
+#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->lpVtbl->CommitDeferredSettings(p)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSound3DListener_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#define IDirectSound3DListener_GetDistanceFactor(p,a) (p)->GetDistanceFactor(a)
+#define IDirectSound3DListener_GetDopplerFactor(p,a) (p)->GetDopplerFactor(a)
+#define IDirectSound3DListener_GetOrientation(p,a,b) (p)->GetOrientation(a,b)
+#define IDirectSound3DListener_GetPosition(p,a) (p)->GetPosition(a)
+#define IDirectSound3DListener_GetRolloffFactor(p,a) (p)->GetRolloffFactor(a)
+#define IDirectSound3DListener_GetVelocity(p,a) (p)->GetVelocity(a)
+#define IDirectSound3DListener_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b)
+#define IDirectSound3DListener_SetDistanceFactor(p,a,b) (p)->SetDistanceFactor(a,b)
+#define IDirectSound3DListener_SetDopplerFactor(p,a,b) (p)->SetDopplerFactor(a,b)
+#define IDirectSound3DListener_SetOrientation(p,a,b,c,d,e,f,g) (p)->SetOrientation(a,b,c,d,e,f,g)
+#define IDirectSound3DListener_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d)
+#define IDirectSound3DListener_SetRolloffFactor(p,a,b) (p)->SetRolloffFactor(a,b)
+#define IDirectSound3DListener_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d)
+#define IDirectSound3DListener_CommitDeferredSettings(p) (p)->CommitDeferredSettings()
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSound3DBuffer
+//
+
+DEFINE_GUID(IID_IDirectSound3DBuffer, 0x279AFA86, 0x4981, 0x11CE, 0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60);
+
+#undef INTERFACE
+#define INTERFACE IDirectSound3DBuffer
+
+DECLARE_INTERFACE_(IDirectSound3DBuffer, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSound3DBuffer methods
+ STDMETHOD(GetAllParameters) (THIS_ LPDS3DBUFFER pDs3dBuffer) PURE;
+ STDMETHOD(GetConeAngles) (THIS_ LPDWORD pdwInsideConeAngle, LPDWORD pdwOutsideConeAngle) PURE;
+ STDMETHOD(GetConeOrientation) (THIS_ D3DVECTOR* pvOrientation) PURE;
+ STDMETHOD(GetConeOutsideVolume) (THIS_ LPLONG plConeOutsideVolume) PURE;
+ STDMETHOD(GetMaxDistance) (THIS_ D3DVALUE* pflMaxDistance) PURE;
+ STDMETHOD(GetMinDistance) (THIS_ D3DVALUE* pflMinDistance) PURE;
+ STDMETHOD(GetMode) (THIS_ LPDWORD pdwMode) PURE;
+ STDMETHOD(GetPosition) (THIS_ D3DVECTOR* pvPosition) PURE;
+ STDMETHOD(GetVelocity) (THIS_ D3DVECTOR* pvVelocity) PURE;
+ STDMETHOD(SetAllParameters) (THIS_ LPCDS3DBUFFER pcDs3dBuffer, DWORD dwApply) PURE;
+ STDMETHOD(SetConeAngles) (THIS_ DWORD dwInsideConeAngle, DWORD dwOutsideConeAngle, DWORD dwApply) PURE;
+ STDMETHOD(SetConeOrientation) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+ STDMETHOD(SetConeOutsideVolume) (THIS_ LONG lConeOutsideVolume, DWORD dwApply) PURE;
+ STDMETHOD(SetMaxDistance) (THIS_ D3DVALUE flMaxDistance, DWORD dwApply) PURE;
+ STDMETHOD(SetMinDistance) (THIS_ D3DVALUE flMinDistance, DWORD dwApply) PURE;
+ STDMETHOD(SetMode) (THIS_ DWORD dwMode, DWORD dwApply) PURE;
+ STDMETHOD(SetPosition) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+ STDMETHOD(SetVelocity) (THIS_ D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply) PURE;
+};
+
+#define IDirectSound3DBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSound3DBuffer_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSound3DBuffer_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->lpVtbl->GetConeAngles(p,a,b)
+#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->lpVtbl->GetConeOrientation(p,a)
+#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->lpVtbl->GetConeOutsideVolume(p,a)
+#define IDirectSound3DBuffer_GetPosition(p,a) (p)->lpVtbl->GetPosition(p,a)
+#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->lpVtbl->GetMinDistance(p,a)
+#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->lpVtbl->GetMaxDistance(p,a)
+#define IDirectSound3DBuffer_GetMode(p,a) (p)->lpVtbl->GetMode(p,a)
+#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->lpVtbl->GetVelocity(p,a)
+#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->lpVtbl->SetAllParameters(p,a,b)
+#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->lpVtbl->SetConeAngles(p,a,b,c)
+#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->lpVtbl->SetConeOrientation(p,a,b,c,d)
+#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->lpVtbl->SetConeOutsideVolume(p,a,b)
+#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->lpVtbl->SetPosition(p,a,b,c,d)
+#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->lpVtbl->SetMinDistance(p,a,b)
+#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->lpVtbl->SetMaxDistance(p,a,b)
+#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->lpVtbl->SetMode(p,a,b)
+#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->lpVtbl->SetVelocity(p,a,b,c,d)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSound3DBuffer_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#define IDirectSound3DBuffer_GetConeAngles(p,a,b) (p)->GetConeAngles(a,b)
+#define IDirectSound3DBuffer_GetConeOrientation(p,a) (p)->GetConeOrientation(a)
+#define IDirectSound3DBuffer_GetConeOutsideVolume(p,a) (p)->GetConeOutsideVolume(a)
+#define IDirectSound3DBuffer_GetPosition(p,a) (p)->GetPosition(a)
+#define IDirectSound3DBuffer_GetMinDistance(p,a) (p)->GetMinDistance(a)
+#define IDirectSound3DBuffer_GetMaxDistance(p,a) (p)->GetMaxDistance(a)
+#define IDirectSound3DBuffer_GetMode(p,a) (p)->GetMode(a)
+#define IDirectSound3DBuffer_GetVelocity(p,a) (p)->GetVelocity(a)
+#define IDirectSound3DBuffer_SetAllParameters(p,a,b) (p)->SetAllParameters(a,b)
+#define IDirectSound3DBuffer_SetConeAngles(p,a,b,c) (p)->SetConeAngles(a,b,c)
+#define IDirectSound3DBuffer_SetConeOrientation(p,a,b,c,d) (p)->SetConeOrientation(a,b,c,d)
+#define IDirectSound3DBuffer_SetConeOutsideVolume(p,a,b) (p)->SetConeOutsideVolume(a,b)
+#define IDirectSound3DBuffer_SetPosition(p,a,b,c,d) (p)->SetPosition(a,b,c,d)
+#define IDirectSound3DBuffer_SetMinDistance(p,a,b) (p)->SetMinDistance(a,b)
+#define IDirectSound3DBuffer_SetMaxDistance(p,a,b) (p)->SetMaxDistance(a,b)
+#define IDirectSound3DBuffer_SetMode(p,a,b) (p)->SetMode(a,b)
+#define IDirectSound3DBuffer_SetVelocity(p,a,b,c,d) (p)->SetVelocity(a,b,c,d)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundCapture
+//
+
+DEFINE_GUID(IID_IDirectSoundCapture, 0xb0210781, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundCapture
+
+DECLARE_INTERFACE_(IDirectSoundCapture, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundCapture methods
+ STDMETHOD(CreateCaptureBuffer) (THIS_ LPCDSCBUFFERDESC pcDSCBufferDesc, LPDIRECTSOUNDCAPTUREBUFFER *ppDSCBuffer, LPUNKNOWN pUnkOuter) PURE;
+ STDMETHOD(GetCaps) (THIS_ LPDSCCAPS pDSCCaps) PURE;
+ STDMETHOD(Initialize) (THIS_ LPCGUID pcGuidDevice) PURE;
+};
+
+#define IDirectSoundCapture_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundCapture_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundCapture_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->lpVtbl->CreateCaptureBuffer(p,a,b,c)
+#define IDirectSoundCapture_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundCapture_Initialize(p,a) (p)->lpVtbl->Initialize(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundCapture_CreateCaptureBuffer(p,a,b,c) (p)->CreateCaptureBuffer(a,b,c)
+#define IDirectSoundCapture_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSoundCapture_Initialize(p,a) (p)->Initialize(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundCaptureBuffer
+//
+
+DEFINE_GUID(IID_IDirectSoundCaptureBuffer, 0xb0210782, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundCaptureBuffer
+
+DECLARE_INTERFACE_(IDirectSoundCaptureBuffer, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundCaptureBuffer methods
+ STDMETHOD(GetCaps) (THIS_ LPDSCBCAPS pDSCBCaps) PURE;
+ STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCapturePosition, LPDWORD pdwReadPosition) PURE;
+ STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE;
+ STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE;
+ STDMETHOD(Initialize) (THIS_ LPDIRECTSOUNDCAPTURE pDirectSoundCapture, LPCDSCBUFFERDESC pcDSCBufferDesc) PURE;
+ STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1,
+ LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;
+ STDMETHOD(Start) (THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(Stop) (THIS) PURE;
+ STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE;
+};
+
+#define IDirectSoundCaptureBuffer_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundCaptureBuffer_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundCaptureBuffer_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->lpVtbl->GetCaps(p,a)
+#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->lpVtbl->GetCurrentPosition(p,a,b)
+#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->lpVtbl->GetFormat(p,a,b,c)
+#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->lpVtbl->GetStatus(p,a)
+#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->lpVtbl->Initialize(p,a,b)
+#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->lpVtbl->Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer_Start(p,a) (p)->lpVtbl->Start(p,a)
+#define IDirectSoundCaptureBuffer_Stop(p) (p)->lpVtbl->Stop(p)
+#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->lpVtbl->Unlock(p,a,b,c,d)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundCaptureBuffer_GetCaps(p,a) (p)->GetCaps(a)
+#define IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b) (p)->GetCurrentPosition(a,b)
+#define IDirectSoundCaptureBuffer_GetFormat(p,a,b,c) (p)->GetFormat(a,b,c)
+#define IDirectSoundCaptureBuffer_GetStatus(p,a) (p)->GetStatus(a)
+#define IDirectSoundCaptureBuffer_Initialize(p,a,b) (p)->Initialize(a,b)
+#define IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g) (p)->Lock(a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer_Start(p,a) (p)->Start(a)
+#define IDirectSoundCaptureBuffer_Stop(p) (p)->Stop()
+#define IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d) (p)->Unlock(a,b,c,d)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+
+#if DIRECTSOUND_VERSION >= 0x0800
+
+//
+// IDirectSoundCaptureBuffer8
+//
+
+DEFINE_GUID(IID_IDirectSoundCaptureBuffer8, 0x990df4, 0xdbb, 0x4872, 0x83, 0x3e, 0x6d, 0x30, 0x3e, 0x80, 0xae, 0xb6);
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundCaptureBuffer8
+
+DECLARE_INTERFACE_(IDirectSoundCaptureBuffer8, IDirectSoundCaptureBuffer)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundCaptureBuffer methods
+ STDMETHOD(GetCaps) (THIS_ LPDSCBCAPS pDSCBCaps) PURE;
+ STDMETHOD(GetCurrentPosition) (THIS_ LPDWORD pdwCapturePosition, LPDWORD pdwReadPosition) PURE;
+ STDMETHOD(GetFormat) (THIS_ LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten) PURE;
+ STDMETHOD(GetStatus) (THIS_ LPDWORD pdwStatus) PURE;
+ STDMETHOD(Initialize) (THIS_ LPDIRECTSOUNDCAPTURE pDirectSoundCapture, LPCDSCBUFFERDESC pcDSCBufferDesc) PURE;
+ STDMETHOD(Lock) (THIS_ DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1,
+ LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags) PURE;
+ STDMETHOD(Start) (THIS_ DWORD dwFlags) PURE;
+ STDMETHOD(Stop) (THIS) PURE;
+ STDMETHOD(Unlock) (THIS_ LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2) PURE;
+
+ // IDirectSoundCaptureBuffer8 methods
+ STDMETHOD(GetObjectInPath) (THIS_ REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, LPVOID *ppObject) PURE;
+ STDMETHOD(GetFXStatus) (DWORD dwFXCount, LPDWORD pdwFXStatus) PURE;
+};
+
+#define IDirectSoundCaptureBuffer8_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundCaptureBuffer8_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundCaptureBuffer8_Release(p) IUnknown_Release(p)
+
+#define IDirectSoundCaptureBuffer8_GetCaps(p,a) IDirectSoundCaptureBuffer_GetCaps(p,a)
+#define IDirectSoundCaptureBuffer8_GetCurrentPosition(p,a,b) IDirectSoundCaptureBuffer_GetCurrentPosition(p,a,b)
+#define IDirectSoundCaptureBuffer8_GetFormat(p,a,b,c) IDirectSoundCaptureBuffer_GetFormat(p,a,b,c)
+#define IDirectSoundCaptureBuffer8_GetStatus(p,a) IDirectSoundCaptureBuffer_GetStatus(p,a)
+#define IDirectSoundCaptureBuffer8_Initialize(p,a,b) IDirectSoundCaptureBuffer_Initialize(p,a,b)
+#define IDirectSoundCaptureBuffer8_Lock(p,a,b,c,d,e,f,g) IDirectSoundCaptureBuffer_Lock(p,a,b,c,d,e,f,g)
+#define IDirectSoundCaptureBuffer8_Start(p,a) IDirectSoundCaptureBuffer_Start(p,a)
+#define IDirectSoundCaptureBuffer8_Stop(p) IDirectSoundCaptureBuffer_Stop(p))
+#define IDirectSoundCaptureBuffer8_Unlock(p,a,b,c,d) IDirectSoundCaptureBuffer_Unlock(p,a,b,c,d)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->lpVtbl->GetObjectInPath(p,a,b,c,d)
+#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->lpVtbl->GetFXStatus(p,a,b)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundCaptureBuffer8_GetObjectInPath(p,a,b,c,d) (p)->GetObjectInPath(a,b,c,d)
+#define IDirectSoundCaptureBuffer8_GetFXStatus(p,a,b) (p)->GetFXStatus(a,b)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+//
+// IDirectSoundNotify
+//
+
+DEFINE_GUID(IID_IDirectSoundNotify, 0xb0210783, 0x89cd, 0x11d0, 0xaf, 0x8, 0x0, 0xa0, 0xc9, 0x25, 0xcd, 0x16);
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundNotify
+
+DECLARE_INTERFACE_(IDirectSoundNotify, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundNotify methods
+ STDMETHOD(SetNotificationPositions) (THIS_ DWORD dwPositionNotifies, LPCDSBPOSITIONNOTIFY pcPositionNotifies) PURE;
+};
+
+#define IDirectSoundNotify_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundNotify_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundNotify_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->lpVtbl->SetNotificationPositions(p,a,b)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundNotify_SetNotificationPositions(p,a,b) (p)->SetNotificationPositions(a,b)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IKsPropertySet
+//
+
+#ifndef _IKsPropertySet_
+#define _IKsPropertySet_
+
+#ifdef __cplusplus
+// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined
+struct IKsPropertySet;
+#endif // __cplusplus
+
+typedef struct IKsPropertySet *LPKSPROPERTYSET;
+
+#define KSPROPERTY_SUPPORT_GET 0x00000001
+#define KSPROPERTY_SUPPORT_SET 0x00000002
+
+DEFINE_GUID(IID_IKsPropertySet, 0x31efac30, 0x515c, 0x11d0, 0xa9, 0xaa, 0x00, 0xaa, 0x00, 0x61, 0xbe, 0x93);
+
+#undef INTERFACE
+#define INTERFACE IKsPropertySet
+
+DECLARE_INTERFACE_(IKsPropertySet, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IKsPropertySet methods
+ STDMETHOD(Get) (THIS_ REFGUID rguidPropSet, ULONG ulId, LPVOID pInstanceData, ULONG ulInstanceLength,
+ LPVOID pPropertyData, ULONG ulDataLength, PULONG pulBytesReturned) PURE;
+ STDMETHOD(Set) (THIS_ REFGUID rguidPropSet, ULONG ulId, LPVOID pInstanceData, ULONG ulInstanceLength,
+ LPVOID pPropertyData, ULONG ulDataLength) PURE;
+ STDMETHOD(QuerySupport) (THIS_ REFGUID rguidPropSet, ULONG ulId, PULONG pulTypeSupport) PURE;
+};
+
+#define IKsPropertySet_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IKsPropertySet_AddRef(p) IUnknown_AddRef(p)
+#define IKsPropertySet_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->lpVtbl->Get(p,a,b,c,d,e,f,g)
+#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->lpVtbl->Set(p,a,b,c,d,e,f)
+#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->lpVtbl->QuerySupport(p,a,b,c)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IKsPropertySet_Get(p,a,b,c,d,e,f,g) (p)->Get(a,b,c,d,e,f,g)
+#define IKsPropertySet_Set(p,a,b,c,d,e,f) (p)->Set(a,b,c,d,e,f)
+#define IKsPropertySet_QuerySupport(p,a,b,c) (p)->QuerySupport(a,b,c)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+#endif // _IKsPropertySet_
+
+#if DIRECTSOUND_VERSION >= 0x0800
+
+//
+// IDirectSoundFXGargle
+//
+
+DEFINE_GUID(IID_IDirectSoundFXGargle, 0xd616f352, 0xd622, 0x11ce, 0xaa, 0xc5, 0x00, 0x20, 0xaf, 0x0b, 0x99, 0xa3);
+
+typedef struct _DSFXGargle
+{
+ DWORD dwRateHz; // Rate of modulation in hz
+ DWORD dwWaveShape; // DSFXGARGLE_WAVE_xxx
+} DSFXGargle, *LPDSFXGargle;
+
+#define DSFXGARGLE_WAVE_TRIANGLE 0
+#define DSFXGARGLE_WAVE_SQUARE 1
+
+typedef const DSFXGargle *LPCDSFXGargle;
+
+#define DSFXGARGLE_RATEHZ_MIN 1
+#define DSFXGARGLE_RATEHZ_MAX 1000
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundFXGargle
+
+DECLARE_INTERFACE_(IDirectSoundFXGargle, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundFXGargle methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSFXGargle pcDsFxGargle) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSFXGargle pDsFxGargle) PURE;
+};
+
+#define IDirectSoundFXGargle_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundFXGargle_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundFXGargle_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXGargle_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundFXGargle_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXGargle_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundFXGargle_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundFXChorus
+//
+
+DEFINE_GUID(IID_IDirectSoundFXChorus, 0x880842e3, 0x145f, 0x43e6, 0xa9, 0x34, 0xa7, 0x18, 0x06, 0xe5, 0x05, 0x47);
+
+typedef struct _DSFXChorus
+{
+ FLOAT fWetDryMix;
+ FLOAT fDepth;
+ FLOAT fFeedback;
+ FLOAT fFrequency;
+ LONG lWaveform; // LFO shape; DSFXCHORUS_WAVE_xxx
+ FLOAT fDelay;
+ LONG lPhase;
+} DSFXChorus, *LPDSFXChorus;
+
+typedef const DSFXChorus *LPCDSFXChorus;
+
+#define DSFXCHORUS_WAVE_TRIANGLE 0
+#define DSFXCHORUS_WAVE_SIN 1
+
+#define DSFXCHORUS_WETDRYMIX_MIN 0.0f
+#define DSFXCHORUS_WETDRYMIX_MAX 100.0f
+#define DSFXCHORUS_DEPTH_MIN 0.0f
+#define DSFXCHORUS_DEPTH_MAX 100.0f
+#define DSFXCHORUS_FEEDBACK_MIN -99.0f
+#define DSFXCHORUS_FEEDBACK_MAX 99.0f
+#define DSFXCHORUS_FREQUENCY_MIN 0.0f
+#define DSFXCHORUS_FREQUENCY_MAX 10.0f
+#define DSFXCHORUS_DELAY_MIN 0.0f
+#define DSFXCHORUS_DELAY_MAX 20.0f
+#define DSFXCHORUS_PHASE_MIN 0
+#define DSFXCHORUS_PHASE_MAX 4
+
+#define DSFXCHORUS_PHASE_NEG_180 0
+#define DSFXCHORUS_PHASE_NEG_90 1
+#define DSFXCHORUS_PHASE_ZERO 2
+#define DSFXCHORUS_PHASE_90 3
+#define DSFXCHORUS_PHASE_180 4
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundFXChorus
+
+DECLARE_INTERFACE_(IDirectSoundFXChorus, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundFXChorus methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSFXChorus pcDsFxChorus) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSFXChorus pDsFxChorus) PURE;
+};
+
+#define IDirectSoundFXChorus_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundFXChorus_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundFXChorus_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXChorus_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundFXChorus_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXChorus_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundFXChorus_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundFXFlanger
+//
+
+DEFINE_GUID(IID_IDirectSoundFXFlanger, 0x903e9878, 0x2c92, 0x4072, 0x9b, 0x2c, 0xea, 0x68, 0xf5, 0x39, 0x67, 0x83);
+
+typedef struct _DSFXFlanger
+{
+ FLOAT fWetDryMix;
+ FLOAT fDepth;
+ FLOAT fFeedback;
+ FLOAT fFrequency;
+ LONG lWaveform;
+ FLOAT fDelay;
+ LONG lPhase;
+} DSFXFlanger, *LPDSFXFlanger;
+
+typedef const DSFXFlanger *LPCDSFXFlanger;
+
+#define DSFXFLANGER_WAVE_TRIANGLE 0
+#define DSFXFLANGER_WAVE_SIN 1
+
+#define DSFXFLANGER_WETDRYMIX_MIN 0.0f
+#define DSFXFLANGER_WETDRYMIX_MAX 100.0f
+#define DSFXFLANGER_FREQUENCY_MIN 0.0f
+#define DSFXFLANGER_FREQUENCY_MAX 10.0f
+#define DSFXFLANGER_DEPTH_MIN 0.0f
+#define DSFXFLANGER_DEPTH_MAX 100.0f
+#define DSFXFLANGER_PHASE_MIN 0
+#define DSFXFLANGER_PHASE_MAX 4
+#define DSFXFLANGER_FEEDBACK_MIN -99.0f
+#define DSFXFLANGER_FEEDBACK_MAX 99.0f
+#define DSFXFLANGER_DELAY_MIN 0.0f
+#define DSFXFLANGER_DELAY_MAX 4.0f
+
+#define DSFXFLANGER_PHASE_NEG_180 0
+#define DSFXFLANGER_PHASE_NEG_90 1
+#define DSFXFLANGER_PHASE_ZERO 2
+#define DSFXFLANGER_PHASE_90 3
+#define DSFXFLANGER_PHASE_180 4
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundFXFlanger
+
+DECLARE_INTERFACE_(IDirectSoundFXFlanger, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundFXFlanger methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSFXFlanger pcDsFxFlanger) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSFXFlanger pDsFxFlanger) PURE;
+};
+
+#define IDirectSoundFXFlanger_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundFXFlanger_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundFXFlanger_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXFlanger_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundFXFlanger_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXFlanger_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundFXFlanger_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundFXEcho
+//
+
+DEFINE_GUID(IID_IDirectSoundFXEcho, 0x8bd28edf, 0x50db, 0x4e92, 0xa2, 0xbd, 0x44, 0x54, 0x88, 0xd1, 0xed, 0x42);
+
+typedef struct _DSFXEcho
+{
+ FLOAT fWetDryMix;
+ FLOAT fFeedback;
+ FLOAT fLeftDelay;
+ FLOAT fRightDelay;
+ LONG lPanDelay;
+} DSFXEcho, *LPDSFXEcho;
+
+typedef const DSFXEcho *LPCDSFXEcho;
+
+#define DSFXECHO_WETDRYMIX_MIN 0.0f
+#define DSFXECHO_WETDRYMIX_MAX 100.0f
+#define DSFXECHO_FEEDBACK_MIN 0.0f
+#define DSFXECHO_FEEDBACK_MAX 100.0f
+#define DSFXECHO_LEFTDELAY_MIN 1.0f
+#define DSFXECHO_LEFTDELAY_MAX 2000.0f
+#define DSFXECHO_RIGHTDELAY_MIN 1.0f
+#define DSFXECHO_RIGHTDELAY_MAX 2000.0f
+#define DSFXECHO_PANDELAY_MIN 0
+#define DSFXECHO_PANDELAY_MAX 1
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundFXEcho
+
+DECLARE_INTERFACE_(IDirectSoundFXEcho, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundFXEcho methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSFXEcho pcDsFxEcho) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSFXEcho pDsFxEcho) PURE;
+};
+
+#define IDirectSoundFXEcho_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundFXEcho_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundFXEcho_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXEcho_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundFXEcho_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXEcho_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundFXEcho_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundFXDistortion
+//
+
+DEFINE_GUID(IID_IDirectSoundFXDistortion, 0x8ecf4326, 0x455f, 0x4d8b, 0xbd, 0xa9, 0x8d, 0x5d, 0x3e, 0x9e, 0x3e, 0x0b);
+
+typedef struct _DSFXDistortion
+{
+ FLOAT fGain;
+ FLOAT fEdge;
+ FLOAT fPostEQCenterFrequency;
+ FLOAT fPostEQBandwidth;
+ FLOAT fPreLowpassCutoff;
+} DSFXDistortion, *LPDSFXDistortion;
+
+typedef const DSFXDistortion *LPCDSFXDistortion;
+
+#define DSFXDISTORTION_GAIN_MIN -60.0f
+#define DSFXDISTORTION_GAIN_MAX 0.0f
+#define DSFXDISTORTION_EDGE_MIN 0.0f
+#define DSFXDISTORTION_EDGE_MAX 100.0f
+#define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN 100.0f
+#define DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX 8000.0f
+#define DSFXDISTORTION_POSTEQBANDWIDTH_MIN 100.0f
+#define DSFXDISTORTION_POSTEQBANDWIDTH_MAX 8000.0f
+#define DSFXDISTORTION_PRELOWPASSCUTOFF_MIN 100.0f
+#define DSFXDISTORTION_PRELOWPASSCUTOFF_MAX 8000.0f
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundFXDistortion
+
+DECLARE_INTERFACE_(IDirectSoundFXDistortion, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundFXDistortion methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSFXDistortion pcDsFxDistortion) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSFXDistortion pDsFxDistortion) PURE;
+};
+
+#define IDirectSoundFXDistortion_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundFXDistortion_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundFXDistortion_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXDistortion_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundFXDistortion_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXDistortion_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundFXDistortion_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundFXCompressor
+//
+
+DEFINE_GUID(IID_IDirectSoundFXCompressor, 0x4bbd1154, 0x62f6, 0x4e2c, 0xa1, 0x5c, 0xd3, 0xb6, 0xc4, 0x17, 0xf7, 0xa0);
+
+typedef struct _DSFXCompressor
+{
+ FLOAT fGain;
+ FLOAT fAttack;
+ FLOAT fRelease;
+ FLOAT fThreshold;
+ FLOAT fRatio;
+ FLOAT fPredelay;
+} DSFXCompressor, *LPDSFXCompressor;
+
+typedef const DSFXCompressor *LPCDSFXCompressor;
+
+#define DSFXCOMPRESSOR_GAIN_MIN -60.0f
+#define DSFXCOMPRESSOR_GAIN_MAX 60.0f
+#define DSFXCOMPRESSOR_ATTACK_MIN 0.01f
+#define DSFXCOMPRESSOR_ATTACK_MAX 500.0f
+#define DSFXCOMPRESSOR_RELEASE_MIN 50.0f
+#define DSFXCOMPRESSOR_RELEASE_MAX 3000.0f
+#define DSFXCOMPRESSOR_THRESHOLD_MIN -60.0f
+#define DSFXCOMPRESSOR_THRESHOLD_MAX 0.0f
+#define DSFXCOMPRESSOR_RATIO_MIN 1.0f
+#define DSFXCOMPRESSOR_RATIO_MAX 100.0f
+#define DSFXCOMPRESSOR_PREDELAY_MIN 0.0f
+#define DSFXCOMPRESSOR_PREDELAY_MAX 4.0f
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundFXCompressor
+
+DECLARE_INTERFACE_(IDirectSoundFXCompressor, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundFXCompressor methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSFXCompressor pcDsFxCompressor) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSFXCompressor pDsFxCompressor) PURE;
+};
+
+#define IDirectSoundFXCompressor_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundFXCompressor_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundFXCompressor_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXCompressor_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundFXCompressor_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXCompressor_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundFXCompressor_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundFXParamEq
+//
+
+DEFINE_GUID(IID_IDirectSoundFXParamEq, 0xc03ca9fe, 0xfe90, 0x4204, 0x80, 0x78, 0x82, 0x33, 0x4c, 0xd1, 0x77, 0xda);
+
+typedef struct _DSFXParamEq
+{
+ FLOAT fCenter;
+ FLOAT fBandwidth;
+ FLOAT fGain;
+} DSFXParamEq, *LPDSFXParamEq;
+
+typedef const DSFXParamEq *LPCDSFXParamEq;
+
+#define DSFXPARAMEQ_CENTER_MIN 80.0f
+#define DSFXPARAMEQ_CENTER_MAX 16000.0f
+#define DSFXPARAMEQ_BANDWIDTH_MIN 1.0f
+#define DSFXPARAMEQ_BANDWIDTH_MAX 36.0f
+#define DSFXPARAMEQ_GAIN_MIN -15.0f
+#define DSFXPARAMEQ_GAIN_MAX 15.0f
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundFXParamEq
+
+DECLARE_INTERFACE_(IDirectSoundFXParamEq, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundFXParamEq methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSFXParamEq pcDsFxParamEq) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSFXParamEq pDsFxParamEq) PURE;
+};
+
+#define IDirectSoundFXParamEq_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundFXParamEq_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundFXParamEq_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXParamEq_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundFXParamEq_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXParamEq_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundFXParamEq_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundFXI3DL2Reverb
+//
+
+DEFINE_GUID(IID_IDirectSoundFXI3DL2Reverb, 0x4b166a6a, 0x0d66, 0x43f3, 0x80, 0xe3, 0xee, 0x62, 0x80, 0xde, 0xe1, 0xa4);
+
+typedef struct _DSFXI3DL2Reverb
+{
+ LONG lRoom; // [-10000, 0] default: -1000 mB
+ LONG lRoomHF; // [-10000, 0] default: 0 mB
+ FLOAT flRoomRolloffFactor; // [0.0, 10.0] default: 0.0
+ FLOAT flDecayTime; // [0.1, 20.0] default: 1.49s
+ FLOAT flDecayHFRatio; // [0.1, 2.0] default: 0.83
+ LONG lReflections; // [-10000, 1000] default: -2602 mB
+ FLOAT flReflectionsDelay; // [0.0, 0.3] default: 0.007 s
+ LONG lReverb; // [-10000, 2000] default: 200 mB
+ FLOAT flReverbDelay; // [0.0, 0.1] default: 0.011 s
+ FLOAT flDiffusion; // [0.0, 100.0] default: 100.0 %
+ FLOAT flDensity; // [0.0, 100.0] default: 100.0 %
+ FLOAT flHFReference; // [20.0, 20000.0] default: 5000.0 Hz
+} DSFXI3DL2Reverb, *LPDSFXI3DL2Reverb;
+
+typedef const DSFXI3DL2Reverb *LPCDSFXI3DL2Reverb;
+
+#define DSFX_I3DL2REVERB_ROOM_MIN (-10000)
+#define DSFX_I3DL2REVERB_ROOM_MAX 0
+#define DSFX_I3DL2REVERB_ROOM_DEFAULT (-1000)
+
+#define DSFX_I3DL2REVERB_ROOMHF_MIN (-10000)
+#define DSFX_I3DL2REVERB_ROOMHF_MAX 0
+#define DSFX_I3DL2REVERB_ROOMHF_DEFAULT (-100)
+
+#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN 0.0f
+#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX 10.0f
+#define DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT 0.0f
+
+#define DSFX_I3DL2REVERB_DECAYTIME_MIN 0.1f
+#define DSFX_I3DL2REVERB_DECAYTIME_MAX 20.0f
+#define DSFX_I3DL2REVERB_DECAYTIME_DEFAULT 1.49f
+
+#define DSFX_I3DL2REVERB_DECAYHFRATIO_MIN 0.1f
+#define DSFX_I3DL2REVERB_DECAYHFRATIO_MAX 2.0f
+#define DSFX_I3DL2REVERB_DECAYHFRATIO_DEFAULT 0.83f
+
+#define DSFX_I3DL2REVERB_REFLECTIONS_MIN (-10000)
+#define DSFX_I3DL2REVERB_REFLECTIONS_MAX 1000
+#define DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT (-2602)
+
+#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MIN 0.0f
+#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_MAX 0.3f
+#define DSFX_I3DL2REVERB_REFLECTIONSDELAY_DEFAULT 0.007f
+
+#define DSFX_I3DL2REVERB_REVERB_MIN (-10000)
+#define DSFX_I3DL2REVERB_REVERB_MAX 2000
+#define DSFX_I3DL2REVERB_REVERB_DEFAULT (200)
+
+#define DSFX_I3DL2REVERB_REVERBDELAY_MIN 0.0f
+#define DSFX_I3DL2REVERB_REVERBDELAY_MAX 0.1f
+#define DSFX_I3DL2REVERB_REVERBDELAY_DEFAULT 0.011f
+
+#define DSFX_I3DL2REVERB_DIFFUSION_MIN 0.0f
+#define DSFX_I3DL2REVERB_DIFFUSION_MAX 100.0f
+#define DSFX_I3DL2REVERB_DIFFUSION_DEFAULT 100.0f
+
+#define DSFX_I3DL2REVERB_DENSITY_MIN 0.0f
+#define DSFX_I3DL2REVERB_DENSITY_MAX 100.0f
+#define DSFX_I3DL2REVERB_DENSITY_DEFAULT 100.0f
+
+#define DSFX_I3DL2REVERB_HFREFERENCE_MIN 20.0f
+#define DSFX_I3DL2REVERB_HFREFERENCE_MAX 20000.0f
+#define DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT 5000.0f
+
+#define DSFX_I3DL2REVERB_QUALITY_MIN 0
+#define DSFX_I3DL2REVERB_QUALITY_MAX 3
+#define DSFX_I3DL2REVERB_QUALITY_DEFAULT 2
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundFXI3DL2Reverb
+
+DECLARE_INTERFACE_(IDirectSoundFXI3DL2Reverb, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundFXI3DL2Reverb methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSFXI3DL2Reverb pcDsFxI3DL2Reverb) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSFXI3DL2Reverb pDsFxI3DL2Reverb) PURE;
+ STDMETHOD(SetPreset) (THIS_ DWORD dwPreset) PURE;
+ STDMETHOD(GetPreset) (THIS_ LPDWORD pdwPreset) PURE;
+ STDMETHOD(SetQuality) (THIS_ LONG lQuality) PURE;
+ STDMETHOD(GetQuality) (THIS_ LONG *plQuality) PURE;
+};
+
+#define IDirectSoundFXI3DL2Reverb_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundFXI3DL2Reverb_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundFXI3DL2Reverb_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->lpVtbl->SetPreset(p,a)
+#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->lpVtbl->GetPreset(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXI3DL2Reverb_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundFXI3DL2Reverb_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#define IDirectSoundFXI3DL2Reverb_SetPreset(p,a) (p)->SetPreset(a)
+#define IDirectSoundFXI3DL2Reverb_GetPreset(p,a) (p)->GetPreset(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundFXWavesReverb
+//
+
+DEFINE_GUID(IID_IDirectSoundFXWavesReverb,0x46858c3a,0x0dc6,0x45e3,0xb7,0x60,0xd4,0xee,0xf1,0x6c,0xb3,0x25);
+
+typedef struct _DSFXWavesReverb
+{
+ FLOAT fInGain; // [-96.0,0.0] default: 0.0 dB
+ FLOAT fReverbMix; // [-96.0,0.0] default: 0.0 db
+ FLOAT fReverbTime; // [0.001,3000.0] default: 1000.0 ms
+ FLOAT fHighFreqRTRatio; // [0.001,0.999] default: 0.001
+} DSFXWavesReverb, *LPDSFXWavesReverb;
+
+typedef const DSFXWavesReverb *LPCDSFXWavesReverb;
+
+#define DSFX_WAVESREVERB_INGAIN_MIN -96.0f
+#define DSFX_WAVESREVERB_INGAIN_MAX 0.0f
+#define DSFX_WAVESREVERB_INGAIN_DEFAULT 0.0f
+#define DSFX_WAVESREVERB_REVERBMIX_MIN -96.0f
+#define DSFX_WAVESREVERB_REVERBMIX_MAX 0.0f
+#define DSFX_WAVESREVERB_REVERBMIX_DEFAULT 0.0f
+#define DSFX_WAVESREVERB_REVERBTIME_MIN 0.001f
+#define DSFX_WAVESREVERB_REVERBTIME_MAX 3000.0f
+#define DSFX_WAVESREVERB_REVERBTIME_DEFAULT 1000.0f
+#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MIN 0.001f
+#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_MAX 0.999f
+#define DSFX_WAVESREVERB_HIGHFREQRTRATIO_DEFAULT 0.001f
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundFXWavesReverb
+
+DECLARE_INTERFACE_(IDirectSoundFXWavesReverb, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundFXWavesReverb methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSFXWavesReverb pcDsFxWavesReverb) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSFXWavesReverb pDsFxWavesReverb) PURE;
+};
+
+#define IDirectSoundFXWavesReverb_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundFXWavesReverb_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundFXWavesReverb_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXWavesReverb_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundFXWavesReverb_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFXWavesReverb_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundFXWavesReverb_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+//
+// IDirectSoundCaptureFXAec
+//
+
+DEFINE_GUID(IID_IDirectSoundCaptureFXAec, 0xad74143d, 0x903d, 0x4ab7, 0x80, 0x66, 0x28, 0xd3, 0x63, 0x03, 0x6d, 0x65);
+
+typedef struct _DSCFXAec
+{
+ BOOL fEnable;
+ BOOL fNoiseFill;
+ DWORD dwMode;
+} DSCFXAec, *LPDSCFXAec;
+
+typedef const DSCFXAec *LPCDSCFXAec;
+
+// These match the AEC_MODE_* constants in the DDK's ksmedia.h file
+#define DSCFX_AEC_MODE_PASS_THROUGH 0x0
+#define DSCFX_AEC_MODE_HALF_DUPLEX 0x1
+#define DSCFX_AEC_MODE_FULL_DUPLEX 0x2
+
+// These match the AEC_STATUS_* constants in ksmedia.h
+#define DSCFX_AEC_STATUS_HISTORY_UNINITIALIZED 0x0
+#define DSCFX_AEC_STATUS_HISTORY_CONTINUOUSLY_CONVERGED 0x1
+#define DSCFX_AEC_STATUS_HISTORY_PREVIOUSLY_DIVERGED 0x2
+#define DSCFX_AEC_STATUS_CURRENTLY_CONVERGED 0x8
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundCaptureFXAec
+
+DECLARE_INTERFACE_(IDirectSoundCaptureFXAec, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundCaptureFXAec methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSCFXAec pDscFxAec) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSCFXAec pDscFxAec) PURE;
+ STDMETHOD(GetStatus) (THIS_ PDWORD pdwStatus) PURE;
+ STDMETHOD(Reset) (THIS) PURE;
+};
+
+#define IDirectSoundCaptureFXAec_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundCaptureFXAec_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundCaptureFXAec_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundCaptureFXAec_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundCaptureFXAec_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundCaptureFXAec_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundCaptureFXAec_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+
+//
+// IDirectSoundCaptureFXNoiseSuppress
+//
+
+DEFINE_GUID(IID_IDirectSoundCaptureFXNoiseSuppress, 0xed311e41, 0xfbae, 0x4175, 0x96, 0x25, 0xcd, 0x8, 0x54, 0xf6, 0x93, 0xca);
+
+typedef struct _DSCFXNoiseSuppress
+{
+ BOOL fEnable;
+} DSCFXNoiseSuppress, *LPDSCFXNoiseSuppress;
+
+typedef const DSCFXNoiseSuppress *LPCDSCFXNoiseSuppress;
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundCaptureFXNoiseSuppress
+
+DECLARE_INTERFACE_(IDirectSoundCaptureFXNoiseSuppress, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundCaptureFXNoiseSuppress methods
+ STDMETHOD(SetAllParameters) (THIS_ LPCDSCFXNoiseSuppress pcDscFxNoiseSuppress) PURE;
+ STDMETHOD(GetAllParameters) (THIS_ LPDSCFXNoiseSuppress pDscFxNoiseSuppress) PURE;
+ STDMETHOD(Reset) (THIS) PURE;
+};
+
+#define IDirectSoundCaptureFXNoiseSuppress_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundCaptureFXNoiseSuppress_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundCaptureFXNoiseSuppress_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a) (p)->lpVtbl->SetAllParameters(p,a)
+#define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a) (p)->lpVtbl->GetAllParameters(p,a)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundCaptureFXNoiseSuppress_SetAllParameters(p,a) (p)->SetAllParameters(a)
+#define IDirectSoundCaptureFXNoiseSuppress_GetAllParameters(p,a) (p)->GetAllParameters(a)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+
+//
+// IDirectSoundFullDuplex
+//
+
+#ifndef _IDirectSoundFullDuplex_
+#define _IDirectSoundFullDuplex_
+
+#ifdef __cplusplus
+// 'struct' not 'class' per the way DECLARE_INTERFACE_ is defined
+struct IDirectSoundFullDuplex;
+#endif // __cplusplus
+
+typedef struct IDirectSoundFullDuplex *LPDIRECTSOUNDFULLDUPLEX;
+
+DEFINE_GUID(IID_IDirectSoundFullDuplex, 0xedcb4c7a, 0xdaab, 0x4216, 0xa4, 0x2e, 0x6c, 0x50, 0x59, 0x6d, 0xdc, 0x1d);
+
+#undef INTERFACE
+#define INTERFACE IDirectSoundFullDuplex
+
+DECLARE_INTERFACE_(IDirectSoundFullDuplex, IUnknown)
+{
+ // IUnknown methods
+ STDMETHOD(QueryInterface) (THIS_ REFIID, LPVOID *) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // IDirectSoundFullDuplex methods
+ STDMETHOD(Initialize) (THIS_ LPCGUID pCaptureGuid, LPCGUID pRenderGuid, LPCDSCBUFFERDESC lpDscBufferDesc, LPCDSBUFFERDESC lpDsBufferDesc, HWND hWnd, DWORD dwLevel, LPLPDIRECTSOUNDCAPTUREBUFFER8 lplpDirectSoundCaptureBuffer8, LPLPDIRECTSOUNDBUFFER8 lplpDirectSoundBuffer8) PURE;
+};
+
+#define IDirectSoundFullDuplex_QueryInterface(p,a,b) IUnknown_QueryInterface(p,a,b)
+#define IDirectSoundFullDuplex_AddRef(p) IUnknown_AddRef(p)
+#define IDirectSoundFullDuplex_Release(p) IUnknown_Release(p)
+
+#if !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->Initialize(p,a,b,c,d,e,f,g,h)
+#else // !defined(__cplusplus) || defined(CINTERFACE)
+#define IDirectSoundFullDuplex_Initialize(p,a,b,c,d,e,f,g,h) (p)->Initialize(a,b,c,d,e,f,g,h)
+#endif // !defined(__cplusplus) || defined(CINTERFACE)
+
+#endif // _IDirectSoundFullDuplex_
+
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+//
+// Return Codes
+//
+
+// The function completed successfully
+#define DS_OK S_OK
+
+// The call succeeded, but we had to substitute the 3D algorithm
+#define DS_NO_VIRTUALIZATION MAKE_HRESULT(0, _FACDS, 10)
+
+// The call failed because resources (such as a priority level)
+// were already being used by another caller
+#define DSERR_ALLOCATED MAKE_DSHRESULT(10)
+
+// The control (vol, pan, etc.) requested by the caller is not available
+#define DSERR_CONTROLUNAVAIL MAKE_DSHRESULT(30)
+
+// An invalid parameter was passed to the returning function
+#define DSERR_INVALIDPARAM E_INVALIDARG
+
+// This call is not valid for the current state of this object
+#define DSERR_INVALIDCALL MAKE_DSHRESULT(50)
+
+// An undetermined error occurred inside the DirectSound subsystem
+#define DSERR_GENERIC E_FAIL
+
+// The caller does not have the priority level required for the function to
+// succeed
+#define DSERR_PRIOLEVELNEEDED MAKE_DSHRESULT(70)
+
+// Not enough free memory is available to complete the operation
+#define DSERR_OUTOFMEMORY E_OUTOFMEMORY
+
+// The specified WAVE format is not supported
+#define DSERR_BADFORMAT MAKE_DSHRESULT(100)
+
+// The function called is not supported at this time
+#define DSERR_UNSUPPORTED E_NOTIMPL
+
+// No sound driver is available for use
+#define DSERR_NODRIVER MAKE_DSHRESULT(120)
+
+// This object is already initialized
+#define DSERR_ALREADYINITIALIZED MAKE_DSHRESULT(130)
+
+// This object does not support aggregation
+#define DSERR_NOAGGREGATION CLASS_E_NOAGGREGATION
+
+// The buffer memory has been lost, and must be restored
+#define DSERR_BUFFERLOST MAKE_DSHRESULT(150)
+
+// Another app has a higher priority level, preventing this call from
+// succeeding
+#define DSERR_OTHERAPPHASPRIO MAKE_DSHRESULT(160)
+
+// This object has not been initialized
+#define DSERR_UNINITIALIZED MAKE_DSHRESULT(170)
+
+// The requested COM interface is not available
+#define DSERR_NOINTERFACE E_NOINTERFACE
+
+// Access is denied
+#define DSERR_ACCESSDENIED E_ACCESSDENIED
+
+// Tried to create a DSBCAPS_CTRLFX buffer shorter than DSBSIZE_FX_MIN milliseconds
+#define DSERR_BUFFERTOOSMALL MAKE_DSHRESULT(180)
+
+// Attempt to use DirectSound 8 functionality on an older DirectSound object
+#define DSERR_DS8_REQUIRED MAKE_DSHRESULT(190)
+
+// A circular loop of send effects was detected
+#define DSERR_SENDLOOP MAKE_DSHRESULT(200)
+
+// The GUID specified in an audiopath file does not match a valid MIXIN buffer
+#define DSERR_BADSENDBUFFERGUID MAKE_DSHRESULT(210)
+
+// The object requested was not found (numerically equal to DMUS_E_NOT_FOUND)
+#define DSERR_OBJECTNOTFOUND MAKE_DSHRESULT(4449)
+
+// The effects requested could not be found on the system, or they were found
+// but in the wrong order, or in the wrong hardware/software locations.
+#define DSERR_FXUNAVAILABLE MAKE_DSHRESULT(220)
+
+//
+// Flags
+//
+
+#define DSCAPS_PRIMARYMONO 0x00000001
+#define DSCAPS_PRIMARYSTEREO 0x00000002
+#define DSCAPS_PRIMARY8BIT 0x00000004
+#define DSCAPS_PRIMARY16BIT 0x00000008
+#define DSCAPS_CONTINUOUSRATE 0x00000010
+#define DSCAPS_EMULDRIVER 0x00000020
+#define DSCAPS_CERTIFIED 0x00000040
+#define DSCAPS_SECONDARYMONO 0x00000100
+#define DSCAPS_SECONDARYSTEREO 0x00000200
+#define DSCAPS_SECONDARY8BIT 0x00000400
+#define DSCAPS_SECONDARY16BIT 0x00000800
+
+#define DSSCL_NORMAL 0x00000001
+#define DSSCL_PRIORITY 0x00000002
+#define DSSCL_EXCLUSIVE 0x00000003
+#define DSSCL_WRITEPRIMARY 0x00000004
+
+#define DSSPEAKER_DIRECTOUT 0x00000000
+#define DSSPEAKER_HEADPHONE 0x00000001
+#define DSSPEAKER_MONO 0x00000002
+#define DSSPEAKER_QUAD 0x00000003
+#define DSSPEAKER_STEREO 0x00000004
+#define DSSPEAKER_SURROUND 0x00000005
+#define DSSPEAKER_5POINT1 0x00000006
+#define DSSPEAKER_7POINT1 0x00000007
+
+#define DSSPEAKER_GEOMETRY_MIN 0x00000005 // 5 degrees
+#define DSSPEAKER_GEOMETRY_NARROW 0x0000000A // 10 degrees
+#define DSSPEAKER_GEOMETRY_WIDE 0x00000014 // 20 degrees
+#define DSSPEAKER_GEOMETRY_MAX 0x000000B4 // 180 degrees
+
+#define DSSPEAKER_COMBINED(c, g) ((DWORD)(((BYTE)(c)) | ((DWORD)((BYTE)(g))) << 16))
+#define DSSPEAKER_CONFIG(a) ((BYTE)(a))
+#define DSSPEAKER_GEOMETRY(a) ((BYTE)(((DWORD)(a) >> 16) & 0x00FF))
+
+#define DSBCAPS_PRIMARYBUFFER 0x00000001
+#define DSBCAPS_STATIC 0x00000002
+#define DSBCAPS_LOCHARDWARE 0x00000004
+#define DSBCAPS_LOCSOFTWARE 0x00000008
+#define DSBCAPS_CTRL3D 0x00000010
+#define DSBCAPS_CTRLFREQUENCY 0x00000020
+#define DSBCAPS_CTRLPAN 0x00000040
+#define DSBCAPS_CTRLVOLUME 0x00000080
+#define DSBCAPS_CTRLPOSITIONNOTIFY 0x00000100
+#define DSBCAPS_CTRLFX 0x00000200
+#define DSBCAPS_STICKYFOCUS 0x00004000
+#define DSBCAPS_GLOBALFOCUS 0x00008000
+#define DSBCAPS_GETCURRENTPOSITION2 0x00010000
+#define DSBCAPS_MUTE3DATMAXDISTANCE 0x00020000
+#define DSBCAPS_LOCDEFER 0x00040000
+
+#define DSBPLAY_LOOPING 0x00000001
+#define DSBPLAY_LOCHARDWARE 0x00000002
+#define DSBPLAY_LOCSOFTWARE 0x00000004
+#define DSBPLAY_TERMINATEBY_TIME 0x00000008
+#define DSBPLAY_TERMINATEBY_DISTANCE 0x000000010
+#define DSBPLAY_TERMINATEBY_PRIORITY 0x000000020
+
+#define DSBSTATUS_PLAYING 0x00000001
+#define DSBSTATUS_BUFFERLOST 0x00000002
+#define DSBSTATUS_LOOPING 0x00000004
+#define DSBSTATUS_LOCHARDWARE 0x00000008
+#define DSBSTATUS_LOCSOFTWARE 0x00000010
+#define DSBSTATUS_TERMINATED 0x00000020
+
+#define DSBLOCK_FROMWRITECURSOR 0x00000001
+#define DSBLOCK_ENTIREBUFFER 0x00000002
+
+#define DSBFREQUENCY_ORIGINAL 0
+#define DSBFREQUENCY_MIN 100
+#if DIRECTSOUND_VERSION >= 0x0900
+#define DSBFREQUENCY_MAX 200000
+#else
+#define DSBFREQUENCY_MAX 100000
+#endif
+
+#define DSBPAN_LEFT -10000
+#define DSBPAN_CENTER 0
+#define DSBPAN_RIGHT 10000
+
+#define DSBVOLUME_MIN -10000
+#define DSBVOLUME_MAX 0
+
+#define DSBSIZE_MIN 4
+#define DSBSIZE_MAX 0x0FFFFFFF
+#define DSBSIZE_FX_MIN 150 // NOTE: Milliseconds, not bytes
+
+#define DS3DMODE_NORMAL 0x00000000
+#define DS3DMODE_HEADRELATIVE 0x00000001
+#define DS3DMODE_DISABLE 0x00000002
+
+#define DS3D_IMMEDIATE 0x00000000
+#define DS3D_DEFERRED 0x00000001
+
+#define DS3D_MINDISTANCEFACTOR FLT_MIN
+#define DS3D_MAXDISTANCEFACTOR FLT_MAX
+#define DS3D_DEFAULTDISTANCEFACTOR 1.0f
+
+#define DS3D_MINROLLOFFFACTOR 0.0f
+#define DS3D_MAXROLLOFFFACTOR 10.0f
+#define DS3D_DEFAULTROLLOFFFACTOR 1.0f
+
+#define DS3D_MINDOPPLERFACTOR 0.0f
+#define DS3D_MAXDOPPLERFACTOR 10.0f
+#define DS3D_DEFAULTDOPPLERFACTOR 1.0f
+
+#define DS3D_DEFAULTMINDISTANCE 1.0f
+#define DS3D_DEFAULTMAXDISTANCE 1000000000.0f
+
+#define DS3D_MINCONEANGLE 0
+#define DS3D_MAXCONEANGLE 360
+#define DS3D_DEFAULTCONEANGLE 360
+
+#define DS3D_DEFAULTCONEOUTSIDEVOLUME DSBVOLUME_MAX
+
+// IDirectSoundCapture attributes
+
+#define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER
+#define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED
+#define DSCCAPS_MULTIPLECAPTURE 0x00000001
+
+// IDirectSoundCaptureBuffer attributes
+
+#define DSCBCAPS_WAVEMAPPED 0x80000000
+
+#if DIRECTSOUND_VERSION >= 0x0800
+#define DSCBCAPS_CTRLFX 0x00000200
+#endif
+
+
+#define DSCBLOCK_ENTIREBUFFER 0x00000001
+
+#define DSCBSTATUS_CAPTURING 0x00000001
+#define DSCBSTATUS_LOOPING 0x00000002
+
+#define DSCBSTART_LOOPING 0x00000001
+
+#define DSBPN_OFFSETSTOP 0xFFFFFFFF
+
+#define DS_CERTIFIED 0x00000000
+#define DS_UNCERTIFIED 0x00000001
+
+
+//
+// Flags for the I3DL2 effects
+//
+
+//
+// I3DL2 Material Presets
+//
+
+enum
+{
+ DSFX_I3DL2_MATERIAL_PRESET_SINGLEWINDOW,
+ DSFX_I3DL2_MATERIAL_PRESET_DOUBLEWINDOW,
+ DSFX_I3DL2_MATERIAL_PRESET_THINDOOR,
+ DSFX_I3DL2_MATERIAL_PRESET_THICKDOOR,
+ DSFX_I3DL2_MATERIAL_PRESET_WOODWALL,
+ DSFX_I3DL2_MATERIAL_PRESET_BRICKWALL,
+ DSFX_I3DL2_MATERIAL_PRESET_STONEWALL,
+ DSFX_I3DL2_MATERIAL_PRESET_CURTAIN
+};
+
+#define I3DL2_MATERIAL_PRESET_SINGLEWINDOW -2800,0.71f
+#define I3DL2_MATERIAL_PRESET_DOUBLEWINDOW -5000,0.40f
+#define I3DL2_MATERIAL_PRESET_THINDOOR -1800,0.66f
+#define I3DL2_MATERIAL_PRESET_THICKDOOR -4400,0.64f
+#define I3DL2_MATERIAL_PRESET_WOODWALL -4000,0.50f
+#define I3DL2_MATERIAL_PRESET_BRICKWALL -5000,0.60f
+#define I3DL2_MATERIAL_PRESET_STONEWALL -6000,0.68f
+#define I3DL2_MATERIAL_PRESET_CURTAIN -1200,0.15f
+
+enum
+{
+ DSFX_I3DL2_ENVIRONMENT_PRESET_DEFAULT,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_GENERIC,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_PADDEDCELL,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_ROOM,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_BATHROOM,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_LIVINGROOM,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_STONEROOM,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_AUDITORIUM,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_CONCERTHALL,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_CAVE,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_ARENA,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_HANGAR,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_HALLWAY,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_ALLEY,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_FOREST,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_CITY,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_MOUNTAINS,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_QUARRY,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_PLAIN,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_PARKINGLOT,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_SEWERPIPE,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_UNDERWATER,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_SMALLROOM,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEROOM,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_LARGEHALL,
+ DSFX_I3DL2_ENVIRONMENT_PRESET_PLATE
+};
+
+//
+// I3DL2 Reverberation Presets Values
+//
+
+#define I3DL2_ENVIRONMENT_PRESET_DEFAULT -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f, 200, 0.011f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_GENERIC -1000, -100, 0.0f, 1.49f, 0.83f, -2602, 0.007f, 200, 0.011f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_PADDEDCELL -1000,-6000, 0.0f, 0.17f, 0.10f, -1204, 0.001f, 207, 0.002f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_ROOM -1000, -454, 0.0f, 0.40f, 0.83f, -1646, 0.002f, 53, 0.003f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_BATHROOM -1000,-1200, 0.0f, 1.49f, 0.54f, -370, 0.007f, 1030, 0.011f, 100.0f, 60.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_LIVINGROOM -1000,-6000, 0.0f, 0.50f, 0.10f, -1376, 0.003f, -1104, 0.004f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_STONEROOM -1000, -300, 0.0f, 2.31f, 0.64f, -711, 0.012f, 83, 0.017f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_AUDITORIUM -1000, -476, 0.0f, 4.32f, 0.59f, -789, 0.020f, -289, 0.030f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_CONCERTHALL -1000, -500, 0.0f, 3.92f, 0.70f, -1230, 0.020f, -2, 0.029f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_CAVE -1000, 0, 0.0f, 2.91f, 1.30f, -602, 0.015f, -302, 0.022f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_ARENA -1000, -698, 0.0f, 7.24f, 0.33f, -1166, 0.020f, 16, 0.030f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_HANGAR -1000,-1000, 0.0f,10.05f, 0.23f, -602, 0.020f, 198, 0.030f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_CARPETEDHALLWAY -1000,-4000, 0.0f, 0.30f, 0.10f, -1831, 0.002f, -1630, 0.030f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_HALLWAY -1000, -300, 0.0f, 1.49f, 0.59f, -1219, 0.007f, 441, 0.011f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_STONECORRIDOR -1000, -237, 0.0f, 2.70f, 0.79f, -1214, 0.013f, 395, 0.020f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_ALLEY -1000, -270, 0.0f, 1.49f, 0.86f, -1204, 0.007f, -4, 0.011f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_FOREST -1000,-3300, 0.0f, 1.49f, 0.54f, -2560, 0.162f, -613, 0.088f, 79.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_CITY -1000, -800, 0.0f, 1.49f, 0.67f, -2273, 0.007f, -2217, 0.011f, 50.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_MOUNTAINS -1000,-2500, 0.0f, 1.49f, 0.21f, -2780, 0.300f, -2014, 0.100f, 27.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_QUARRY -1000,-1000, 0.0f, 1.49f, 0.83f,-10000, 0.061f, 500, 0.025f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_PLAIN -1000,-2000, 0.0f, 1.49f, 0.50f, -2466, 0.179f, -2514, 0.100f, 21.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_PARKINGLOT -1000, 0, 0.0f, 1.65f, 1.50f, -1363, 0.008f, -1153, 0.012f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_SEWERPIPE -1000,-1000, 0.0f, 2.81f, 0.14f, 429, 0.014f, 648, 0.021f, 80.0f, 60.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_UNDERWATER -1000,-4000, 0.0f, 1.49f, 0.10f, -449, 0.007f, 1700, 0.011f, 100.0f, 100.0f, 5000.0f
+
+//
+// Examples simulating 'musical' reverb presets
+//
+// Name Decay time Description
+// Small Room 1.1s A small size room with a length of 5m or so.
+// Medium Room 1.3s A medium size room with a length of 10m or so.
+// Large Room 1.5s A large size room suitable for live performances.
+// Medium Hall 1.8s A medium size concert hall.
+// Large Hall 1.8s A large size concert hall suitable for a full orchestra.
+// Plate 1.3s A plate reverb simulation.
+//
+
+#define I3DL2_ENVIRONMENT_PRESET_SMALLROOM -1000, -600, 0.0f, 1.10f, 0.83f, -400, 0.005f, 500, 0.010f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_MEDIUMROOM -1000, -600, 0.0f, 1.30f, 0.83f, -1000, 0.010f, -200, 0.020f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_LARGEROOM -1000, -600, 0.0f, 1.50f, 0.83f, -1600, 0.020f, -1000, 0.040f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_MEDIUMHALL -1000, -600, 0.0f, 1.80f, 0.70f, -1300, 0.015f, -800, 0.030f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_LARGEHALL -1000, -600, 0.0f, 1.80f, 0.70f, -2000, 0.030f, -1400, 0.060f, 100.0f, 100.0f, 5000.0f
+#define I3DL2_ENVIRONMENT_PRESET_PLATE -1000, -200, 0.0f, 1.30f, 0.90f, 0, 0.002f, 0, 0.010f, 100.0f, 75.0f, 5000.0f
+
+//
+// DirectSound3D Algorithms
+//
+
+// Default DirectSound3D algorithm {00000000-0000-0000-0000-000000000000}
+#define DS3DALG_DEFAULT GUID_NULL
+
+// No virtualization (Pan3D) {C241333F-1C1B-11d2-94F5-00C04FC28ACA}
+DEFINE_GUID(DS3DALG_NO_VIRTUALIZATION, 0xc241333f, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca);
+
+// High-quality HRTF algorithm {C2413340-1C1B-11d2-94F5-00C04FC28ACA}
+DEFINE_GUID(DS3DALG_HRTF_FULL, 0xc2413340, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca);
+
+// Lower-quality HRTF algorithm {C2413342-1C1B-11d2-94F5-00C04FC28ACA}
+DEFINE_GUID(DS3DALG_HRTF_LIGHT, 0xc2413342, 0x1c1b, 0x11d2, 0x94, 0xf5, 0x0, 0xc0, 0x4f, 0xc2, 0x8a, 0xca);
+
+
+#if DIRECTSOUND_VERSION >= 0x0800
+
+//
+// DirectSound Internal Effect Algorithms
+//
+
+
+// Gargle {DAFD8210-5711-4B91-9FE3-F75B7AE279BF}
+DEFINE_GUID(GUID_DSFX_STANDARD_GARGLE, 0xdafd8210, 0x5711, 0x4b91, 0x9f, 0xe3, 0xf7, 0x5b, 0x7a, 0xe2, 0x79, 0xbf);
+
+// Chorus {EFE6629C-81F7-4281-BD91-C9D604A95AF6}
+DEFINE_GUID(GUID_DSFX_STANDARD_CHORUS, 0xefe6629c, 0x81f7, 0x4281, 0xbd, 0x91, 0xc9, 0xd6, 0x04, 0xa9, 0x5a, 0xf6);
+
+// Flanger {EFCA3D92-DFD8-4672-A603-7420894BAD98}
+DEFINE_GUID(GUID_DSFX_STANDARD_FLANGER, 0xefca3d92, 0xdfd8, 0x4672, 0xa6, 0x03, 0x74, 0x20, 0x89, 0x4b, 0xad, 0x98);
+
+// Echo/Delay {EF3E932C-D40B-4F51-8CCF-3F98F1B29D5D}
+DEFINE_GUID(GUID_DSFX_STANDARD_ECHO, 0xef3e932c, 0xd40b, 0x4f51, 0x8c, 0xcf, 0x3f, 0x98, 0xf1, 0xb2, 0x9d, 0x5d);
+
+// Distortion {EF114C90-CD1D-484E-96E5-09CFAF912A21}
+DEFINE_GUID(GUID_DSFX_STANDARD_DISTORTION, 0xef114c90, 0xcd1d, 0x484e, 0x96, 0xe5, 0x09, 0xcf, 0xaf, 0x91, 0x2a, 0x21);
+
+// Compressor/Limiter {EF011F79-4000-406D-87AF-BFFB3FC39D57}
+DEFINE_GUID(GUID_DSFX_STANDARD_COMPRESSOR, 0xef011f79, 0x4000, 0x406d, 0x87, 0xaf, 0xbf, 0xfb, 0x3f, 0xc3, 0x9d, 0x57);
+
+// Parametric Equalization {120CED89-3BF4-4173-A132-3CB406CF3231}
+DEFINE_GUID(GUID_DSFX_STANDARD_PARAMEQ, 0x120ced89, 0x3bf4, 0x4173, 0xa1, 0x32, 0x3c, 0xb4, 0x06, 0xcf, 0x32, 0x31);
+
+// I3DL2 Environmental Reverberation: Reverb (Listener) Effect {EF985E71-D5C7-42D4-BA4D-2D073E2E96F4}
+DEFINE_GUID(GUID_DSFX_STANDARD_I3DL2REVERB, 0xef985e71, 0xd5c7, 0x42d4, 0xba, 0x4d, 0x2d, 0x07, 0x3e, 0x2e, 0x96, 0xf4);
+
+// Waves Reverberation {87FC0268-9A55-4360-95AA-004A1D9DE26C}
+DEFINE_GUID(GUID_DSFX_WAVES_REVERB, 0x87fc0268, 0x9a55, 0x4360, 0x95, 0xaa, 0x00, 0x4a, 0x1d, 0x9d, 0xe2, 0x6c);
+
+//
+// DirectSound Capture Effect Algorithms
+//
+
+
+// Acoustic Echo Canceller {BF963D80-C559-11D0-8A2B-00A0C9255AC1}
+// Matches KSNODETYPE_ACOUSTIC_ECHO_CANCEL in ksmedia.h
+DEFINE_GUID(GUID_DSCFX_CLASS_AEC, 0xBF963D80L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1);
+
+// Microsoft AEC {CDEBB919-379A-488a-8765-F53CFD36DE40}
+DEFINE_GUID(GUID_DSCFX_MS_AEC, 0xcdebb919, 0x379a, 0x488a, 0x87, 0x65, 0xf5, 0x3c, 0xfd, 0x36, 0xde, 0x40);
+
+// System AEC {1C22C56D-9879-4f5b-A389-27996DDC2810}
+DEFINE_GUID(GUID_DSCFX_SYSTEM_AEC, 0x1c22c56d, 0x9879, 0x4f5b, 0xa3, 0x89, 0x27, 0x99, 0x6d, 0xdc, 0x28, 0x10);
+
+// Noise Supression {E07F903F-62FD-4e60-8CDD-DEA7236665B5}
+// Matches KSNODETYPE_NOISE_SUPPRESS in post Windows ME DDK's ksmedia.h
+DEFINE_GUID(GUID_DSCFX_CLASS_NS, 0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5);
+
+// Microsoft Noise Suppresion {11C5C73B-66E9-4ba1-A0BA-E814C6EED92D}
+DEFINE_GUID(GUID_DSCFX_MS_NS, 0x11c5c73b, 0x66e9, 0x4ba1, 0xa0, 0xba, 0xe8, 0x14, 0xc6, 0xee, 0xd9, 0x2d);
+
+// System Noise Suppresion {5AB0882E-7274-4516-877D-4EEE99BA4FD0}
+DEFINE_GUID(GUID_DSCFX_SYSTEM_NS, 0x5ab0882e, 0x7274, 0x4516, 0x87, 0x7d, 0x4e, 0xee, 0x99, 0xba, 0x4f, 0xd0);
+
+#endif // DIRECTSOUND_VERSION >= 0x0800
+
+#endif // __DSOUND_INCLUDED__
+
+
+
+#ifdef __cplusplus
+};
+#endif // __cplusplus
+
+
diff --git a/plugins/!NotAdopted/sndVol/dxerr8.h b/plugins/!NotAdopted/sndVol/dxerr8.h
new file mode 100644
index 0000000000..c2744306e2
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dxerr8.h
@@ -0,0 +1,99 @@
+/*==========================================================================;
+ *
+ *
+ * File: dxerr8.h
+ * Content: DirectX Error Library Include File
+ *
+ ****************************************************************************/
+
+#ifndef _DXERR8_H_
+#define _DXERR8_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif //__cplusplus
+
+//
+// DXGetErrorString8
+//
+// Desc: Converts a DirectX HRESULT to a string
+//
+// Args: HRESULT hr Can be any error code from
+// D3D8 D3DX8 DDRAW DPLAY8 DMUSIC DSOUND DINPUT DSHOW
+//
+// Return: Converted string
+//
+const char* WINAPI DXGetErrorString8A(HRESULT hr);
+const WCHAR* WINAPI DXGetErrorString8W(HRESULT hr);
+
+#ifdef UNICODE
+#define DXGetErrorString8 DXGetErrorString8W
+#else
+#define DXGetErrorString8 DXGetErrorString8A
+#endif
+
+
+//
+// DXGetErrorDescription8
+//
+// Desc: Returns a string description of a DirectX HRESULT
+//
+// Args: HRESULT hr Can be any error code from
+// D3D8 D3DX8 DDRAW DPLAY8 DMUSIC DSOUND DINPUT DSHOW
+//
+// Return: String description
+//
+const char* WINAPI DXGetErrorDescription8A(HRESULT hr);
+const WCHAR* WINAPI DXGetErrorDescription8W(HRESULT hr);
+
+#ifdef UNICODE
+ #define DXGetErrorDescription8 DXGetErrorDescription8W
+#else
+ #define DXGetErrorDescription8 DXGetErrorDescription8A
+#endif
+
+
+//
+// DXTrace
+//
+// Desc: Outputs a formatted error message to the debug stream
+//
+// Args: CHAR* strFile The current file, typically passed in using the
+// __FILE__ macro.
+// DWORD dwLine The current line number, typically passed in using the
+// __LINE__ macro.
+// HRESULT hr An HRESULT that will be traced to the debug stream.
+// CHAR* strMsg A string that will be traced to the debug stream (may be NULL)
+// BOOL bPopMsgBox If TRUE, then a message box will popup also containing the passed info.
+//
+// Return: The hr that was passed in.
+//
+HRESULT WINAPI DXTraceA( const char* strFile, DWORD dwLine, HRESULT hr, const char* strMsg, BOOL bPopMsgBox );
+HRESULT WINAPI DXTraceW( const char* strFile, DWORD dwLine, HRESULT hr, const WCHAR* strMsg, BOOL bPopMsgBox );
+
+#ifdef UNICODE
+#define DXTrace DXTraceW
+#else
+#define DXTrace DXTraceA
+#endif
+
+
+//
+// Helper macros
+//
+#if defined(DEBUG) | defined(_DEBUG)
+#define DXTRACE_MSG(str) DXTrace( __FILE__, (DWORD)__LINE__, 0, str, FALSE )
+#define DXTRACE_ERR(str,hr) DXTrace( __FILE__, (DWORD)__LINE__, hr, str, TRUE )
+#define DXTRACE_ERR_NOMSGBOX(str,hr) DXTrace( __FILE__, (DWORD)__LINE__, hr, str, FALSE )
+#else
+#define DXTRACE_MSG(str) (0L)
+#define DXTRACE_ERR(str,hr) (hr)
+#define DXTRACE_ERR_NOMSGBOX(str,hr) (hr)
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif //__cplusplus
+
+#endif // _DXERR8_H_
diff --git a/plugins/!NotAdopted/sndVol/dxguid.lib b/plugins/!NotAdopted/sndVol/dxguid.lib
new file mode 100644
index 0000000000..53b96d26b2
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/dxguid.lib
Binary files differ
diff --git a/plugins/!NotAdopted/sndVol/mradio-muted.ico b/plugins/!NotAdopted/sndVol/mradio-muted.ico
new file mode 100644
index 0000000000..4efbca899c
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/mradio-muted.ico
Binary files differ
diff --git a/plugins/!NotAdopted/sndVol/mradio.ico b/plugins/!NotAdopted/sndVol/mradio.ico
new file mode 100644
index 0000000000..e95c6fe21a
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/mradio.ico
Binary files differ
diff --git a/plugins/!NotAdopted/sndVol/optionsdlg.cpp b/plugins/!NotAdopted/sndVol/optionsdlg.cpp
index 88443448c0..0b194fc046 100644
--- a/plugins/!NotAdopted/sndVol/optionsdlg.cpp
+++ b/plugins/!NotAdopted/sndVol/optionsdlg.cpp
@@ -7,13 +7,39 @@
#pragma comment(lib, "comctl32.lib")
+extern void SetRadioVolume(int value);
+extern COLORREF g_clrback;
+extern HBRUSH g_HBRback;
+extern int g_mRadioMuted;
+extern HWND hwndMRadio;
+extern HICON hIconMRadio, hIconMRadio_off;
+
+void LoadBackgroundSettings()
+{
+ HWND hwnd;
+
+ if(g_HBRback)
+ DeleteObject(g_HBRback);
+
+ if(DBGetContactSettingByte(NULL, SERVICENAME, "def_bg", 1))
+ g_clrback = GetSysColor(COLOR_3DFACE);
+ else
+ g_clrback = DBGetContactSettingDword(NULL, SERVICENAME, "bgc", GetSysColor(COLOR_3DFACE));
+
+ g_HBRback = CreateSolidBrush(g_clrback);
+ hwnd = GetFocus();
+ InvalidateRect(hwndSlider, NULL, TRUE);
+ SetFocus(hwndSlider);
+ RedrawWindow(hwndFrame, NULL, NULL, RDW_INVALIDATE | RDW_ALLCHILDREN | RDW_ERASE);
+ SetFocus(hwnd);
+}
LRESULT CALLBACK GroupWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch( uMsg )
{
case WM_LBUTTONDOWN:
- ::MessageBox(0,"LB","",0);
+ ::MessageBox(0,_T("LB"),_T(""),0);
return 0;
case WM_PAINT:
{
@@ -21,7 +47,7 @@ LRESULT CALLBACK GroupWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
HDC hdc = GetDC(hwnd);
RECT rc;
- char szTitle[256];
+ TCHAR szTitle[256];
HFONT oldfont;
int oldBk;
ZeroMemory(&rc, sizeof(rc));
@@ -30,7 +56,7 @@ LRESULT CALLBACK GroupWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
oldBk = SetBkMode(hdc, TRANSPARENT);
oldfont = (HFONT)SelectObject(hdc, (HFONT)SendMessage(hwnd, WM_GETFONT, 0,0));
SetBkMode(hdc, TRANSPARENT);
- GetWindowText(hwnd, szTitle, sizeof(szTitle));
+ GetWindowText(hwnd, szTitle, sizeof(szTitle) / sizeof(TCHAR));
DrawText(hdc, szTitle, lstrlen(szTitle), &rc, DT_SINGLELINE|DT_CALCRECT);
rc.left += 8; rc.right += 8 + 16 + 4;
@@ -54,15 +80,10 @@ LRESULT CALLBACK GroupWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
return CallWindowProc((WNDPROC)GetWindowLong(hwnd, GWL_USERDATA), hwnd, uMsg, wParam, lParam);
}
-//
-// OptionsDlgProc()
-// this handles the options page
-// verwaltet die Optionsseite
-//
+
LRESULT CALLBACK OptionsDlgProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
- switch( uMsg )
- {
+ switch( uMsg ) {
case WM_INITDIALOG:
{
HWND grp = GetDlgItem(hwndDlg, IDC_GRP);
@@ -70,6 +91,11 @@ LRESULT CALLBACK OptionsDlgProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
TranslateDialogDefault(hwndDlg);
CheckDlgButton(hwndDlg, IDC_AUTO, DBGetContactSettingByte(NULL,SERVICENAME,"AutoPreview", TRUE)?BST_CHECKED:BST_UNCHECKED);
CheckDlgButton(hwndDlg, IDC_MUTE, DBGetContactSettingByte(NULL,SERVICENAME,"MuteBtn", TRUE)?BST_CHECKED:BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_MRADIO, DBGetContactSettingByte(NULL, SERVICENAME, "mRadioAdjust", 0) ? BST_CHECKED : BST_UNCHECKED);
+ CheckDlgButton(hwndDlg, IDC_MUTERADIO, DBGetContactSettingByte(NULL, SERVICENAME, "mRadioMute", 0) ? BST_CHECKED : BST_UNCHECKED);
+
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MRADIO), ServiceExists(MS_RADIO_SETVOL));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MUTERADIO), ServiceExists(MS_RADIO_SETVOL));
hwndOptSlider = GetDlgItem(hwndDlg, IDC_VOLUME);
SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_SETRANGE, FALSE, MAKELONG(SLIDER_MIN,SLIDER_MAX));
@@ -77,61 +103,95 @@ LRESULT CALLBACK OptionsDlgProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
SetWindowLong(grp, GWL_USERDATA, GetWindowLong(grp, GWL_WNDPROC));
SetWindowLong(grp, GWL_WNDPROC, (LONG)GroupWndProc);
-
+ SendDlgItemMessage(hwndDlg, IDC_BACKCOLOR, CPM_SETCOLOUR, 0, (LPARAM)DBGetContactSettingDword(NULL, SERVICENAME, "bgc", GetSysColor(COLOR_3DFACE)));
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BACKCOLOR), DBGetContactSettingByte(NULL, SERVICENAME, "def_bg", 1) ? FALSE : TRUE);
+ CheckDlgButton(hwndDlg, IDC_DEFCOLOR, DBGetContactSettingByte(NULL, SERVICENAME, "def_bg", 1));
return TRUE;
}
case WM_HSCROLL:
- SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0);
+ {
+ int value = (DWORD)SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_GETPOS, 0, 0);
+ if(hwndSlider)
+ SendMessage(hwndSlider, TBM_SETPOS, TRUE, value);
+ else
+ DBWriteContactSettingDword(NULL, SERVICENAME, "Volume", value);
+ playSnd::SetVolume(value);
+ if(IsDlgButtonChecked(hwndDlg, IDC_AUTO))
+ SkinPlaySound("AlertMsg");
+ SetRadioVolume(value);
break;
-
+ }
case WM_COMMAND:
- if(LOWORD(wParam) == IDC_TEST)
- {
- //playSnd::g_bInOption = TRUE;
+ if(LOWORD(wParam) == IDC_TEST) {
playSnd::SetVolume((DWORD)SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_GETPOS, 0, 0));
- SkinPlaySound("RecvMsg");
- //playSnd::g_bInOption = FALSE;
+ SkinPlaySound("AlertMsg");
return FALSE;
}
+ else if(LOWORD(wParam) == IDC_MRADIO) {
+ DBWriteContactSettingByte(NULL, SERVICENAME, "mRadioAdjust", IsDlgButtonChecked(hwndDlg, IDC_MRADIO) ? 1 : 0);
+ if(IsDlgButtonChecked(hwndDlg, IDC_MRADIO) && ServiceExists(MS_RADIO_SETVOL)) {
+ int value = (DWORD)SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_GETPOS, 0, 0);
+ CallService(MS_RADIO_SETVOL, (WPARAM)value, 0);
+ }
+ }
+ else if(LOWORD(wParam) == IDC_MUTERADIO) {
+ int useSound = DBGetContactSettingByte(NULL, "Skin", "UseSound", 1);
+ int value;
+ DBWriteContactSettingByte(NULL, SERVICENAME, "mRadioMute", IsDlgButtonChecked(hwndDlg, IDC_MUTERADIO) ? 1 : 0);
+ if(ServiceExists(MS_RADIO_SETVOL)) {
+ if(IsDlgButtonChecked(hwndDlg, IDC_MUTERADIO))
+ g_mRadioMuted = !useSound;
+ value = g_mRadioMuted ? 0 : (int)SendMessage(hwndSlider, TBM_GETPOS, 0, 0);
+ CallService(MS_RADIO_SETVOL, (WPARAM)value, 0);
+ DBWriteContactSettingByte(NULL, "mRadio", "Volume", (BYTE)value);
+ SendMessage(hwndMRadio, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(g_mRadioMuted ? hIconMRadio_off : hIconMRadio));
+ }
+ }
+ else if(LOWORD(wParam) == IDC_DEFCOLOR) {
+ DBWriteContactSettingByte(NULL, SERVICENAME, "def_bg", IsDlgButtonChecked(hwndDlg, IDC_DEFCOLOR) ? 1 : 0);
+ EnableWindow(GetDlgItem(hwndDlg, IDC_BACKCOLOR), DBGetContactSettingByte(NULL, SERVICENAME, "def_bg", 1) ? FALSE : TRUE);
+ LoadBackgroundSettings();
+ }
SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0,0);
break;
case WM_NOTIFY:
- switch(((LPNMHDR)lParam)->code)
- {
+ switch(((LPNMHDR)lParam)->code) {
case NM_RELEASEDCAPTURE:
- if(IsDlgButtonChecked(hwndDlg, IDC_AUTO) == BST_CHECKED)
- {
+ if(IsDlgButtonChecked(hwndDlg, IDC_AUTO) == BST_CHECKED) {
int value = (DWORD)SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_GETPOS, 0, 0);
- if(hwndSlider) SendMessage(hwndSlider, TBM_SETPOS, TRUE, value/SLIDER_DIV);
+ if(hwndSlider)
+ SendMessage(hwndSlider, TBM_SETPOS, TRUE, value);
- //playSnd::g_bInOption = TRUE;
playSnd::SetVolume(value);
- SkinPlaySound("RecvMsg");
- //playSnd::g_bInOption = FALSE;
+ SkinPlaySound("AlertMsg");
+ SetRadioVolume(value);
}
break;
case PSN_APPLY:
{
int value = (DWORD)SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_GETPOS, 0, 0);
- if(hwndSlider) SendMessage(hwndSlider, TBM_SETPOS, TRUE, value/SLIDER_DIV);
+ if(hwndSlider)
+ SendMessage(hwndSlider, TBM_SETPOS, TRUE, value);
playSnd::SetVolume(value);
+
DBWriteContactSettingDword(NULL, SERVICENAME, "Volume", value);
autoPreview = (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_AUTO) == BST_CHECKED);
DBWriteContactSettingByte(NULL, SERVICENAME, "AutoPreview", autoPreview);
value = (BYTE)(IsDlgButtonChecked(hwndDlg, IDC_MUTE) == BST_CHECKED);
DBWriteContactSettingByte(NULL, SERVICENAME, "MuteBtn", value);
PostMessage(hwndFrame, WM_USER, value, 0);
-
+ DBWriteContactSettingDword(NULL, SERVICENAME, "bgc", (DWORD)SendDlgItemMessage(hwndDlg, IDC_BACKCOLOR, CPM_GETCOLOUR, 0, 0));
+ LoadBackgroundSettings();
return TRUE;
}
case PSN_RESET:
{
int value = DBGetContactSettingDword(NULL,SERVICENAME,"Volume",100);
SendDlgItemMessage(hwndDlg, IDC_VOLUME, TBM_SETPOS, TRUE, value);
- if(hwndSlider) SendMessage(hwndSlider, TBM_SETPOS, TRUE, value/SLIDER_DIV);
+ if(hwndSlider)
+ SendMessage(hwndSlider, TBM_SETPOS, TRUE, value);
playSnd::SetVolume(value);
-
return TRUE;
}
}
@@ -141,6 +201,5 @@ LRESULT CALLBACK OptionsDlgProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
hwndOptSlider = NULL;
return FALSE;
}
-
return FALSE;
}
diff --git a/plugins/!NotAdopted/sndVol/playSnd.cpp b/plugins/!NotAdopted/sndVol/playSnd.cpp
index 9b084ca4f1..ccc49c7965 100644
--- a/plugins/!NotAdopted/sndVol/playSnd.cpp
+++ b/plugins/!NotAdopted/sndVol/playSnd.cpp
@@ -32,7 +32,7 @@ void Destroy()
// Name: LoadSegmentFile()
// Desc:
//-----------------------------------------------------------------------------
-HRESULT LoadSegmentFile( char* strFileName )
+HRESULT LoadSegmentFile( TCHAR *strFileName )
{
HRESULT hr;
@@ -57,21 +57,21 @@ HRESULT LoadSegmentFile( char* strFileName )
}
else
{
- if( FAILED( hr = g_pMusicManager->SetSearchDirectory( "" ) ) )
+ if( FAILED( hr = g_pMusicManager->SetSearchDirectory( _T("") ) ) )
return DXTRACE_ERR( TEXT("SetSearchDirectory"), hr );
}
// For DirectMusic must know if the file is a standard MIDI file or not
// in order to load the correct instruments.
BOOL bMidiFile = FALSE;
- if( strstr( strFileName, ".mid" ) != NULL ||
- strstr( strFileName, ".rmi" ) != NULL )
+ if( _tcsstr( strFileName, _T(".mid") ) != NULL ||
+ _tcsstr( strFileName, _T(".rmi") ) != NULL )
{
bMidiFile = TRUE;
}
BOOL bWavFile = FALSE;
- if( strstr( strFileName, ".wav" ) != NULL )
+ if( _tcsstr( strFileName, _T(".wav") ) != NULL )
{
bWavFile = TRUE;
}
@@ -89,26 +89,25 @@ HRESULT LoadSegmentFile( char* strFileName )
BOOL WINAPI PlaySound(char* pszSound, HMODULE hmod, DWORD fdwSound)
{
- /*
- if(!g_bInOption)
- {
- DWORD volume = (DWORD)DBGetContactSettingDword(NULL, SERVICENAME, "Volume", 100);
-
- if(volume != g_dwVolume)
- {
- g_dwVolume = volume;
- playSnd::SetVolume(g_dwVolume);
- }
- }
- */
HRESULT hr;
+#if defined(UNICODE)
+ TCHAR ptszSound[MAX_PATH];
+ DWORD cpSys = CP_ACP;
+
+ MultiByteToWideChar(cpSys, 0, pszSound, -1, ptszSound, MAX_PATH);
+ ptszSound[MAX_PATH - 1] = 0;
+ if( FAILED( hr = LoadSegmentFile(ptszSound) ) )
+ return FALSE;
+ if( FAILED( hr = g_pMusicSegment->SetRepeats( 0 ) ) )
+ return FALSE;
+#else
if( FAILED( hr = LoadSegmentFile(pszSound) ) )
return FALSE;
if( FAILED( hr = g_pMusicSegment->SetRepeats( 0 ) ) )
return FALSE;
-
+#endif
// Play the segment and wait. The DMUS_SEGF_BEAT indicates to play on the
// next beat if there is a segment currently playing.
if( FAILED( hr = g_pMusicSegment->Play( DMUS_SEGF_BEAT ) ) )
@@ -120,7 +119,7 @@ BOOL WINAPI PlaySound(char* pszSound, HMODULE hmod, DWORD fdwSound)
BOOL SetVolume(long Value)
{
- long value = (int)(log10(Value)/2.0*5000.0-4000.0);
+ long value = (int)(log10((float)Value)/2.0*5000.0-4000.0);
IDirectMusicPerformance* pPerf = NULL;
if( g_pMusicManager )
pPerf = g_pMusicManager->GetPerformance();
diff --git a/plugins/!NotAdopted/sndVol/playSnd.h b/plugins/!NotAdopted/sndVol/playSnd.h
index f9a6c3299f..b3582c0790 100644
--- a/plugins/!NotAdopted/sndVol/playSnd.h
+++ b/plugins/!NotAdopted/sndVol/playSnd.h
@@ -1,8 +1,8 @@
#include <windows.h>
#include <mmsystem.h>
#include <basetsd.h>
-#include <dmusicc.h>
-#include <dmusici.h>
+#include "dmusicc.h"
+#include "dmusici.h"
#include <dxerr8.h>
#include <tchar.h>
#include "DMUtil.h"
diff --git a/plugins/!NotAdopted/sndVol/plugin.cpp b/plugins/!NotAdopted/sndVol/plugin.cpp
index f179dbb645..016c0ad3e1 100644
--- a/plugins/!NotAdopted/sndVol/plugin.cpp
+++ b/plugins/!NotAdopted/sndVol/plugin.cpp
@@ -10,46 +10,111 @@
HINSTANCE hInst;
PLUGINLINK *pluginLink;
-HWND hwndFrame = NULL, hwndMute = NULL, hwndSlider = NULL, hwndOptSlider = NULL;
+HWND hwndFrame = NULL, hwndMute = NULL, hwndSlider = NULL, hwndOptSlider = NULL, hwndMRadio = 0;
HANDLE hHookSkinPlayingSound, hHookDbSettingChange, hHookSkinIconsChanged;
HHOOK hHookMouse;
bool showMute = TRUE;
+extern void LoadBackgroundSettings();
+
+HBRUSH g_HBRback = 0;
+COLORREF g_clrback = 0;
+
+#if defined(UNICODE)
+ char szTitle[] = "sndVol (UNICODE)";
+#else
+ char szTitle[] = "sndVol";
+#endif
-char szTitle[] = "sndVol";
bool isEnabled = FALSE;
HICON hSoundOn = NULL, hSoundOff = NULL;
+HICON hIconMRadio = 0, hIconMRadio_off = 0;
+
int isMuteVisible = FALSE;
int autoPreview = FALSE;
-char *szIconId[2] = {"sndVol_Off", "sndVol_On"};
-char *szIconName[2] = {"Off", "On"};
-int iIconId[2] = {-IDI_SND_OFF, -IDI_SND_ON};
+char *szIconId[4] = {"sndVol_Off", "sndVol_On", "mradio_off", "mradio_on"};
+char *szIconName[4] = {"Off", "On", "mRadio off", "mRadio on"};
+int iIconId[4] = {-IDI_SND_OFF, -IDI_SND_ON, -IDI_MRAADIO_OFF, -IDI_MRADIO};
+int g_mRadioMuted = 0;
+/*
PLUGININFO pluginInfo={
sizeof( PLUGININFO ),
szTitle,
- PLUGIN_MAKE_VERSION( 0,0,1,1 ),
- "Volume control 4 Miranda's events sound",
- "Denis Stanishevskiy // StDenis",
+ PLUGIN_MAKE_VERSION( 0,0,2,2 ),
+#if defined(UNICODE)
+ "Volume control for Mirandas event sounds and mRadio (UNICODE)",
+#else
+ "Volume control for Mirandas event sounds and mRadio",
+#endif
+ "Denis Stanishevskiy / StDenis",
"stdenformiranda(at)fromru(dot)com",
- "Copyright (c) 2005, Denis Stanishevskiy",
+ "Copyright (c) 2005-2006, Denis Stanishevskiy, modifications and mRadio support by Nightwish - silvercircle(at)gmail(dot)com",
"",
0, 0
};
+*/
+
+PLUGININFOEX pluginInfo = {
+ sizeof(PLUGININFOEX),
+ szTitle,
+ PLUGIN_MAKE_VERSION(0, 0, 3, 0),
+#if defined(UNICODE)
+ "Volume control for Mirandas event sounds and mRadio (UNICODE)",
+#else
+ "Volume control for Mirandas event sounds and mRadio",
+#endif
+ "Denis Stanishevskiy / StDenis",
+ "stdenformiranda(at)fromru(dot)com",
+ "Copyright (c) 2005-2006, Denis Stanishevskiy, modifications and mRadio support by Nightwish - silvercircle(at)gmail(dot)com",
+ "",
+ UNICODE_AWARE,
+ 0,
+#ifdef _UNICODE
+ { 0xb0733420, 0x7bf2, 0x4c08, { 0xb2, 0xbf, 0xf2, 0x63, 0xdf, 0x72, 0x42, 0xc9 }}
+#else
+ { 0x35235260, 0x3d3d, 0x4b81, { 0xbe, 0x2e, 0x7f, 0x95, 0xdb, 0xad, 0x1a, 0x23 }}
+#endif
+};
+
+void SetRadioVolume(int value)
+{
+ if(ServiceExists(MS_RADIO_SETVOL) && DBGetContactSettingByte(NULL,SERVICENAME,"mRadioAdjust", FALSE)) {
+ int useSound = DBGetContactSettingByte(NULL, "Skin", "UseSound", 1);
+
+ if(g_mRadioMuted)
+ return;
+
+ if(useSound || !DBGetContactSettingByte(NULL, SERVICENAME, "mRadioMute", 0) || !g_mRadioMuted)
+ CallService(MS_RADIO_SETVOL, (WPARAM)value, 0);
+ }
+}
+
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
hInst=hinstDLL;
if(fdwReason == DLL_PROCESS_ATTACH)
- DisableThreadLibraryCalls(GetModuleHandle("sndvol"));
+ DisableThreadLibraryCalls(GetModuleHandle(_T("sndvol")));
return TRUE;
}
-__declspec(dllexport) PLUGININFO* MirandaPluginInfo(DWORD mirandaVersion)
+extern "C" __declspec(dllexport) PLUGININFOEX *MirandaPluginInfoEx(DWORD mirandaVersion)
{
+ if (mirandaVersion < PLUGIN_MAKE_VERSION(0, 8, 0, 0))
+ return NULL;
return &pluginInfo;
}
+#define MIID_SNDVOL {0x50ea8870, 0x1c68, 0x4962, { 0xbc, 0xc1, 0x57, 0x73, 0x45, 0x4e, 0x3d, 0x26 }}
+
+extern "C" static const MUUID interfaces[] = {MIID_TESTPLUGIN, MIID_SNDVOL, MIID_LAST};
+
+extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void)
+{
+ return interfaces;
+}
+
HANDLE hMenuItem;
int OnSkinPlayingSound(WPARAM wParam,LPARAM lParam)
@@ -64,29 +129,44 @@ int OnSkinIconsChanged(WPARAM wParam,LPARAM lParam)
{
hSoundOff = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)szIconId[0]);
hSoundOn = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)szIconId[1]);
+ hIconMRadio_off = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)szIconId[2]);
+ hIconMRadio = (HICON)CallService(MS_SKIN2_GETICON, 0, (LPARAM)szIconId[3]);
int useSound = DBGetContactSettingByte(NULL,"Skin","UseSound",1);
DBWriteContactSettingByte(NULL,"Skin","UseSound",useSound);
SendMessage(hwndMute, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(useSound?hSoundOn:hSoundOff));
+ SendMessage(hwndMRadio, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(g_mRadioMuted ? hIconMRadio_off : hIconMRadio));
return 0;
}
int OnSettingChanged(WPARAM wParam,LPARAM lParam)
{
- if(wParam != 0 || lParam == NULL) return 0;
+ if(wParam != 0 || lParam == NULL)
+ return 0;
{
DBCONTACTWRITESETTING *dbcws=(DBCONTACTWRITESETTING*)lParam;
- if(!strcmp(dbcws->szModule,"Skin"))
- if(!strcmp(dbcws->szSetting,"UseSound"))
- {
+ if(!strcmp(dbcws->szModule,"Skin")) {
+ if(!strcmp(dbcws->szSetting,"UseSound")) {
int useSound = dbcws->value.bVal;
SendMessage(hwndMute, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(useSound?hSoundOn:hSoundOff));
-
+ if(ServiceExists(MS_RADIO_SETVOL) && DBGetContactSettingByte(NULL,SERVICENAME,"mRadioMute", FALSE)) {
+ if(useSound) {
+ int value = (int)SendMessage(hwndSlider, TBM_GETPOS, 0, 0);
+ CallService(MS_RADIO_SETVOL, (WPARAM)value, 0);
+ }
+ else
+ CallService(MS_RADIO_SETVOL, 0, 0);
+ }
return 0;
- };
+ }
+ }
+ else if(!strcmp(dbcws->szModule, "mRadio") && !strcmp(dbcws->szSetting, "Volume")) {
+ g_mRadioMuted = (DBGetContactSettingByte(NULL, "mRadio", "Volume", 50) == 0) ? TRUE : FALSE;
+ SendMessage(hwndMRadio, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(g_mRadioMuted ? hIconMRadio_off : hIconMRadio));
+ return 0;
+ }
}
-
return 0;
}
@@ -97,13 +177,13 @@ static int OnOptionsInit(WPARAM wParam,LPARAM lParam)
ZeroMemory(&odp, sizeof(odp));
odp.cbSize = sizeof(odp);
- odp.pszGroup = Translate("Events");
+ odp.ptszGroup = TranslateT("Events");
odp.position = -200000000;
odp.hInstance = hInst;
- odp.pszTemplate = MAKEINTRESOURCE(IDD_OPT);
- odp.pszTitle = Translate("Sounds Volume");
+ odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPT);
+ odp.ptszTitle = TranslateT("Sounds Volume");
odp.pfnDlgProc = (DLGPROC)OptionsDlgProc;
- odp.flags = ODPF_BOLDGROUPS;
+ odp.flags = ODPF_BOLDGROUPS | ODPF_TCHAR;
CallService(MS_OPT_ADDPAGE, wParam, (LPARAM)&odp);
return 0;
@@ -116,163 +196,208 @@ BOOL __inline IsMouseInside(HWND hwnd)
GetCursorPos(&pt);
hwndAtPt = WindowFromPoint(pt);
- while(hwndAtPt != NULL)
- {
+ while(hwndAtPt != NULL) {
if(hwndAtPt == hwnd)
return TRUE;
hwndAtPt = GetParent(hwndAtPt);
}
return FALSE;
- //return (hwndAtPt == hwnd) || (GetParent(hwndAtPt) == hwnd);
- //GetWindowRect(hwnd, &rc);
- //return PtInRect(&rc, pt);
}
LRESULT CALLBACK OnMouseHook(int code, WPARAM wParam, LPARAM lParam)
{
- if(code >= 0)
- {
- if(wParam == WM_MOUSEWHEEL)
- {
- //MOUSEHOOKSTRUCTEX *mhk = (MOUSEHOOKSTRUCTEX*)lParam;
- MSLLHOOKSTRUCT *mhk = (MSLLHOOKSTRUCT*)lParam;
+ if(code >= 0) {
+ if(wParam == WM_MOUSEWHEEL) {
+ MOUSEHOOKSTRUCTEX *mhk = (MOUSEHOOKSTRUCTEX*)lParam;
- if(IsMouseInside(hwndSlider))
- {
+ if(IsMouseInside(hwndSlider)) {
int count = (short)HIWORD(mhk->mouseData);
-
PostMessage(hwndSlider, WM_MOUSEWHEEL, MAKEWPARAM(0,-count), MAKELPARAM(mhk->pt.x, mhk->pt.y));
-
return 1;
}
-
}
}
return CallNextHookEx(hHookMouse, code, wParam, lParam);
}
+static WNDPROC OldSliderWndProc = 0;
+static LRESULT CALLBACK SliderWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+ switch(msg) {
+ case WM_ERASEBKGND:
+ return TRUE;
+ }
+ return(CallWindowProc(OldSliderWndProc, hwnd, msg, wParam, lParam));
+}
static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
- switch(msg)
- {
+ switch(msg) {
case WM_CREATE:
{
#define MUTE_W 20
#define MUTE_H 20
isMuteVisible = DBGetContactSettingByte(NULL,SERVICENAME,"MuteBtn", TRUE);
- hwndMute = CreateWindow(MIRANDABUTTONCLASS,
- "",
- WS_CHILD | (isMuteVisible?WS_VISIBLE:0),
- 1,
- 1,
- MUTE_W,
- MUTE_H,
- hwnd,
- (HMENU)0,
- (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
- NULL);
+ hwndMute = CreateWindow(MIRANDABUTTONCLASS, _T(""), WS_CHILD | (isMuteVisible?WS_VISIBLE:0), 1, 1,
+ MUTE_W, MUTE_H, hwnd, (HMENU)0, (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
SendMessage(hwndMute, BUTTONSETASFLATBTN,0,0);
SendMessage(hwndMute, BM_SETIMAGE,IMAGE_ICON,(LPARAM)hSoundOn);
- hwndSlider = CreateWindow(TRACKBAR_CLASS,
- "",
- WS_CHILD | WS_VISIBLE | TBS_NOTICKS,
- MUTE_W+1,
- 1,
- 120,
- MUTE_W,
- hwnd,
- (HMENU)0,
- (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE),
- NULL);
- //SendMessage(hwndSlider, TBM_SETRANGE, FALSE, MAKELONG(-10000/3,1000));
- SendMessage(hwndSlider, TBM_SETRANGE, FALSE, MAKELONG(SLIDER_MIN, SLIDER_MAX/SLIDER_DIV));
- SendMessage(hwndSlider, TBM_SETPOS, TRUE, DBGetContactSettingDword(NULL,SERVICENAME,"Volume",1000)/SLIDER_DIV);
-
- //SetWindowLong(hwndSlider, GWL_USERDATA, GetWindowLong(hwndSlider, GWL_WNDPROC));
- //SetWindowLong(hwndSlider, GWL_WNDPROC, (LONG)SliderWndProc);
+ hwndSlider = CreateWindow(TRACKBAR_CLASS, _T(""), WS_CHILD | WS_VISIBLE | TBS_NOTICKS | TBS_TOOLTIPS, MUTE_W+1, 1, 120,
+ MUTE_W, hwnd, (HMENU)0, (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
+ SendMessage(hwndSlider, TBM_SETRANGE, FALSE, MAKELONG(SLIDER_MIN, SLIDER_MAX));
+ SendMessage(hwndSlider, TBM_SETPOS, TRUE, DBGetContactSettingDword(NULL,SERVICENAME,"Volume",80));
+ OldSliderWndProc = (WNDPROC)SetWindowLong(hwndSlider, GWL_WNDPROC, (LONG)SliderWndProc);
+ SendMessage(hwndMute, BUTTONADDTOOLTIP, (WPARAM)Translate("Click to toggle all sounds"), 0);
+
+ if(ServiceExists(MS_RADIO_SETVOL)) {
+ hwndMRadio = CreateWindow(MIRANDABUTTONCLASS, _T(""), WS_CHILD | (isMuteVisible?WS_VISIBLE:0), 1, 1,
+ MUTE_W, MUTE_H, hwnd, (HMENU)0, (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
+ SendMessage(hwndMRadio, BUTTONSETASFLATBTN,0,0);
+ SendMessage(hwndMRadio, BUTTONADDTOOLTIP, (WPARAM)Translate("Click to mute mRadio only, right click for mRadio settings"), 0);
+ SendMessage(hwndMRadio, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(g_mRadioMuted ? hIconMRadio_off : hIconMRadio));
+ }
break;
}
case WM_COMMAND:
- if((HWND)lParam == hwndMute)
- {
+ if((HWND)lParam == hwndMute) {
int useSound = !DBGetContactSettingByte(NULL,"Skin","UseSound",1);
DBWriteContactSettingByte(NULL,"Skin","UseSound",useSound);
SendMessage(hwndMute, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(useSound?hSoundOn:hSoundOff));
}
+ else if((HWND)lParam == hwndMRadio) {
+ int value;
+
+ g_mRadioMuted = !g_mRadioMuted;
+ value = g_mRadioMuted ? 0 : (int)SendMessage(hwndSlider, TBM_GETPOS, 0, 0);
+ CallService(MS_RADIO_SETVOL, (WPARAM)value, 0);
+ DBWriteContactSettingByte(NULL, "mRadio", "Volume", (BYTE)value);
+ SendMessage(hwndMRadio, BM_SETIMAGE,IMAGE_ICON,(LPARAM)(g_mRadioMuted ? hIconMRadio_off : hIconMRadio));
+ }
break;
- /*
- case WM_MOUSEWHEEL:
- {
- int count = HIWORD(wParam);
+ case WM_CONTEXTMENU:
+ if(IsMouseInside(hwndMRadio))
+ CallService("mRadio/Settings", 0, 0);
break;
- }
- */
case WM_USER:
ShowWindow(hwndMute, wParam?SW_SHOW:SW_HIDE);
isMuteVisible = wParam;
case WM_HSCROLL:
{
- int value = (DWORD)SendMessage(hwndSlider, TBM_GETPOS, 0, 0)*SLIDER_DIV;
+ int value = (DWORD)SendMessage(hwndSlider, TBM_GETPOS, 0, 0);
if(hwndOptSlider)
SendMessage(hwndOptSlider, TBM_SETPOS, TRUE, value);
else
DBWriteContactSettingDword(NULL, SERVICENAME, "Volume", value);
playSnd::SetVolume(value);
- SkinPlaySound("RecvMsg");
+ if(DBGetContactSettingByte(NULL,SERVICENAME,"AutoPreview", FALSE))
+ SkinPlaySound("AlertMsg");
+ SetRadioVolume(value);
break;
}
case WM_SIZE:
{
RECT rect;
- // = DBGetContactSettingByte(NULL,SERVICENAME,"MuteBtn", TRUE);//IsWindowVisible(hwndMute);
GetClientRect(hwnd,&rect);
-#define SLIDER_H 18
+ #define SLIDER_H 18
+ if(hwndMute)
+ MoveWindow(hwndMute, 1, 1, MUTE_W, MUTE_H, FALSE);
SetWindowPos(hwndSlider, 0,
- rect.left+(isMuteVisible?MUTE_W:0)+1, rect.top+1+ (MUTE_H-SLIDER_H)/2, rect.right-rect.left-3-(isMuteVisible?MUTE_W:0), SLIDER_H,
+ rect.left+(isMuteVisible?MUTE_W:0)+1, rect.top+1+ (MUTE_H-SLIDER_H)/2, rect.right-rect.left-3-(isMuteVisible?MUTE_W:0)-(ServiceExists(MS_RADIO_SETVOL) ? MUTE_W:0), SLIDER_H,
SWP_NOZORDER);
+ if(hwndMRadio)
+ MoveWindow(hwndMRadio, rect.right - MUTE_W, 1, MUTE_W, MUTE_H, FALSE);
InvalidateRect(hwnd, &rect, FALSE);
return 0;
}
+ case WM_CTLCOLORSTATIC:
+ {
+ if((HANDLE)lParam == hwndSlider) {
+ HDC dc = (HDC)wParam;
+
+ SetBkColor(dc, g_clrback);
+ return((BOOL)g_HBRback);
+ }
+ break;
+ }
+ case WM_ERASEBKGND:
+ {
+ HDC dc = (HDC)wParam;
+ RECT rc;
+
+ GetClientRect(hwnd, &rc);
+ FillRect(dc, &rc, g_HBRback);
+ return TRUE;
+ }
case WM_NOTIFY:
switch(((LPNMHDR)lParam)->code)
{
case NM_RELEASEDCAPTURE:
{
- int value = (DWORD)SendMessage(hwndSlider, TBM_GETPOS, 0, 0)*SLIDER_DIV;
+ int value = (DWORD)SendMessage(hwndSlider, TBM_GETPOS, 0, 0); //*SLIDER_DIV;
DBWriteContactSettingDword(NULL, SERVICENAME, "Volume", value);
if(hwndOptSlider) SendMessage(hwndOptSlider, TBM_SETPOS, TRUE, value);
playSnd::SetVolume(value);
- //SkinPlaySound("RecvMsg");
-
+ SetRadioVolume(value);
break;
}
}
break;
+ case WM_DESTROY:
+ if(hwndSlider && IsWindow(hwndSlider) && OldSliderWndProc != 0)
+ SetWindowLong(hwndSlider, GWL_WNDPROC, (LONG)OldSliderWndProc);
+ break;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
-#define WndClass "SNDVOL_WND"
+#define WndClass _T("SNDVOL_WND")
-int OnModulesLoaded(WPARAM wparam,LPARAM lparam)
+static HANDLE g_ShutDownEvent;
+static HANDLE g_hFrame = 0;
+
+static int ShutDownPlugin(WPARAM wParam, LPARAM lParam)
{
+ UnhookEvent(g_ShutDownEvent);
+
if(!ServiceExists(MS_SKIN2_ADDICON))
{
+ DestroyIcon(hSoundOff);
+ DestroyIcon(hSoundOn);
+ UnhookEvent(hHookSkinIconsChanged);
+ }
+ UnhookEvent(hHookSkinPlayingSound);
+ playSnd::Destroy();
+ if(g_HBRback)
+ DeleteObject(g_HBRback);
+
+ CallService(MS_CLIST_FRAMES_REMOVEFRAME, (WPARAM)g_hFrame, 0);
+ return 0;
+}
+
+static int OnModulesLoaded(WPARAM wparam,LPARAM lparam)
+{
+ int useSound;
+
+ g_mRadioMuted = (DBGetContactSettingByte(NULL, "mRadio", "Volume", 50) == 0) ? TRUE : FALSE;
+
+ g_ShutDownEvent = HookEvent(ME_SYSTEM_OKTOEXIT, ShutDownPlugin);
+
+ if(!ServiceExists(MS_SKIN2_ADDICON)) {
hSoundOn = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_SND_ON),IMAGE_ICON,GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),0);
hSoundOff = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_SND_OFF),IMAGE_ICON,GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),0);
+ hIconMRadio = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_MRADIO),IMAGE_ICON,GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),0);
+ hIconMRadio_off = (HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_MRAADIO_OFF),IMAGE_ICON,GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),0);
}
- else
- {
+ else {
SKINICONDESC sid;
char ModuleName[MAX_PATH];
sid.cbSize = sizeof(sid);
sid.pszSection = Translate("Sound Volume");
- GetModuleFileName(hInst, ModuleName, sizeof(ModuleName));
+ GetModuleFileNameA(hInst, ModuleName, sizeof(ModuleName));
sid.pszDefaultFile = ModuleName;
#define myLOAD_ICON(n, result)\
sid.pszName = szIconId[n];\
@@ -283,11 +408,12 @@ int OnModulesLoaded(WPARAM wparam,LPARAM lparam)
myLOAD_ICON(0, hSoundOff);
myLOAD_ICON(1, hSoundOn);
-
+ myLOAD_ICON(2, hIconMRadio_off);
+ myLOAD_ICON(3, hIconMRadio);
+
hHookSkinIconsChanged = HookEvent(ME_SKIN2_ICONSCHANGED, OnSkinIconsChanged);
}
- if(ServiceExists(MS_CLIST_FRAMES_ADDFRAME))
- {
+ if(ServiceExists(MS_CLIST_FRAMES_ADDFRAME)) {
WNDCLASSEX wcx;
CLISTFrame f;
@@ -305,21 +431,12 @@ int OnModulesLoaded(WPARAM wparam,LPARAM lparam)
wcx.lpszMenuName = NULL;
wcx.lpszClassName = WndClass;
wcx.hIconSm = NULL;
- //
+
RegisterClassEx(&wcx);
- //
- hwndFrame = CreateWindow(WndClass,
- NULL,
- WS_CHILD|WS_VISIBLE,
- 0,
- 0,
- 120,
- MUTE_H+2,
- (HWND)CallService( MS_CLUI_GETHWND, 0, 0 ),
- NULL,
- hInst,
- NULL);
- //
+
+ hwndFrame = CreateWindow(WndClass, NULL, WS_CHILD | WS_VISIBLE, 0, 0, 120, MUTE_H+2,
+ (HWND)CallService( MS_CLUI_GETHWND, 0, 0 ), NULL, hInst, NULL);
+
ZeroMemory(&f, sizeof(CLISTFrame));
f.align = alBottom;
f.cbSize = sizeof(CLISTFrame);
@@ -327,13 +444,21 @@ int OnModulesLoaded(WPARAM wparam,LPARAM lparam)
f.Flags = F_VISIBLE;
f.hWnd = hwndFrame;
f.name = "SoundVolume";
- CallService(MS_CLIST_FRAMES_ADDFRAME,(int)&f,0);
+ g_hFrame = (HANDLE)CallService(MS_CLIST_FRAMES_ADDFRAME,(int)&f,0);
}
+ else
+ MessageBox(0, _T("Frame services not found. The sound volume plugin needs a multiwindow-enabled contact list"), _T("Critical"), MB_OK | MB_ICONERROR);
+
+ useSound = DBGetContactSettingByte(NULL, "Skin", "UseSound", 1);
+ DBWriteContactSettingByte(NULL, "Skin", "UseSound", !useSound);
+ DBWriteContactSettingByte(NULL, "Skin", "UseSound", useSound);
+
+ LoadBackgroundSettings();
return 0;
}
-int __declspec(dllexport) Load(PLUGINLINK *link)
+extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
{
pluginLink=link;
@@ -342,21 +467,12 @@ int __declspec(dllexport) Load(PLUGINLINK *link)
HookEvent(ME_OPT_INITIALISE, OnOptionsInit);
HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded);
hHookDbSettingChange = HookEvent(ME_DB_CONTACT_SETTINGCHANGED, OnSettingChanged);
- hHookMouse = SetWindowsHookEx(WH_MOUSE_LL, &OnMouseHook, hInst, 0);
- //hHookMouse = SetWindowsHookEx(WH_MOUSE, &OnMouseHook, hInst, 0);
+ hHookMouse = SetWindowsHookEx(WH_MOUSE, OnMouseHook, hInst, 0);
return 0;
}
-int __declspec(dllexport) Unload(void)
+extern "C" int __declspec(dllexport) Unload(void)
{
- if(!ServiceExists(MS_SKIN2_ADDICON))
- {
- DestroyIcon(hSoundOff);
- DestroyIcon(hSoundOn);
- UnhookEvent(hHookSkinIconsChanged);
- }
- UnhookEvent(hHookSkinPlayingSound);
- playSnd::Destroy();
return 0;
-} \ No newline at end of file
+}
diff --git a/plugins/!NotAdopted/sndVol/plugin.h b/plugins/!NotAdopted/sndVol/plugin.h
index 529676a289..dce6605048 100644
--- a/plugins/!NotAdopted/sndVol/plugin.h
+++ b/plugins/!NotAdopted/sndVol/plugin.h
@@ -1,6 +1,6 @@
-#include "AggressiveOptimize.h"
#include <windows.h>
#include <commctrl.h>
+#include <stdio.h>
#include "../../include/newpluginapi.h"
#include "../../include/m_system.h"
#include "../../include/m_database.h"
@@ -26,9 +26,11 @@ extern HICON hSoundOn, hSoundOff;
extern int autoPreview;
#define SLIDER_MIN 1
-#define SLIDER_MAX 90
+#define SLIDER_MAX 100
#define SLIDER_DIV 6
+#define MS_RADIO_SETVOL "mRadio/SetVol"
+
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/plugins/!NotAdopted/sndVol/resource.h b/plugins/!NotAdopted/sndVol/resource.h
index 5d4781b86e..4646bcc9b7 100644
--- a/plugins/!NotAdopted/sndVol/resource.h
+++ b/plugins/!NotAdopted/sndVol/resource.h
@@ -1,24 +1,31 @@
//{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
+// Microsoft Visual C++ generated include file.
// Used by sndVol.rc
//
#define IDD_OPT 101
#define IDI_SND_ON 103
#define IDI_SND_OFF 104
+#define IDI_MRADIO 105
+#define IDI_MRAADIO_OFF 107
#define IDC_SLIDER1 1000
#define IDC_VOLUME 1000
#define IDC_TEST 1001
#define IDC_AUTO 1002
#define IDC_GRP 1003
#define IDC_MUTE 1004
+#define IDC_MRADIO 1005
+#define IDC_MUTERADIO 1006
+#define IDC_CUSTOM1 1007
+#define IDC_BACKCOLOR 1008
+#define IDC_DEFCOLOR 1009
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE 104
+#define _APS_NEXT_RESOURCE_VALUE 108
#define _APS_NEXT_COMMAND_VALUE 40001
-#define _APS_NEXT_CONTROL_VALUE 1004
+#define _APS_NEXT_CONTROL_VALUE 1010
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
diff --git a/plugins/!NotAdopted/sndVol/sndVol.aps b/plugins/!NotAdopted/sndVol/sndVol.aps
new file mode 100644
index 0000000000..155b97c18a
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/sndVol.aps
Binary files differ
diff --git a/plugins/!NotAdopted/sndVol/sndVol.dsp b/plugins/!NotAdopted/sndVol/sndVol.dsp
index aae0d71298..24eb2355cc 100644
--- a/plugins/!NotAdopted/sndVol/sndVol.dsp
+++ b/plugins/!NotAdopted/sndVol/sndVol.dsp
@@ -1,24 +1,25 @@
# Microsoft Developer Studio Project File - Name="sndVol" - Package Owner=<4>
# Microsoft Developer Studio Generated Build File, Format Version 6.00
-# ** DO NOT EDIT **
+# ** NICHT BEARBEITEN **
# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
CFG=sndVol - Win32 Debug
-!MESSAGE This is not a valid makefile. To build this project using NMAKE,
-!MESSAGE use the Export Makefile command and run
+!MESSAGE Dies ist kein gültiges Makefile. Zum Erstellen dieses Projekts mit NMAKE
+!MESSAGE verwenden Sie den Befehl "Makefile exportieren" und führen Sie den Befehl
!MESSAGE
!MESSAGE NMAKE /f "sndVol.mak".
!MESSAGE
-!MESSAGE You can specify a configuration when running NMAKE
-!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE Sie können beim Ausführen von NMAKE eine Konfiguration angeben
+!MESSAGE durch Definieren des Makros CFG in der Befehlszeile. Zum Beispiel:
!MESSAGE
!MESSAGE NMAKE /f "sndVol.mak" CFG="sndVol - Win32 Debug"
!MESSAGE
-!MESSAGE Possible choices for configuration are:
+!MESSAGE Für die Konfiguration stehen zur Auswahl:
!MESSAGE
-!MESSAGE "sndVol - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
-!MESSAGE "sndVol - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "sndVol - Win32 Release" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "sndVol - Win32 Debug" (basierend auf "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "sndVol - Win32 Release Unicode" (basierend auf "Win32 (x86) Dynamic-Link Library")
!MESSAGE
# Begin Project
@@ -43,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "sndVol_EXPORTS" /YX /FD /c
-# ADD CPP /nologo /MD /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "sndVol_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O1 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "sndVol_EXPORTS" /YX /FD /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
# ADD BASE RSC /l 0x809 /d "NDEBUG"
@@ -53,7 +54,8 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
-# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib dxerr8.lib dxguid.lib advapi32.lib winmm.lib /nologo /dll /map /machine:I386 /out:"..\..\bin\Release\plugins\sndVol.dll"
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib dxerr8.lib dxguid.lib advapi32.lib winmm.lib /nologo /dll /map /machine:I386 /out:"..\..\bin\Release\plugins\sndVol.dll" /opt:nowin98
+# SUBTRACT LINK32 /pdb:none
!ELSEIF "$(CFG)" == "sndVol - Win32 Debug"
@@ -81,12 +83,42 @@ LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib dxerr8.lib winmm.lib dxguid.lib /nologo /dll /debug /machine:I386 /out:"..\..\bin\Release\plugins\sndVol.dll" /pdbtype:sept
+!ELSEIF "$(CFG)" == "sndVol - Win32 Release Unicode"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "sndVol___Win32_Release_Unicode"
+# PROP BASE Intermediate_Dir "sndVol___Win32_Release_Unicode"
+# PROP BASE Ignore_Export_Lib 0
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "sndVol___Win32_Release_Unicode"
+# PROP Intermediate_Dir "sndVol___Win32_Release_Unicode"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /GX /O1 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "sndVol_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O1 /I "." /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "UNICODE" /D "_UNICODE" /D "_USRDLL" /D "sndVol_EXPORTS" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x809 /d "NDEBUG"
+# ADD RSC /l 0x809 /d "NDEBUG" /d "UNICODE" /d "_UNICODE"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib dxerr8.lib dxguid.lib advapi32.lib winmm.lib /nologo /dll /map /machine:I386 /out:"..\..\bin\Release\plugins\sndVol.dll" /opt:nowin98
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib dxerr8.lib dxguid.lib advapi32.lib winmm.lib /nologo /dll /map /machine:I386 /out:"..\..\bin\Release Unicode\plugins\sndVol.dll" /opt:nowin98
+# SUBTRACT LINK32 /pdb:none
+
!ENDIF
# Begin Target
# Name "sndVol - Win32 Release"
# Name "sndVol - Win32 Debug"
+# Name "sndVol - Win32 Release Unicode"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
@@ -140,6 +172,14 @@ SOURCE=.\plugin.h
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# Begin Source File
+SOURCE=".\mradio-muted.ico"
+# End Source File
+# Begin Source File
+
+SOURCE=.\mradio.ico
+# End Source File
+# Begin Source File
+
SOURCE=.\nosnd.ico
# End Source File
# Begin Source File
diff --git a/plugins/!NotAdopted/sndVol/sndVol.rc b/plugins/!NotAdopted/sndVol/sndVol.rc
index 4b359471af..ae4fb896a7 100644
--- a/plugins/!NotAdopted/sndVol/sndVol.rc
+++ b/plugins/!NotAdopted/sndVol/sndVol.rc
@@ -13,7 +13,7 @@
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
-// Russian resources
+// Russisch resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
#ifdef _WIN32
@@ -21,17 +21,54 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
#pragma code_page(1251)
#endif //_WIN32
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE MOVEABLE PURE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE MOVEABLE PURE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE MOVEABLE PURE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // Russisch resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
-IDD_OPT DIALOGEX 0, 0, 296, 64
-STYLE DS_FIXEDSYS | WS_CHILD | WS_VISIBLE
-EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Sans Serif"
+IDD_OPT DIALOGEX 0, 0, 296, 104
+STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- GROUPBOX " Volume ",IDC_GRP,0,0,296,64
+ GROUPBOX "Volume",IDC_GRP,0,0,296,103
CONTROL "Slider1",IDC_VOLUME,"msctls_trackbar32",TBS_NOTICKS |
WS_TABSTOP,6,13,284,17
LTEXT "min",IDC_STATIC,6,27,12,8
@@ -40,46 +77,112 @@ BEGIN
CONTROL "Auto-preview",IDC_AUTO,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,65,40,57,15
CONTROL "Mute button",IDC_MUTE,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,220,40,65,15
+ WS_TABSTOP,206,40,65,15
+ CONTROL "Set mRadio volume",IDC_MRADIO,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,65,56,137,15
+ CONTROL "Mute mRadio ",IDC_MUTERADIO,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,206,56,65,15
+ LTEXT "Background colour:",IDC_STATIC,13,84,86,13
+ CONTROL "",IDC_BACKCOLOR,"ColourPicker",WS_DISABLED | WS_TABSTOP,
+ 114,83,22,11
+ CONTROL "Use windows default colour",IDC_DEFCOLOR,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,169,83,112,11
END
-#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
-// TEXTINCLUDE
+// Icon
//
-1 TEXTINCLUDE DISCARDABLE
-BEGIN
- "resource.h\0"
-END
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_SND_ON ICON DISCARDABLE "snd.ico"
+IDI_SND_OFF ICON DISCARDABLE "nosnd.ico"
+IDI_MRADIO ICON DISCARDABLE "mradio.ico"
-2 TEXTINCLUDE DISCARDABLE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
-3 TEXTINCLUDE DISCARDABLE
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 0,0,3,0
+ PRODUCTVERSION 0,0,3,0
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
BEGIN
- "\r\n"
- "\0"
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "000004b0"
+ BEGIN
+#if defined(UNICODE)
+ VALUE "Comments", "Requires a multiwindow-enabled contact list.\0"
+ VALUE "CompanyName", "\0"
+ VALUE "FileDescription", "Sound Volume plugin (UNICODE)\0"
+ VALUE "FileVersion", "0, 0, 3, 0\0"
+ VALUE "InternalName", "sndVol (UNICODE)\0"
+ VALUE "LegalCopyright", "Copyright (C) 2006-2007\0"
+ VALUE "LegalTrademarks", "Licensed under the General Public License V2 or any later version.\0"
+ VALUE "OriginalFilename", "sndVol.dll\0"
+ VALUE "PrivateBuild", "W\0"
+ VALUE "ProductName", "sndVol plugin (UNICODE)\0"
+ VALUE "ProductVersion", "0, 0, 3, 0\0"
+ VALUE "SpecialBuild", "\0"
+#else
+ VALUE "Comments", "Requires a multiwindow-enabled contact list.\0"
+ VALUE "CompanyName", "\0"
+ VALUE "FileDescription", "Sound Volume plugin\0"
+ VALUE "FileVersion", "0, 0, 3, 0\0"
+ VALUE "InternalName", "sndVol\0"
+ VALUE "LegalCopyright", "Copyright (C) 2006\0"
+ VALUE "LegalTrademarks", "Licensed under the General Public License V2 or any later version.\0"
+ VALUE "OriginalFilename", "sndVol.dll\0"
+ VALUE "PrivateBuild", "\0"
+ VALUE "ProductName", "sndVol plugin\0"
+ VALUE "ProductVersion", "0, 0, 3, 0\0"
+ VALUE "SpecialBuild", "\0"
+#endif
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0, 1200
+ END
END
-#endif // APSTUDIO_INVOKED
+#endif // !_MAC
+
+#endif // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
+// Deutsch (Österreich) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEA)
+#ifdef _WIN32
+LANGUAGE LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
-IDI_SND_ON ICON DISCARDABLE "snd.ico"
-IDI_SND_OFF ICON DISCARDABLE "nosnd.ico"
-#endif // Russian resources
+IDI_MRAADIO_OFF ICON DISCARDABLE "mradio-muted.ico"
+#endif // Deutsch (Österreich) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/plugins/!NotAdopted/sndVol/sndVol.sln b/plugins/!NotAdopted/sndVol/sndVol.sln
new file mode 100644
index 0000000000..3d84726cb2
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/sndVol.sln
@@ -0,0 +1,23 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sndVol", "sndVol.vcproj", "{8852C7E2-FD61-45D8-BA15-7C18F64B845F}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release UNICODE|Win32 = Release UNICODE|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8852C7E2-FD61-45D8-BA15-7C18F64B845F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8852C7E2-FD61-45D8-BA15-7C18F64B845F}.Debug|Win32.Build.0 = Debug|Win32
+ {8852C7E2-FD61-45D8-BA15-7C18F64B845F}.Release UNICODE|Win32.ActiveCfg = Release UNICODE|Win32
+ {8852C7E2-FD61-45D8-BA15-7C18F64B845F}.Release UNICODE|Win32.Build.0 = Release UNICODE|Win32
+ {8852C7E2-FD61-45D8-BA15-7C18F64B845F}.Release|Win32.ActiveCfg = Release|Win32
+ {8852C7E2-FD61-45D8-BA15-7C18F64B845F}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/plugins/!NotAdopted/sndVol/sndVol.vcproj b/plugins/!NotAdopted/sndVol/sndVol.vcproj
new file mode 100644
index 0000000000..f102395833
--- /dev/null
+++ b/plugins/!NotAdopted/sndVol/sndVol.vcproj
@@ -0,0 +1,540 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8.00"
+ Name="sndVol"
+ ProjectGUID="{8852C7E2-FD61-45D8-BA15-7C18F64B845F}"
+ RootNamespace="sndVol"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/sndVol.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;sndVol_EXPORTS"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ PrecompiledHeaderFile=".\Debug/sndVol.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="2057"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="odbc32.lib odbccp32.lib dxerr8.lib winmm.lib dxguid.lib"
+ OutputFile="..\..\bin\Release\plugins\sndVol.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile=".\Debug/sndVol.pdb"
+ ImportLibrary=".\Debug/sndVol.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Debug/sndVol.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/sndVol.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;sndVol_EXPORTS;_CRT_SECURE_NO_DEPRECATE"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile=".\Release/sndVol.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="dxerr8.lib dxguid.lib winmm.lib"
+ OutputFile="..\..\bin\Release\plugins\sndVol.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ ProgramDatabaseFile=".\Release/sndVol.pdb"
+ GenerateMapFile="true"
+ MapFileName=".\Release/sndVol.map"
+ ImportLibrary=".\Release/sndVol.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Release/sndVol.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release UNICODE|Win32"
+ OutputDirectory="$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/sndVol.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="."
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;sndVol_EXPORTS;_CRT_SECURE_NO_DEPRECATE;UNICODE;_UNICODE"
+ StringPooling="true"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile=".\Release/sndVol.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="2057"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="dxerr8.lib dxguid.lib winmm.lib"
+ OutputFile="..\..\bin\Release Unicode\plugins\sndVol.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ ProgramDatabaseFile=".\Release/sndVol.pdb"
+ GenerateMapFile="true"
+ MapFileName=".\Release/sndVol.map"
+ ImportLibrary=".\Release/sndVol.lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ SuppressStartupBanner="true"
+ OutputFile=".\Release/sndVol.bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="dmutil.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release UNICODE|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="dxutil.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release UNICODE|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="optionsdlg.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release UNICODE|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="playSnd.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release UNICODE|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="plugin.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release UNICODE|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="dmutil.h"
+ >
+ </File>
+ <File
+ RelativePath="dxutil.h"
+ >
+ </File>
+ <File
+ RelativePath="optionsdlg.h"
+ >
+ </File>
+ <File
+ RelativePath="playSnd.h"
+ >
+ </File>
+ <File
+ RelativePath="plugin.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath=".\mradio-muted.ico"
+ >
+ </File>
+ <File
+ RelativePath=".\mradio.ico"
+ >
+ </File>
+ <File
+ RelativePath="nosnd.ico"
+ >
+ </File>
+ <File
+ RelativePath="resource.h"
+ >
+ </File>
+ <File
+ RelativePath="snd.ico"
+ >
+ </File>
+ <File
+ RelativePath="sndVol.rc"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release UNICODE|Win32"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="volume.ico"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>