diff options
26 files changed, 8022 insertions, 212 deletions
| diff --git a/plugins/!NotAdopted/sndVol/DxErr8.lib b/plugins/!NotAdopted/sndVol/DxErr8.libBinary files differ new file mode 100644 index 0000000000..0e1ce15675 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/DxErr8.lib 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.libBinary files differ new file mode 100644 index 0000000000..53b96d26b2 --- /dev/null +++ b/plugins/!NotAdopted/sndVol/dxguid.lib diff --git a/plugins/!NotAdopted/sndVol/mradio-muted.ico b/plugins/!NotAdopted/sndVol/mradio-muted.icoBinary files differ new file mode 100644 index 0000000000..4efbca899c --- /dev/null +++ b/plugins/!NotAdopted/sndVol/mradio-muted.ico diff --git a/plugins/!NotAdopted/sndVol/mradio.ico b/plugins/!NotAdopted/sndVol/mradio.icoBinary files differ new file mode 100644 index 0000000000..e95c6fe21a --- /dev/null +++ b/plugins/!NotAdopted/sndVol/mradio.ico 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.apsBinary files differ new file mode 100644 index 0000000000..155b97c18a --- /dev/null +++ b/plugins/!NotAdopted/sndVol/sndVol.aps 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>
 | 
