+
+/*****************************************************************************
+ * Useful macros
+ *****************************************************************************/
+#ifndef WAVE_FORMAT_IEEE_FLOAT
+# define WAVE_FORMAT_IEEE_FLOAT 0x0003
+#endif
+
+#ifndef WAVE_FORMAT_DOLBY_AC3_SPDIF
+# define WAVE_FORMAT_DOLBY_AC3_SPDIF 0x0092
+#endif
+
+#ifndef WAVE_FORMAT_EXTENSIBLE
+#define WAVE_FORMAT_EXTENSIBLE 0xFFFE
+#endif
+
+#ifndef SPEAKER_FRONT_LEFT
+# define SPEAKER_FRONT_LEFT 0x1
+# define SPEAKER_FRONT_RIGHT 0x2
+# define SPEAKER_FRONT_CENTER 0x4
+# define SPEAKER_LOW_FREQUENCY 0x8
+# define SPEAKER_BACK_LEFT 0x10
+# define SPEAKER_BACK_RIGHT 0x20
+# define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
+# define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
+# define SPEAKER_BACK_CENTER 0x100
+# define SPEAKER_SIDE_LEFT 0x200
+# define SPEAKER_SIDE_RIGHT 0x400
+# define SPEAKER_TOP_CENTER 0x800
+# define SPEAKER_TOP_FRONT_LEFT 0x1000
+# define SPEAKER_TOP_FRONT_CENTER 0x2000
+# define SPEAKER_TOP_FRONT_RIGHT 0x4000
+# define SPEAKER_TOP_BACK_LEFT 0x8000
+# define SPEAKER_TOP_BACK_CENTER 0x10000
+# define SPEAKER_TOP_BACK_RIGHT 0x20000
+# define SPEAKER_RESERVED 0x80000000
+#endif
+
+#ifndef DSSPEAKER_DSSPEAKER_DIRECTOUT
+# define DSSPEAKER_DSSPEAKER_DIRECTOUT 0x00000000
+#endif
+#ifndef DSSPEAKER_HEADPHONE
+# define DSSPEAKER_HEADPHONE 0x00000001
+#endif
+#ifndef DSSPEAKER_MONO
+# define DSSPEAKER_MONO 0x00000002
+#endif
+#ifndef DSSPEAKER_QUAD
+# define DSSPEAKER_QUAD 0x00000003
+#endif
+#ifndef DSSPEAKER_STEREO
+# define DSSPEAKER_STEREO 0x00000004
+#endif
+#ifndef DSSPEAKER_SURROUND
+# define DSSPEAKER_SURROUND 0x00000005
+#endif
+#ifndef DSSPEAKER_5POINT1
+# define DSSPEAKER_5POINT1 0x00000006
+#endif
+#ifndef DSSPEAKER_7POINT1
+# define DSSPEAKER_7POINT1 0x00000007
+#endif
+#ifndef DSSPEAKER_7POINT1_SURROUND
+# define DSSPEAKER_7POINT1_SURROUND 0x00000008
+#endif
+#ifndef DSSPEAKER_7POINT1_WIDE
+# define DSSPEAKER_7POINT1_WIDE DSSPEAKER_7POINT1
+#endif
+
+#ifndef _WAVEFORMATEXTENSIBLE_
+typedef struct {
+ WAVEFORMATEX Format;
+ union {
+ WORD wValidBitsPerSample; /* bits of precision */
+ WORD wSamplesPerBlock; /* valid if wBitsPerSample==0 */
+ WORD wReserved; /* If neither applies, set to zero. */
+ } Samples;
+ DWORD dwChannelMask; /* which channels are */
+ /* present in stream */
+ GUID SubFormat;
+} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
+#endif
+
+DEFINE_GUID( _KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, WAVE_FORMAT_IEEE_FLOAT, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
+DEFINE_GUID( _KSDATAFORMAT_SUBTYPE_PCM, WAVE_FORMAT_PCM, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );
+DEFINE_GUID( _KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF, WAVE_FORMAT_DOLBY_AC3_SPDIF, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 );