//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//
//  Copyright (C) Microsoft Corporation, 1998 - 1999
//
//  File:       dmi.idl
//
//--------------------------------------------------------------------------

//Have C code define these as longs so we dont have to cast to enum
//
#ifdef C_ONLY
    	#define CONST_DSSCLFLAGS 			LONG
    	#define CONST_DSSPEAKERFLAGS			LONG
    	#define CONST_DSBSTATUSFLAGS			LONG
    	#define CONST_DSBPLAYFLAGS			LONG
    	#define CONST_DSBLOCKFLAGS			LONG
    	#define CONST_DS3DAPPLYFLAGS			LONG
    	#define CONST_DS3DMODEFLAGS			LONG
    	#define CONST_DSCBSTATUSFLAGS			LONG
    	#define CONST_DSCBSTARTFLAGS			LONG
    	#define CONST_DSCBLOCKFLAGS			LONG
	#define CONST_DSBCAPSFLAGS			LONG
	#define CONST_DSCBCAPSFLAGS			LONG
	#define CONST_DSCCAPSFLAGS			LONG
	#define CONST_DSCAPSFLAGS			LONG
	#define CONST_WAVEFORMATFLAGS			LONG
	#define CONST_DMUS_PC_FLAGS			LONG
	#define CONST_DMUS_PC_CLASS			LONG
	#define CONST_DMUS_PORT_TYPE			LONG
	#define CONST_DMUSIC_PATH			LONG
	#define CONST_DMUSIC_STANDARD_AUDIO_PATH	LONG
	#define CONST_DMUS_SEGF_FLAGS			LONG
	#define CONST_DMUS_PCHANNEL			LONG
	#define CONST_DMUS_AUDIO			LONG
	#define CONST_DMUS_AUDIOPARAMS 			LONG
	#define	CONST_DSFX_I3DL2_MATERIAL_PRESET	LONG
	#define CONST_DSFX_I3DL2_ENVIRONMENT_PRESETS	LONG
	#define CONST_DSFXGARGLE_RATEHZ			LONG
	#define CONST_DSFXGARGLE_WAVE			LONG
	#define CONST_DSFX_WAVE				LONG
	#define CONST_DSFX_WETDRY			LONG
	#define CONST_DSFX_DEPTH			LONG
	#define CONST_DSFX_FEEDBACK			LONG
	#define CONST_DSFX_FREQUENCY			LONG
	#define CONST_DSFX_DELAY			LONG
	#define CONST_DSFX_PHASE			LONG
	#define CONST_DSFX_DELAY			LONG
	#define CONST_DSFX_PANDELAY			LONG
	#define CONST_DSFXDISTORTION_GAIN		LONG
	#define CONST_DSFXDISTORTION_EDGE		LONG
	#define CONST_DSFXDISTORTION_POSTEQCENTERFREQUENCY	LONG
	#define CONST_DSFXDISTORTION_POSTEQBANDWIDTH	LONG
	#define CONST_DSFXDISTORTION_PRELOWPASSCUTOFF	LONG
	#define CONST_DSFX_LEFTRIGHTDELAY		LONG

#if 0
	#define CONST_I3DL2SOURCEFLAGS 			LONG
	#define CONST_I3DL2SOURCEDIRECT			LONG
	#define CONST_I3DL2SOURCEDIRECTHF 		LONG
	#define CONST_I3DL2SOURCEROOM 			LONG
	#define CONST_I3DL2SOURCEROOMHF 		LONG
	#define CONST_I3DL2SOURCEROOMROLLOFFFACTOR 	LONG
	#define CONST_I3DL2SOURCEOBSTRUCTION 		LONG
	#define CONST_I3DL2SOURCEOBSTRUCTIONLFRATIO 	LONG
	#define CONST_I3DL2SOURCEOCCLUSION 		LONG
	#define CONST_I3DL2SOURCEOCCLUSIONLFRATIO 	LONG
#endif
	#define CONST_DSFX_I3DL2_ENVIRONMENT_PRESETS	LONG
	#define CONST_DSFX_I3DL2_MATERIAL_PRESET	LONG
	#define CONST_DSFX_I3DL2REVERB_QUALITY		LONG

	//We need this constant as an enum in C
	//#define CONST_DMUS_NOTIFICATION_TYPE		LONG


#endif
   
//Defines common to all languages			LONG
    	#define MUSIC_TIME LONG
	#define REFERENCE_TIME LONG

//Renames for VB legibility
#ifdef VB_ONLY

	//
	// Direct Sound/Music Structure names
	//

	#define DSBCAPS_CDES			DSBCAPS
	#define	DSCAPS_CDESC 			DSCAPS
	#define WAVEFORMATEX_CDESC		WAVEFORMATEX
	#define DSBUFFERDESC_CDESC 		DSBUFFERDESC			
	#define	DSCURSORS_CDESC			DSCURSORS
	#define	DS3DBUFFER_CDESC		DS3DBUFFER
	#define DS3DLISTENER_CDESC		DS3DLISTENER
	#define DSCBCAPS_CDESC			DSCBCAPS
	#define DSCCAPS_CDESC			DSCCAPS
	#define DSBCAPS_CDESC			DSBCAPS
	#define DSCBUFFERDESC_CDESC		DSCBUFFERDESC
	#define DSBPOSITIONNOTIFY_CDESC		DSBPOSITIONNOTIFY
	#define DSCEFFECTDESC_CDESC		DSCEFFECTDESC
	#define DSEFFECTDESC_CDESC		DSEFFECTDESC
	#define DMUS_TIMESIGNATURE_CDESC 	DMUS_TIMESIGNATURE
	#define DMUS_NOTIFICATION_PMSG_CDESC 	DMUS_NOTIFICATION_PMSG
	#define DMUS_CURVE_PMSG_CDESC 		DMUS_CURVE_PMSG
	#define	DMUS_NOTE_PMSG_CDESC 		DMUS_NOTE_PMSG
	#define DMUS_AUDIOPARAMS_CDESC		DMUS_AUDIOPARAMS

	#define DSFXSEND_CDESC			DSFXSEND
	#define DSFXCHORUS_CDESC		DSFXCHORUS
	#define DSFXFLANGER_CDESC		DSFXFLANGER
	#define DSFXECHO_CDESC			DSFXECHO
	#define DSFXDISTORTION_CDESC		DSFXDISTORTION
	#define DSFXCOMPRESSOR_CDESC		DSFXCOMPRESSOR
	#define DSFXGARGLE_CDESC		DSFXGARGLE
	#define DSFXI3DL2OBSTRUCTION_CDESC	DSFXI3DL2OBSTRUCTION
	#define DSFXI3DL2OCCLUSION_CDESC	DSFXI3DL2OCCLUSION
#if 0
	#define DSFXI3DL2SOURCE_CDESC		DSFXI3DL2SOURCE
#endif
	#define DSFXI3DL2REVERB_CDESC		DSFXI3DL2REVERB
	#define DSFXWAVESREVERB_CDESC		DSFXWAVESREVERB
	#define DSFXPARAMEQ_CDESC		DSFXPARAMEQ


	///////////////////////////////////////////////////////////////////////////
	// Interfaces
	///////////////////////////////////////////////////////////////////////////

	// Direct Sound Interfaces
	#define I_dxj_DirectSound		DirectSound8
	#define	I_dxj_DirectSoundBuffer  	DirectSoundSecondaryBuffer8  
	#define	I_dxj_DirectSoundPrimaryBuffer  DirectSoundPrimaryBuffer8  
	#define	I_dxj_DirectSound3dListener	DirectSound3DListener8
	#define I_dxj_DirectSound3dBuffer 	DirectSound3DBuffer8 
	#define I_dxj_DirectSoundCapture 	DirectSoundCapture8 
	#define I_dxj_DirectSoundCaptureBuffer  DirectSoundCaptureBuffer8 
	#define	I_dxj_DSEnum 			DirectSoundEnum8

	// Direct Sound Effects Interfaces
	#define I_dxj_DirectSoundFXSend		DirectSoundFXSend8
	#define I_dxj_DirectSoundFXGargle	DirectSoundFXGargle8
	#define I_dxj_DirectSoundFXChorus	DirectSoundFXChorus8
	#define I_dxj_DirectSoundFXFlanger	DirectSoundFXFlanger8
	#define I_dxj_DirectSoundFXEcho		DirectSoundFXEcho8
	#define I_dxj_DirectSoundFXDistortion	DirectSoundFXDistortion8
	#define I_dxj_DirectSoundFXCompressor	DirectSoundFXCompressor8
#if 0
	#define I_dxj_DirectSoundFXI3DL2Source	DirectSoundFXI3DL2Source8
#endif
	#define I_dxj_DirectSoundFXI3DL2Reverb	DirectSoundFXI3DL2Reverb8
	#define I_dxj_DirectSoundFXParamEQ	DirectSoundFXParamEq8
	#define I_dxj_DirectSoundFXWavesReverb	DirectSoundFXWavesReverb8

	// Direct Music Interfaces
	#define I_dxj_DirectMusicCollection   		DirectMusicCollection8
	#define I_dxj_DirectMusicPerformance    	DirectMusicPerformance8
	#define I_dxj_DirectMusicSegmentState   	DirectMusicSegmentState8 
	#define I_dxj_DirectMusicChordMap   		DirectMusicChordMap8
	#define I_dxj_DirectMusicStyle    		DirectMusicStyle8     
	#define I_dxj_DirectMusicBand    		DirectMusicBand8    
	#define I_dxj_DirectMusicComposer     		DirectMusicComposer8     
	#define I_dxj_DirectMusicSegment  		DirectMusicSegment8  
	#define I_dxj_DirectMusicLoader 		DirectMusicLoader8 
	#define I_dxj_DirectMusicAudioPath		DirectMusicAudioPath8
	#define I_dxj_DirectMusicSong			DirectMusicSong8

	// Renamed Function names for VB readibility
	#define clone  			Clone
	#define setStartPoint 		SetStartPoint
	#define getStartPoint 		GetStartPoint
	#define setLoopPoints 		SetLoopPoints
	#define getLoopPointStart 	GetLoopPointStart
	#define getLoopPointEnd 	GetLoopPointEnd
	#define getLength 		GetLength
	#define setLength 		SetLength
	#define getRepeats 		GetRepeats
	#define setRepeats 		SetRepeats
	#define download 		Download
	#define unload 			Unload
	#define setAutoDownloadEnable 	SetAutoDownloadEnable
	#define setTempoEnable 		SetTempoEnable 
	#define setTimeSigEnable 	SetTimeSigEnable
	#define setStandardMidiFile 	SetStandardMidiFile
	#define connectToCollection 	ConnectToCollection
	#define createSoundBuffer	CreateSoundBuffer
	#define createSoundBufferFromFile	CreateSoundBufferFromFile
	#define createSoundBufferFromResource	CreateSoundBufferFromResource
	#define getCaps				GetCaps
	#define duplicateSoundBuffer		DuplicateSoundBuffer
	#define setCooperativeLevel		SetCooperativeLevel
	#define getSpeakerConfig		GetSpeakerConfig
	#define setSpeakerConfig		SetSpeakerConfig
	#define getDirectSound3dListener	GetDirectSound3DListener
	#define getCurrentPosition		GetCurrentPosition
	#define getFormat			GetFormat
	#define getVolume			GetVolume
	#define getPan				GetPan
	#define getStatus			GetStatus
	#define writeBuffer			WriteBuffer
	#define readBuffer			ReadBuffer
	#define play				Play
	#define setFormat			SetFormat
	#define setVolume			SetVolume
	#define setPan				SetPan
	#define stop				Stop
	#define restore				Restore
	#define createSoundBuffer		CreateSoundBuffer
	#define createSoundBufferFromFile	CreateSoundBufferFromFile
	#define getCaps				GetCaps
	#define initialize			Initialize
	#define getDirectSound3dBuffer		GetDirectSound3DBuffer
	#define getCaps				GetCaps
	#define getCurrentPosition		GetCurrentPosition
	#define getFrequency			GetFrequency
	#define setCurrentPosition		SetCurrentPosition
	#define setFrequency			SetFrequency
	#define setNotificationPositions	SetNotificationPositions
	#define saveToFile			SaveToFile
	#define getAllParameters		GetAllParameters
	#define getDistanceFactor		GetDistanceFactor
	#define getDopplerFactor		GetDopplerFactor
	#define getOrientation			GetOrientation
	#define getPosition			GetPosition
	#define getRolloffFactor		GetRolloffFactor
	#define getVelocity			GetVelocity
	#define setAllParameters		SetAllParameters
	#define setDistanceFactor		SetDistanceFactor
	#define setDopplerFactor		SetDopplerFactor
	#define setOrientation			SetOrientation
	#define setPosition			SetPosition
	#define setRolloffFactor		SetRolloffFactor
	#define setVelocity			SetVelocity
	#define commitDeferredSettings		CommitDeferredSettings
	#define getDirectSoundBuffer		GetDirectSoundBuffer
	#define getDirectSoundBuffer		GetDirectSoundBuffer
	#define getAllParameters		GetAllParameters
	#define getConeAngles			GetConeAngles
	#define getConeOrientation		GetConeOrientation
	#define getConeOutsideVolume	GetConeOutsideVolume
	#define getMaxDistance			GetMaxDistance
	#define getMinDistance			GetMinDistance
	#define getMode					GetMode
	#define getPosition				GetPosition
	#define getVelocity				GetVelocity
	#define setAllParameters		SetAllParameters
	#define setConeAngles			SetConeAngles
	#define setConeOrientation		SetConeOrientation
	#define setConeOutsideVolume	SetConeOutsideVolume
	#define setMaxDistance			SetMaxDistance
	#define setMinDistance			SetMinDistance
	#define setMode					SetMode
	#define setPosition				SetPosition
	#define setVelocity				SetVelocity
	#define createCaptureBuffer		CreateCaptureBuffer
	#define getFormat				GetFormat
	#define getStatus				GetStatus
	#define start					Start
	#define stop					Stop
	#define writeBuffer				WriteBuffer
	#define readBuffer				ReadBuffer
	#define setNotificationPositions	SetNotificationPositions
	#define getGuid						GetGuid
	#define getDescription			GetDescription
	#define getName					GetName
	#define getCount				GetCount
	#define loadSegment				LoadSegment
	#define loadStyle				LoadStyle
	#define loadBand				LoadBand
	#define loadCollection			LoadCollection
	#define loadSegmentFromResource	LoadSegmentFromResource
	#define loadStyleFromResource	LoadStyleFromResource
	#define loadBandFromResource	LoadBandFromResource
	#define loadCollectionFromResource	LoadCollectionFromResource
	#define setSearchDirectory		SetSearchDirectory
	#define loadChordMap			LoadChordMap
	#define loadChordMapFromResource	LoadChordMapFromResource
	#define clone					Clone
	#define setStartPoint			SetStartPoint
	#define getStartPoint			GetStartPoint
	#define setLoopPoints			SetLoopPoints
	#define getLoopPointStart		GetLoopPointStart
	#define getLoopPointEnd			GetLoopPointEnd
	#define getLength				GetLength
	#define setLength				SetLength
	#define getRepeats				GetRepeats
	#define setRepeats				SetRepeats
	#define download				Download
	#define unload					Unload
	#define setAutoDownloadEnable	SetAutoDownloadEnable
	#define setTempoEnable			SetTempoEnable
	#define setTimeSigEnable		SetTimeSigEnable
	#define setStandardMidiFile		SetStandardMidiFile
	#define connectToCollection		ConnectToCollection
	#define autoTransition			AutoTransition
	#define composeSegmentFromTemplate	ComposeSegmentFromTemplate
	#define composeSegmentFromShape	ComposeSegmentFromShape
	#define composeTransition		ComposeTransition
	#define composeTemplateFromShape	ComposeTemplateFromShape
	#define changeChordMap			ChangeChordMap
	#define createSegment			CreateSegment
	#define download				Download
	#define unload					Unload
	#define getBandName				GetBandName
	#define getBandCount			GetBandCount
	#define getBand					GetBand
	#define getDefaultBand			GetDefaultBand
	#define getMotifName			GetMotifName
	#define getMotifCount			GetMotifCount
	#define getMotif				GetMotif
	#define getTimeSignature		GetTimeSignature
	#define getTempo				GetTempo
	#define getScale				GetScale
	#define getRepeats				GetRepeats
	#define getSeek					GetSeek
	#define getStartPoint			GetStartPoint
	#define getStartTime			GetStartTime
	#define getSegment				GetSegment
	#define closeDown				CloseDown
	#define getSegmentState			GetSegmentState
	#define invalidate				Invalidate
	#define isPlaying				IsPlaying
	#define addNotificationType		AddNotificationType
	#define removeNotificationType	RemoveNotificationType
	#define setNotificationHandle	SetNotificationHandle
	#define getNotificationPMSG		GetNotificationPMSG
	#define musicToClockTime		MusicToClockTime
	#define clockToMusicTime		ClockToMusicTime
	#define getMusicTime			GetMusicTime
	#define getClockTime			GetClockTime
	#define getPrepareTime			GetPrepareTime
	#define getBumperLength			GetBumperLength
	#define getLatencyTime			GetLatencyTime
	#define getQueueTime			GetQueueTime
	#define getResolvedTime			GetResolvedTime
	#define setPrepareTime			SetPrepareTime
	#define setBumperLength			SetBumperLength
	#define adjustTime				AdjustTime
	#define setMasterAutoDownload	SetMasterAutoDownload
	#define getMasterAutoDownload	GetMasterAutoDownload
	#define setMasterTempo			SetMasterTempo
	#define getMasterTempo			GetMasterTempo
	#define setMasterVolume			SetMasterVolume
	#define getMasterVolume			GetMasterVolume
	#define setMasterGrooveLevel	SetMasterGrooveLevel
	#define getMasterGrooveLevel	GetMasterGrooveLevel
	#define getStyle				GetStyle
	#define getChordMap				GetChordMap
	#define getCommand				GetCommand
	#define getGrooveLevel			GetGrooveLevel
	#define getTempo				GetTempo
	#define getTimeSig				GetTimeSig
	#define sendNotePMSG			SendNotePMSG
	#define sendCurvePMSG			SendCurvePMSG
	#define sendMIDIPMSG			SendMIDIPMSG
	#define sendPatchPMSG			SendPatchPMSG
	#define sendTempoPMSG			SendTempoPMSG
	#define sendTransposePMSG		SendTransposePMSG
	#define sendTimeSigPMSG			SendTimeSigPMSG
	#define buffer				Buffer
	#define duplicate			Duplicate
#endif 



    ///////////////////////////////////////////////////////////////////////////
    // 
    // Interface List 
    // 
    ///////////////////////////////////////////////////////////////////////////
    


	//
	// DirectSound
	//
    
	interface I_dxj_DirectSound;
	interface I_dxj_DirectSoundBuffer;	
	interface I_dxj_DirectSoundPrimaryBuffer;
	interface I_dxj_DirectSound3dBuffer;
	interface I_dxj_DirectSound3dListener;
	interface I_dxj_DirectSoundCapture;
	interface I_dxj_DirectSoundCaptureBuffer;
	interface I_dxj_DirectSoundNotify;
	interface I_dxj_DSEnum;
	   
#if 0
	interface I_dxj_DirectSoundFXSend;
#endif
	interface I_dxj_DirectSoundFXGargle;
	interface I_dxj_DirectSoundFXChorus;
	interface I_dxj_DirectSoundFXFlanger;
	interface I_dxj_DirectSoundFXEcho;
	interface I_dxj_DirectSoundFXDistortion;
	interface I_dxj_DirectSoundFXCompressor;
#if 0
	interface I_dxj_DirectSoundFXI3DL2Source;
#endif
	interface I_dxj_DirectSoundFXI3DL2Reverb;
	interface I_dxj_DirectSoundFXParamEQ;
	interface I_dxj_DirectSoundFXWavesReverb;

	//
	// Direct Music
	//
    
	interface I_dxj_DirectMusicLoader;
	interface I_dxj_DirectMusicSegment;			  
	interface I_dxj_DirectMusicPerformance;
	interface I_dxj_DirectMusicComposer;
	interface I_dxj_DirectMusicBand;
	interface I_dxj_DirectMusicStyle;
	interface I_dxj_DirectMusicChordMap;
	interface I_dxj_DirectMusicSegmentState;
	interface I_dxj_DirectMusicCollection;
	interface I_dxj_DirectMusicAudioPath;
#if 0
	interface I_dxj_DirectMusicSong;
#endif

    ///////////////////////////////////////////////////////////////////////////
    // 
    // Direct Sound Constants 
    // 
    ///////////////////////////////////////////////////////////////////////////


#ifdef VB_ONLY 

 [helpcontext(81004)]
typedef enum CONST_DSFX_WAVESREVERB_INGAIN
{
	DSFX_WAVESREVERB_INGAIN_MIN             = -96,
	DSFX_WAVESREVERB_INGAIN_MAX             = 0
} CONST_DSFX_WAVESREVERB_INGAIN;

 [helpcontext(81005)]
typedef enum CONST_DSFX_WAVESREVERB_REVERBMIX
{
	DSFX_WAVESREVERB_REVERBMIX_MIN          = -96,
	DSFX_WAVESREVERB_REVERBMIX_MAX          = 0
} CONST_DSFX_WAVESREVERB_REVERBMIX;

 [helpcontext(81977)]
typedef enum CONST_DSFX_I3DL2REVERB_ROOM 
{
	DSFX_I3DL2REVERB_ROOM_MIN               = -10000,
	DSFX_I3DL2REVERB_ROOM_MAX               = 0,
	DSFX_I3DL2REVERB_ROOM_DEFAULT		= -10000
} CONST_DSFX_I3DL2REVERB_ROOM;

 [helpcontext(81978)]
typedef enum CONST_DSFX_I3DL2REVERB_ROOMHF
{
	DSFX_I3DL2REVERB_ROOMHF_MIN             = -10000,
	DSFX_I3DL2REVERB_ROOMHF_MAX             = 0,
	DSFX_I3DL2REVERB_ROOMHF_DEFAULT         = 0
} CONST_DSFX_I3DL2REVERB_ROOMHF;

 [helpcontext(81979)]
typedef enum CONST_DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR
{
	DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MIN  = 0,
	DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_MAX  = 1,
	DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR_DEFAULT = 0
} CONST_DSFX_I3DL2REVERB_ROOMROLLOFFFACTOR;

 [helpcontext(81975)]
typedef enum CONST_DSFX_I3DL2REVERB_REFLECTIONS
{
	DSFX_I3DL2REVERB_REFLECTIONS_MIN        = -10000,
	DSFX_I3DL2REVERB_REFLECTIONS_MAX        = 1000,
	DSFX_I3DL2REVERB_REFLECTIONS_DEFAULT	= -10000
} CONST_DSFX_I3DL2REVERB_REFLECTIONS;

 [helpcontext(81976)]
typedef enum CONST_DSFX_I3DL2REVERB_REVERB
{
	DSFX_I3DL2REVERB_REVERB_MIN             = -10000,
	DSFX_I3DL2REVERB_REVERB_MAX             = 2000,
	DSFX_I3DL2REVERB_REVERB_DEFAULT		= -10000
} CONST_DSFX_I3DL2REVERB_REVERB;

 [helpcontext(81972)]
typedef enum CONST_DSFX_I3DL2REVERB_DIFFUSION
{
	DSFX_I3DL2REVERB_DIFFUSION_MIN          = 0,
	DSFX_I3DL2REVERB_DIFFUSION_MAX          = 100,
	DSFX_I3DL2REVERB_DIFFUSION_DEFAULT	= 100
} CONST_DSFX_I3DL2REVERB_DIFFUSION;

 [helpcontext(81971)]
typedef enum CONST_DSFX_I3DL2REVERB_DENSITY
{
	DSFX_I3DL2REVERB_DENSITY_MIN            = 0,
	DSFX_I3DL2REVERB_DENSITY_MAX            = 100,
	DSFX_I3DL2REVERB_DENSITY_DEFAULT	= 100
} CONST_DSFX_I3DL2REVERB_DENSITY;

 [helpcontext(81973)]
typedef enum CONST_DSFX_I3DL2REVERB_HFREFERENCE
{
	DSFX_I3DL2REVERB_HFREFERENCE_MIN        = 20,
	DSFX_I3DL2REVERB_HFREFERENCE_MAX        = 20000,
	DSFX_I3DL2REVERB_HFREFERENCE_DEFAULT	= 5000
} CONST_DSFX_I3DL2REVERB_HFREFERENCE;

 [helpcontext(81974)]
typedef enum CONST_DSFX_I3DL2REVERB_QUALITY
{
	DSFX_I3DL2REVERB_QUALITY_MIN            = 0,
	DSFX_I3DL2REVERB_QUALITY_MAX            = 3,
	DSFX_I3DL2REVERB_QUALITY_DEFAULT        = 2
} CONST_DSFX_I3DL2REVERB_QUALITY;

 [helpcontext(81989)]
typedef enum CONST_DSFXCOMPRESSOR_GAIN
{
	DSFXCOMPRESSOR_GAIN_MIN             = -60,
	DSFXCOMPRESSOR_GAIN_MAX             = 60
} CONST_DSFXCOMPRESSOR_GAIN;

 [helpcontext(81985)]
typedef enum CONST_DSFXCOMPRESSOR_ATTACK 
{
	DSFXCOMPRESSOR_ATTACK_MIN           = 1,
	DSFXCOMPRESSOR_ATTACK_MAX           = 500
} CONST_DSFXCOMPRESSOR_ATTACK;

 [helpcontext(81992)]
typedef enum CONST_DSFXCOMPRESSOR_RELEASE
{
	DSFXCOMPRESSOR_RELEASE_MIN          = 50,
	DSFXCOMPRESSOR_RELEASE_MAX          = 3000
} CONST_DSFXCOMPRESSOR_RELEASE;

 [helpcontext(81993)]
typedef enum CONST_DSFXCOMPRESSOR_THRESHOLD
{
	DSFXCOMPRESSOR_THRESHOLD_MIN        = -60,
	DSFXCOMPRESSOR_THRESHOLD_MAX        = 0
} CONST_DSFXCOMPRESSOR_THRESHOLD;

 [helpcontext(81991)]
typedef enum CONST_DSFXCOMPRESSOR_RATIO
{
	DSFXCOMPRESSOR_RATIO_MIN            = 1,
	DSFXCOMPRESSOR_RATIO_MAX            = 100
} CONST_DSFXCOMPRESSOR_RATIO;

 [helpcontext(81990)]
typedef enum CONST_DSFXCOMPRESSOR_PREDELAY {
	DSFXCOMPRESSOR_PREDELAY_MIN         = 0,
	DSFXCOMPRESSOR_PREDELAY_MAX         = 4
} CONST_DSFXCOMPRESSOR_PREDELAY;

 [helpcontext(81995)]
typedef enum CONST_DSFXDISTORTION_GAIN
{
	DSFXDISTORTION_GAIN_MIN                     = -60,
	DSFXDISTORTION_GAIN_MAX                     = 0
} CONST_DSFXDISTORTION_GAIN;

 [helpcontext(81994)]
typedef enum CONST_DSFXDISTORTION_EDGE
{
	DSFXDISTORTION_EDGE_MIN                     = 0,
	DSFXDISTORTION_EDGE_MAX                     = 100
} CONST_DSFXDISTORTION_EDGE;

 [helpcontext(81002)]
typedef enum CONST_DSFXPARAMEQ_CENTER 
{
	DSFXPARAMEQ_CENTER_MIN      = 80,
	DSFXPARAMEQ_CENTER_MAX      = 16000
} CONST_DSFXPARAMEQ_CENTER;

 [helpcontext(81001)]
typedef enum CONST_DSFXPARAMEQ_BANDWIDTH
{
	DSFXPARAMEQ_BANDWIDTH_MIN   = 1,
	DSFXPARAMEQ_BANDWIDTH_MAX   = 36
} CONST_DSFXPARAMEQ_BANDWIDTH;

 [helpcontext(81003)]
typedef enum CONST_DSFXPARAMEQ_GAIN
{
	DSFXPARAMEQ_GAIN_MIN        = -15,
	DSFXPARAMEQ_GAIN_MAX        = 15
} CONST_DSFXPARAMEQ_GAIN;

 [helpcontext(81997)]
typedef enum CONST_DSFXDISTORTION_POSTEQCENTERFREQUENCY
{
	DSFXDISTORTION_POSTEQCENTERFREQUENCY_MIN    = 100, 
	DSFXDISTORTION_POSTEQCENTERFREQUENCY_MAX    = 8000
} CONST_DSFXDISTORTION_POSTEQCENTERFREQUENCY;

 [helpcontext(81996)]
typedef enum CONST_DSFXDISTORTION_POSTEQBANDWIDTH
{
	DSFXDISTORTION_POSTEQBANDWIDTH_MIN          = 100, 
	DSFXDISTORTION_POSTEQBANDWIDTH_MAX          = 8000
} CONST_DSFXDISTORTION_POSTEQBANDWIDTH;

 [helpcontext(81998)]
typedef enum CONST_DSFXDISTORTION_PRELOWPASSCUTOFF
{
	DSFXDISTORTION_PRELOWPASSCUTOFF_MIN         = 100,
	DSFXDISTORTION_PRELOWPASSCUTOFF_MAX         = 8000
} CONST_DSFXDISTORTION_PRELOWPASSCUTOFF;

 [helpcontext(81980)]
typedef enum CONST_DSFX_LEFTRIGHTDELAY
{
	DSFX_LEFTRIGHTDELAY_MIN			= 1,
	DSFX_LEFTRIGHTDELAY_MAX			= 2000
} CONST_DSFX_LEFTRIGHTDELAY;

 [helpcontext(81981)]
typedef enum CONST_DSFX_PANDELAY
{
	DSFX_PANDELAY_MIN       	= 0,
	DSFX_PANDELAY_MAX       	= 1
} CONST_DSFX_PANDELAY;

 [helpcontext(81916)]
typedef enum CONST_DSFX_WAVE
{
	DSFX_WAVE_TRIANGLE        = 0,
	DSFX_WAVE_SIN             = 1
} CONST_DSFX_WAVE;

 [helpcontext(81984)]
typedef enum CONST_DSFX_WETDRY
{
	DSFX_WETDRYMIX_MIN        = 0, 
	DSFX_WETDRYMIX_MAX        = 100
} CONST_DSFX_WETDRY;

 [helpcontext(81965)]
typedef enum CONST_DSFX_DEPTH
{
	DSFX_DEPTH_MIN            = 0,
	DSFX_DEPTH_MAX            = 100
} CONST_DSFX_DEPTH;

 [helpcontext(81966)]
typedef enum CONST_DSFX_FEEDBACK
{
	DSFX_FEEDBACK_MIN         = -99, 
	DSFX_FEEDBACK_MAX         = 99
} CONST_DSFX_FEEDBACK;

 [helpcontext(181966)]
typedef enum CONST_DSFXECHO_FEEDBACK
{
	DSFXECHO_FEEDBACK_MIN         = 0, 
	DSFXECHO_FEEDBACK_MAX         = 100
} CONST_DSFXECHO_FEEDBACK;

 [helpcontext(81968)]
typedef enum CONST_DSFX_FREQUENCY
{
	DSFX_FREQUENCY_MIN        = 0,
	DSFX_FREQUENCY_MAX        = 10
}CONST_DSFX_FREQUENCY;

 [helpcontext(81964)]
typedef enum CONST_DSFX_DELAY
{
	DSFX_DELAY_MIN            = 0, 
	DSFX_DELAY_MAX            = 20
}CONST_DSFX_DELAY;

 [helpcontext(81947)]
typedef enum CONST_DSFX_FLANGER_DELAY
{
	DSFX_FLANGER_DELAY_MIN		= 0,
	DSFX_FLANGER_DELAY_MAX		=4
} CONST_DSFX_FLANGER_DELAY;

 [helpcontext(81982)]
typedef enum CONST_DSFX_PHASE
{
	DSFX_PHASE_MIN            = 0,
	DSFX_PHASE_MAX            = 4,
	DSFX_PHASE_NEG_180        = 0,
	DSFX_PHASE_NEG_90         = 1,
	DSFX_PHASE_ZERO           = 2,
	DSFX_PHASE_90             = 3,
	DSFX_PHASE_180            = 4
}CONST_DSFX_PHASE;

 [helpcontext(81180)]
typedef enum CONST_DSFXGARGLE_WAVE
{
	DSFXGARGLE_WAVE_TRIANGLE	= 0,
	DSFXGARGLE_WAVE_SQUARE          = 1
} CONST_DSFXGARGLE_WAVE;

 [helpcontext(81999)]
typedef enum CONST_DSFXGARGLE_RATEHZ
{
	DSFXGARGLE_RATEHZ_MIN           = 1,
	DSFXGARGLE_RATEHZ_MAX           = 1000
} CONST_DSFXGARGLE_RATEHZ;

#if 0
 [helpcontext(81013)]
typedef enum CONST_I3DL2SOURCEFLAGS {
    DSFX_I3DL2SOURCE_OCC_LPF,
    DSFX_I3DL2SOURCE_OCC_VOLUME
} CONST_I3DL2SOURCEFLAGS;

 [helpcontext(81011)]
typedef enum CONST_I3DL2SOURCEDIRECT {
	DSFX_I3DL2SOURCE_MINDIRECT                  = -10000,
	DSFX_I3DL2SOURCE_MAXDIRECT                  = 1000,
	DSFX_I3DL2SOURCE_DEFAULTDIRECT              = 0
} CONST_I3DL2SOURCEDIRECT;

 [helpcontext(81012)]
typedef enum CONST_I3DL2SOURCEDIRECTHF {
	DSFX_I3DL2SOURCE_MINDIRECTHF                = -10000,
	DSFX_I3DL2SOURCE_MAXDIRECTHF                = 0,
	DSFX_I3DL2SOURCE_DEFAULTDIRECTHF            = 0
} CONST_I3DL2SOURCEDIRECTHF;

 [helpcontext(81018)]
typedef enum CONST_I3DL2SOURCEROOM {
	DSFX_I3DL2SOURCE_MINROOM                    = -10000,
	DSFX_I3DL2SOURCE_MAXROOM                    = 1000,
	DSFX_I3DL2SOURCE_DEFAULTROOM                = 0
} CONST_I3DL2SOURCEROOM;

 [helpcontext(81019)]
typedef enum CONST_I3DL2SOURCEROOMHF {
	DSFX_I3DL2SOURCE_MINROOMHF                  = -10000,
	DSFX_I3DL2SOURCE_MAXROOMHF                  = 0,
	DSFX_I3DL2SOURCE_DEFAULTROOMHF              = 0
} CONST_I3DL2SOURCEROOMHF;

 [helpcontext(81020)]
typedef enum CONST_I3DL2SOURCEROOMROLLOFFFACTOR {
	DSFX_I3DL2SOURCE_MINROOMROLLOFFFACTOR       = 0,
	DSFX_I3DL2SOURCE_MAXROOMROLLOFFFACTOR       = 10,
	DSFX_I3DL2SOURCE_DEFAULTROOMROLLOFFFACTOR   = 0,
} CONST_I3DL2SOURCEROOMROLLOFFFACTOR;

 [helpcontext(81014)]
typedef enum CONST_I3DL2SOURCEOBSTRUCTION {
	DSFX_I3DL2SOURCE_MINOBSTRUCTION             = -10000,
	DSFX_I3DL2SOURCE_MAXOBSTRUCTION             = 0,
	DSFX_I3DL2SOURCE_DEFAULTOBSTRUCTION         = 0
} CONST_I3DL2SOURCEOBSTRUCTION;

 [helpcontext(81015)]
typedef enum CONST_I3DL2SOURCEOBSTRUCTIONLFRATIO {
	DSFX_I3DL2SOURCE_MINOBSTRUCTIONLFRATIO      = 0,
	DSFX_I3DL2SOURCE_MAXOBSTRUCTIONLFRATIO      = 1,
	DSFX_I3DL2SOURCE_DEFAULTOBSTRUCTIONLFRATIO  = 0
} CONST_I3DL2SOURCEOBSTRUCTIONLFRATIO;

 [helpcontext(81016)]
typedef enum CONST_I3DL2SOURCEOCCLUSION {
	DSFX_I3DL2SOURCE_MINOCCLUSION               = -10000,
	DSFX_I3DL2SOURCE_MAXOCCLUSION               = 0,
	DSFX_I3DL2SOURCE_DEFAULTOCCLUSION           = 0
} CONST_I3DL2SOURCEOCCLUSION;

 [helpcontext(81017)]
typedef enum CONST_I3DL2SOURCEOCCLUSIONLFRATIO {
	DSFX_I3DL2SOURCE_MINOCCLUSIONLFRATIO        = 0,
	DSFX_I3DL2SOURCE_MAXOCCLUSIONLFRATIO        = 1,
//	DSFX_I3DL2SOURCE_DEFAULTOCCLUSIONLFRATIO    = 0.25f
} CONST_I3DL2SOURCEOCCLUSIONLFRATIO;

 [helpcontext(81970)]
typedef enum CONST_DSFX_I3DL2_MATERIAL_PRESET
{
    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
} CONST_DSFX_I3DL2_MATERIAL_PRESET;
#endif

 [helpcontext(81969)]
typedef enum CONST_DSFX_I3DL2_ENVIRONMENT_PRESETS
{
    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
} CONST_DSFX_I3DL2_ENVIRONMENT_PRESETS;

 [helpcontext(81008)]
typedef enum CONST_DSOUNDFX {
	DSFXR_PRESENT				= 0x00000000,
	DSFX_LOCHARDWARE    			= 0x00000001,
	DSFX_LOCSOFTWARE    			= 0x00000002,
	DSFXR_LOCHARDWARE   			= 0x00000001,
	DSFXR_LOCSOFTWARE   			= 0x00000002,
	DSFXR_UNALLOCATED   			= 0x00000003,
	DSFXR_FAILED        			= 0x00000004,
	DSFXR_UNKNOWN       			= 0x00000005,
#if 0
        DSFXR_SENDLOOP				= 0x00000006,
#endif
} CONST_DSOUNDFX;

 [helpcontext(81021)]
typedef enum CONST_WAVEFORMATFLAGS {
      WAVE_FORMAT_1M08       =0x00000001,       /* 11.025 kHz, Mono,   8-bit  */
      WAVE_FORMAT_1S08       =0x00000002,       /* 11.025 kHz, Stereo, 8-bit  */
      WAVE_FORMAT_1M16       =0x00000004,       /* 11.025 kHz, Mono,   16-bit */
      WAVE_FORMAT_1S16       =0x00000008,       /* 11.025 kHz, Stereo, 16-bit */
      WAVE_FORMAT_2M08       =0x00000010,       /* 22.05  kHz, Mono,   8-bit  */
      WAVE_FORMAT_2S08       =0x00000020,       /* 22.05  kHz, Stereo, 8-bit  */
      WAVE_FORMAT_2M16       =0x00000040,       /* 22.05  kHz, Mono,   16-bit */
      WAVE_FORMAT_2S16       =0x00000080,       /* 22.05  kHz, Stereo, 16-bit */
      WAVE_FORMAT_4M08       =0x00000100,       /* 44.1   kHz, Mono,   8-bit  */
      WAVE_FORMAT_4S08       =0x00000200,       /* 44.1   kHz, Stereo, 8-bit  */
      WAVE_FORMAT_4M16       =0x00000400,       /* 44.1   kHz, Mono,   16-bit */
      WAVE_FORMAT_4S16      = 0x00000800       /* 44.1   kHz, Stereo, 16-bit */	  
} CONST_WAVEFORMATFLAGS;


 [helpcontext(81009)]
typedef enum CONST_DSSCLFLAGS {
	 DSSCL_NORMAL                =0x00000001,
	 DSSCL_PRIORITY              =0x00000002,
	 DSSCL_WRITEPRIMARY          =0x00000004
} CONST_DSSCLFLAGS;

 [helpcontext(81010)]
typedef enum CONST_DSSPEAKERFLAGS {
	 DSSPEAKER_HEADPHONE         =0x00000001,
	 DSSPEAKER_MONO              =0x00000002,
	 DSSPEAKER_QUAD              =0x00000003,
	 DSSPEAKER_STEREO            =0x00000004,
	 DSSPEAKER_SURROUND          =0x00000005,
	 DSSPEAKER_GEOMETRY_MIN      =0x00000005,  //   5 degrees
	 DSSPEAKER_GEOMETRY_NARROW   =0x0000000A,  //  10 degrees
	 DSSPEAKER_GEOMETRY_WIDE     =0x00000014,  //  20 degrees
	 DSSPEAKER_GEOMETRY_MAX      =0x000000B4  // 180 degrees
} CONST_DSSPEAKERFLAGS;

 [helpcontext(81956)]
typedef enum CONST_DSBPLAYFLAGS{
	DSBPLAY_DEFAULT             =0x00000000,
	DSBPLAY_LOOPING             =0x00000001,
	DSBPLAY_LOCHARDWARE         =0x00000002,
	DSBPLAY_LOCSOFTWARE         =0x00000004,
	DSBPLAY_TERMINATEBY_TIME    =0x00000008,
	DSBPLAY_TERMINATEBY_DISTANCE    =0x000000010,
	DSBPLAY_TERMINATEBY_PRIORITY    =0x000000020,
} CONST_DSBPLAYFLAGS;

 [helpcontext(81955)]
typedef enum CONST_DSBLOCKFLAGS {
	DSBLOCK_DEFAULT			    =0x00000000,
	DSBLOCK_FROMWRITECURSOR     =0x00000001,
	DSBLOCK_ENTIREBUFFER        =0x00000002
} CONST_DSBLOCKFLAGS;

 [helpcontext(81960)]
typedef enum CONST_DSCBLOCKFLAGS {
	DSCBLOCK_DEFAULT            =0x00000000,
	DSCBLOCK_ENTIREBUFFER       =0x00000001
} CONST_DSCBLOCKFLAGS;

 [helpcontext(81957)]
typedef enum CONST_DSBSTATUSFLAGS {       
	DSBSTATUS_PLAYING           =0x00000001,
	DSBSTATUS_BUFFERLOST        =0x00000002,
	DSBSTATUS_LOOPING           =0x00000004,
	DSBSTATUS_LOCHARDWARE       =0x00000008,
	DSBSTATUS_LOCSOFTWARE       =0x00000010,
	DSBSTATUS_TERMINATED        =0x00000020
} CONST_DSBSTATUSFLAGS;

 [helpcontext(81952)]
typedef enum CONST_DS3DAPPLYFLAGS {
	DS3D_IMMEDIATE              =0x00000000,
	DS3D_DEFERRED               =0x00000001
} CONST_DS3DAPPLYFLAGS;

 [helpcontext(81953)]
typedef enum CONST_DS3DMODEFLAGS {
	DS3DMODE_NORMAL             =0x00000000,
	DS3DMODE_HEADRELATIVE       =0x00000001,
	DS3DMODE_DISABLE            =0x00000002
} CONST_DS3DMODEFLAGS;

 [helpcontext(81962)]
typedef enum CONST_DSCBSTATUSFLAGS {
	DSCBSTATUS_CAPTURING        =0x00000001,
	DSCBSTATUS_LOOPING          =0x00000002
} CONST_DSCBSTATUSFLAGS;

 [helpcontext(81961)]
typedef enum CONST_DSCBSTARTFLAGS {
	DSCBSTART_DEFAULT           =0x00000000, 
	DSCBSTART_LOOPING           =0x00000001
} CONST_DSCBSTARTFLAGS;

 [helpcontext(81958)]
typedef enum CONST_DSCAPSFLAGS {
 DSCAPS_PRIMARYMONO          =0x00000001,
 DSCAPS_PRIMARYSTEREO        =0x00000002,
 DSCAPS_PRIMARY8BIT          =0x00000004,
 DSCAPS_PRIMARY16BIT         =0x00000008,
 DSCAPS_CONTINUOUSRATE       =0x00000010,
 DSCAPS_EMULDRIVER           =0x00000020,
 DSCAPS_CERTIFIED            =0x00000040,
 DSCAPS_SECONDARYMONO        =0x00000100,
 DSCAPS_SECONDARYSTEREO      =0x00000200,
 DSCAPS_SECONDARY8BIT        =0x00000400,
 DSCAPS_SECONDARY16BIT       =0x00000800
} CONST_DSCAPSFLAGS;

 [helpcontext(81954)]
typedef enum CONST_DSBCAPSFLAGS {
	 DSBCAPS_PRIMARYBUFFER       =0x00000001,
	 DSBCAPS_STATIC              =0x00000002,
	 DSBCAPS_LOCHARDWARE         =0x00000004,
	 DSBCAPS_LOCSOFTWARE         =0x00000008,
	 DSBCAPS_CTRL3D              =0x00000010,
	 DSBCAPS_CTRLFREQUENCY       =0x00000020,
	 DSBCAPS_CTRLPAN             =0x00000040,
	 DSBCAPS_CTRLVOLUME          =0x00000080,
	 DSBCAPS_CTRLPOSITIONNOTIFY  =0x00000100,
	 DSBCAPS_CTRLFX              =0x00000200,
	 DSBCAPS_CTRLCHANNELVOLUME   =0x00000400,
#if 0
	 DSBCAPS_MIXIN               =0x00002000,
#endif
	 DSBCAPS_STICKYFOCUS         =0x00004000,
	 DSBCAPS_GLOBALFOCUS         =0x00008000,
	 DSBCAPS_GETCURRENTPOSITION2 =0x00010000,
	 DSBCAPS_MUTE3DATMAXDISTANCE =0x00020000,
	 DSBCAPS_LOCDEFER            =0x00040000
} CONST_DSBCAPSFLAGS;

 [helpcontext(81959)]
typedef enum CONST_DSCBCAPSFLAGS {
	DSCBCAPS_DEFAULT          =0x00000000,
	 DSCBCAPS_WAVEMAPPED         =0x80000000
} CONST_DSCBCAPSFLAGS;

 [helpcontext(81963)]
typedef enum CONST_DSCCAPSFLAGS {
  DSCCAPS_DEFAULT           =0x00000000,
  DSCCAPS_EMULDRIVER          =0x00000020  
} CONST_DSCCAPSFLAGS;

 [helpcontext(81891)]
typedef enum CONST_DSOUND {


	 //KSPROPERTY_SUPPORT_GET  =0x00000001,
	 //KSPROPERTY_SUPPORT_SET  =0x00000002,


	 DS3D_MINDISTANCEFACTOR      =0,
	 DS3D_MAXDISTANCEFACTOR      =10,
	 DS3D_DEFAULTDISTANCEFACTOR  =1,

	 DS3D_MINROLLOFFFACTOR       =0,
	 DS3D_MAXROLLOFFFACTOR       =10,
	 DS3D_DEFAULTROLLOFFFACTOR   =1,

	 DS3D_MINDOPPLERFACTOR       =0,
	 DS3D_MAXDOPPLERFACTOR       =10,
	 DS3D_DEFAULTDOPPLERFACTOR   =1,

	 DS3D_DEFAULTMINDISTANCE     =1,
	 DS3D_DEFAULTMAXDISTANCE     =1000000000,

	 DS3D_MINCONEANGLE           =0,
	 DS3D_MAXCONEANGLE           =360,
	 DS3D_DEFAULTCONEANGLE       =360,

	 DS3D_DEFAULTCONEOUTSIDEVOLUME  = 0,

	 DSBFREQUENCY_MIN            =100,
	 DSBFREQUENCY_MAX            =100000,
	 DSBFREQUENCY_ORIGINAL       =0,

	 DSBPAN_LEFT                 =-10000,
	 DSBPAN_CENTER               =0,
	 DSBPAN_RIGHT                =10000,

	 DSBVOLUME_MIN               =-10000,
	 DSBVOLUME_MAX               =0,

	 DSBSIZE_MIN                 =4,
	 DSBSIZE_MAX                 =0x0FFFFFFF,

	 DSBPN_OFFSETSTOP            =0xFFFFFFFF,

	 WAVE_FORMAT_PCM		=1
} CONST_DSOUND;


//we let the dmusic constants be global


 [helpcontext(81767)]
typedef enum CONST_DMUS_AUDIO {
/* dwFeatures flags. These indicate which features are required for the audio environment. */
	DMUS_AUDIOF_3D          		= 0x1,   /* Require 3D buffers. */
	DMUS_AUDIOF_ENVIRON     		= 0x2,   /* Require environmental modeling. */
	DMUS_AUDIOF_EAX         		= 0x4,   /* Require use of EAX effects. */
	DMUS_AUDIOF_DMOS        		= 0x8,   /* Require use of additional DMOs (listed). */
	DMUS_AUDIOF_STREAMING   		= 0x10,  /* Require support for streaming waves. */
	DMUS_AUDIOF_BUFFERS     		= 0x20,  /* Require support for multiple buffers (all above cases need this.) */
	DMUS_AUDIOF_ALL         		= 0x3F   /* Requires everything. */
} CONST_DMUS_AUDIO;

 [helpcontext(81766)]
typedef enum CONST_DMUS_AUDIOPARAMS {
	DMUS_AUDIOPARAMS_FEATURES   		= 0x00000001,
	DMUS_AUDIOPARAMS_VOICES     		= 0x00000002,
	DMUS_AUDIOPARAMS_SAMPLERATE 		= 0x00000004,
	DMUS_AUDIOPARAMS_DEFAULTSYNTH   	= 0x00000008
} CONST_DMUS_AUDIOPARAMS;

 [helpcontext(81776)]
typedef enum CONST_DMUS_PCHANNEL {
	DMUS_PCHANNEL_ALL           		= 0xFFFFFFFB,      
	DMUS_PCHANNEL_BROADCAST_PERFORMANCE	= 0xFFFFFFFF,  /* PMsg is sent on all PChannels of the performance. */
	DMUS_PCHANNEL_BROADCAST_AUDIOPATH   	= 0xFFFFFFFE,  /* PMsg is sent on all PChannels of the audio path. */
	DMUS_PCHANNEL_BROADCAST_SEGMENT	    	= 0xFFFFFFFD,  /* PMsg is sent on all PChannels of the segment. */
	DMUS_PCHANNEL_BROADCAST_GROUPS  	= 0xFFFFFFFC,  /* A duplicate PMsg is for each Channels Groups in the performance. */
} CONST_DMUS_PCHANNEL;


 [helpcontext(81783)]
typedef enum CONST_DMUSIC_STANDARD_AUDIO_PATH {
	DMUS_APATH_SHARED_STEREOPLUSREVERB	= 1,       /* A standard music set up with stereo outs and reverb. */
	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. */
	DMUS_APATH_DYNAMIC_MONO			= 7,       /* An audio path with one dynamic bus from the synth feeding to a dynamic mono buffer. */
	DMUS_APATH_DYNAMIC_STEREO		= 8       /* An audio path with two dynamic buses from the synth feeding to a dynamic stereo buffer. */
} CONST_DMUSIC_STANDARD_AUDIO_PATH;

 [helpcontext(81782)]
typedef enum CONST_DMUSIC_PATH {
	DMUS_PATH_SEGMENT          	= 0x1000,      /* Get the segment itself (from a segment state.) */
	DMUS_PATH_SEGMENT_TRACK    	= 0x1100,      /* Look in Track List of Segment. */
	DMUS_PATH_SEGMENT_GRAPH    	= 0x1200,      /* Get the segment's tool graph. */
	DMUS_PATH_SEGMENT_TOOL     	= 0x1300,      /* Look in Tool Graph of Segment. */
	DMUS_PATH_AUDIOPATH        	= 0x2000,      /* Get the audiopath itself (from a segment state.) */
	DMUS_PATH_AUDIOPATH_GRAPH  	= 0x2200,      /* Get the audiopath's tool graph. */
	DMUS_PATH_AUDIOPATH_TOOL   	= 0x2300,      /* Look in Tool Graph of Audio Path. */
	DMUS_PATH_PERFORMANCE      	= 0x3000,      /* Access the performance. */
	DMUS_PATH_PERFORMANCE_GRAPH 	= 0x3200,     /* Get the performance's tool graph. */
	DMUS_PATH_PERFORMANCE_TOOL 	= 0x3300,      /* Look in Tool Graph of Performance. */
	DMUS_PATH_PORT             	= 0x4000,      /* Access the synth. */
	DMUS_PATH_BUFFER           	= 0x6000,      /* Look in DirectSoundBuffer. */
	DMUS_PATH_BUFFER_DMO       	= 0x6100,      /* Access a DMO in the buffer. */
	DMUS_PATH_MIXIN_BUFFER   	= 0x7000,      /* Look in effects DirectSoundBuffer. */
	DMUS_PATH_MIXIN_BUFFER_DMO 	= 0x7100,    /* Access a DMO in the effects buffer. */
	DMUS_PATH_PRIMARY_BUFFER    	= 0x8000,      /* Access the primary buffer. */ 
} CONST_DMUSIC_PATH;

 [helpcontext(81582)]
typedef enum  CONST_DMUS
{ 
    DMUS_MAXSUBCHORD=8,
    DMUS_TEMPO_MAX  =1000,
    DMUS_TEMPO_MIN  = 1
//    DMUSB_LOADED =0,	not needed according to a-perterd
//    DMUSB_DEFAULT =2,
} CONST_DMUS;

 [helpcontext(81771)]
typedef enum  CONST_DMUS_CURVES
{ 
    DMUS_CURVES_LINEAR  = 0,
    DMUS_CURVES_INSTANT = 1,
    DMUS_CURVES_EXP     = 2,
    DMUS_CURVES_LOG     = 3,
    DMUS_CURVES_SINE    = 4
} CONST_DMUS_CURVES;

 [helpcontext(81772)]
typedef enum CONST_DMUS_CURVET 
{
    DMUS_CURVET_PBCURVE     = 0x03,
    DMUS_CURVET_CCCURVE     = 0x04,
    DMUS_CURVET_MATCURVE    = 0x05,
    DMUS_CURVET_PATCURVE    = 0x06,
    DMUS_CURVET_RPNCURVE     = 0x07,   /* RPN curve with curve type in wParamType. */
    DMUS_CURVET_NRPNCURVE    = 0x08   /* NRPN curve with curve type in wParamType. */
} CONST_DMUS_CURVET;

/* The following correspond to GUID_NOTIFICATION_SEGMENT */


 [helpcontext(81774)]
typedef enum CONST_DMUS_NOTIFICATION_SUBTYPE
{
	DMUS_NOTIFICATION_MUSICSTARTED  =0,
	DMUS_NOTIFICATION_MUSICSTOPPED  =1,
	DMUS_NOTIFICATION_MEASUREBEAT   =0,
	DMUS_NOTIFICATION_CHORD         =0,
	DMUS_NOTIFICATION_GROOVE        =0,
	DMUS_NOTIFICATION_EMBELLISHMENT =1,
	DMUS_NOTIFICATION_SEGSTART      =0,
	DMUS_NOTIFICATION_SEGEND        =1,
	DMUS_NOTIFICATION_SEGALMOSTEND  =2,
	DMUS_NOTIFICATION_SEGLOOP       =3,
	DMUS_NOTIFICATION_SEGABORT      =4,
	DMUS_NOTIFICATION_MUSICALMOSTEND=2,
	DMUS_NOTIFICATION_RECOMPOSE	=0
} CONST_DMUS_NOTIFICATION_SUBTYPE;


 [helpcontext(81768)]
typedef enum CONST_DMUS_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
} CONST_DMUS_COMMANDT_TYPES;

 [helpcontext(81780)]
typedef enum CONST_DMUS_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
}   CONST_DMUS_SHAPET_TYPES;

 [helpcontext(81769)]
typedef enum CONST_DMUS_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_MODULATE          = 0x1000,
    DMUS_COMPOSEF_LONG              = 0x2000,
    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_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 */
}   CONST_DMUS_COMPOSEF_FLAGS;

 [helpcontext(81778)]
typedef enum CONST_DMUS_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      = 16,     /* if PMSG should be processed at the time stamp */
    DMUS_PMSGF_TOOL_FLUSH       = 32,      /* 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. */
} CONST_DMUS_PMSGF_FLAGS;

#if 0
// NOT NEEDED
 [helpcontext(88782)]
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_USER             = 255     /* User message */
} CONST_DMUS_PMSGT_TYPES;
#endif 

 [helpcontext(81779)]
typedef enum CONST_DMUS_SEGF_FLAGS
{
    DMUS_SEGF_REFTIME           = 64,     /* time parameter is in reference time  */
    DMUS_SEGF_SECONDARY         = 128,    /* secondary segment */
    DMUS_SEGF_QUEUE             = 256,    /* queue at the end of the primary segment queue (primary only) */
    DMUS_SEGF_CONTROL           = 512,    /* play as a control track (secondary segments only) */
    DMUS_SEGF_AFTERPREPARETIME  = 0x400,  /* play after the prepare time (See IDirectMusicPerformance::GetPrepareTime) */
    DMUS_SEGF_GRID              = 0x800,  /* play on grid boundary */
    DMUS_SEGF_BEAT              = 0x1000,  /* play on beat boundary */
    DMUS_SEGF_MEASURE           = 0x2000,  /* play on measure boundary */
    DMUS_SEGF_DEFAULT           = 0x4000,  /* use segment's default boundary */
    DMUS_SEGF_NOINVALIDATE      = 0x8000,   /* play without invalidating the currently playing segment(s) */
    DMUS_SEGF_ALIGN             = 0x10000,  /* Align segment with requested boundary, but switch at first valid point */
    DMUS_SEGF_VALID_START_BEAT  = 0x20000,  /* In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur on any beat. */
    DMUS_SEGF_VALID_START_GRID  = 0x40000,  /* In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur on any grid. */
    DMUS_SEGF_VALID_START_TICK  = 0x80000,  /* In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur any time. */
    DMUS_SEGF_AUTOTRANSITION    = 0x100000,  /* Compose and play a transition segment, using either the transition template or transition embedded in song. */
    DMUS_SEGF_AFTERQUEUETIME    = 0x200000,  /* Make sure to play after the queue time. This is default for primary segments */
    DMUS_SEGF_AFTERLATENCYTIME  = 0x400000,  /* Make sure to play after the latency time. This is true for all segments, so this is a nop */
    DMUS_SEGF_SEGMENTEND        = 0x800000,  /* Play at the next end of segment. */
    DMUS_SEGF_MARKER            = 0x1000000,  /* Play at next marker in the primary segment. If there are no markers, default to any other resolution requests. */
    DMUS_SEGF_TIMESIG_ALWAYS    = 0x2000000,  /* Even if there is no primary segment, align start time with current time signature. */
    DMUS_SEGF_USE_AUDIOPATH     = 0x4000000,   /* Uses the audio path that is embedded in the segment or song. */
    DMUS_SEGF_VALID_START_MEASURE = 0x8000000 /* In conjunction with DMUS_SEGF_ALIGN, allows the switch to occur on any bar. */
} CONST_DMUS_SEGF_FLAGS;


 [helpcontext(81773)]
typedef enum CONST_DMUS_NOTEF_FLAGS
{
    DMUS_NOTEF_NOTEON = 1,     /* Set if this is a MIDI Note On. Otherwise, it is MIDI Note Off */
} CONST_DMUS_NOTEF_FLAGS;


 [helpcontext(81777)]
typedef enum CONST_DMUS_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. */

    //derived flags
    DMUS_PLAYMODE_FIXED             =0,  
    DMUS_PLAYMODE_FIXEDTOKEY        =1,
    DMUS_PLAYMODE_FIXEDTOCHORD      =2,
    DMUS_PLAYMODE_PEDALPOINT        =5,
    DMUS_PLAYMODE_MELODIC           =6,
    DMUS_PLAYMODE_NORMALCHORD       =10,
    DMUS_PLAYMODE_ALWAYSPLAY        =14 ,
    //DMUS_PLAYMODE_PURPLEIZED        =14,
    //DMUS_PLAYMODE_SCALE_ROOT        =1,
    //DMUS_PLAYMODE_FIXEDTOSCALE      =1,
} CONST_DMUS_PLAYMODE_FLAGS;

 [helpcontext(81770)]
typedef enum CONST_DMUS_CURVE_FLAGS
{
    DMUS_CURVE_RESET = 1,           /* Set if the curve needs to be reset. */
    DMUS_CURVE_START_FROM_CURRENT = 2/* Ignore Start, start the curve at the current value. 
                                        This only works for volume, expression, and pitchbend. */
} CONST_DMUS_CURVE_FLAGS;



 [helpcontext(81007)]
typedef enum CONST_DSOUNDERR {
    DS_OK = 0,
    DSERR_ALLOCATED = -2005401590,
    DSERR_CONTROLUNAVAIL = -2005401570,
    DSERR_INVALIDPARAM = -2147024809,
    DSERR_INVALIDCALL = -2005401550,
    DSERR_GENERIC = -2147467259,
    DSERR_PRIOLEVELNEEDED = -2005401530,
    DSERR_OUTOFMEMORY = 7, // -2147024882,
    DSERR_BADFORMAT = -2005401500,
    DSERR_UNSUPPORTED = -2147467263,
    DSERR_NODRIVER = -2005401480,
    DSERR_ALREADYINITIALIZED = -2005401470,
    //DSERR_NOAGGREGATION = -2147467262,
    DSERR_BUFFERLOST = -2005401450,
    DSERR_OTHERAPPHASPRIO = -2005401440,
    DSERR_UNINITIALIZED = -2005401430,
    DSERR_NOINTERFACE =  430, //-2147467262
    DSERR_BUFFERTOOSMALL =  0x887800B4,
    DSERR_DS8_REQUIRED =  0x887800BE,
#if 0
    DSERR_SENDLOOP = 0x887810C8,
    DSERR_BADSENDBUFFERGUID = 0x887810D2, 
#endif
    DSERR_OBJECTNOTFOUND = 0x88781161,
} CONST_DSOUNDERR;


 [helpcontext(81781)]
typedef enum CONST_DMUSERR {

	//DMUS_S_PARTIALLOAD        =0x08781091,
	//DMUS_S_REQUEUE            =0x08781200,
    //DMUS_S_FREE=                      0x08781201,
	//DMUS_S_END                     =0x08781202,
	//DMUS_S_STRING_TRUNCATED        =0x08781210,
	//DMUS_S_LAST_TOOL               =0x08781211,
	//DMUS_S_OVER_CHORD              =0x08781212,
	//DMUS_S_UP_OCTAVE               =0x08781213,
	//DMUS_S_DOWN_OCTAVE             =0x08781214,
	DMUS_E_DRIVER_FAILED            =0x88781101,
	DMUS_E_PORTS_OPEN               =0x88781102,
	DMUS_E_DEVICE_IN_USE            =0x88781103,
	DMUS_E_INSUFFICIENTBUFFER       =0x88781104,
	DMUS_E_BUFFERNOTSET             =0x88781105,
	DMUS_E_BUFFERNOTAVAILABLE       =0x88781106,
	DMUS_E_NOTADLSCOL               =0x88781108,
	DMUS_E_INVALIDOFFSET            =0x88781109,
	DMUS_E_ALREADY_LOADED           =0x88781111,
	DMUS_E_INVALIDPOS               =0x88781113,
	DMUS_E_INVALIDPATCH             =0x88781114,
	DMUS_E_CANNOTSEEK               =0x88781115,
	DMUS_E_CANNOTWRITE              =0x88781116,
	DMUS_E_CHUNKNOTFOUND            =0x88781117,
	DMUS_E_INVALID_DOWNLOADID       =0x88781119,
	DMUS_E_NOT_DOWNLOADED_TO_PORT   =0x88781120,
	DMUS_E_ALREADY_DOWNLOADED       =0x88781121,
	DMUS_E_UNKNOWN_PROPERTY         =0x88781122,
	DMUS_E_SET_UNSUPPORTED          =0x88781123,
	DMUS_E_GET_UNSUPPORTED          =0x88781124,
	DMUS_E_NOTMONO                  =0x88781125,
	DMUS_E_BADARTICULATION          =0x88781126,
	DMUS_E_BADINSTRUMENT            =0x88781127,
	DMUS_E_BADWAVELINK              =0x88781128,
	DMUS_E_NOARTICULATION           =0x88781129,
	DMUS_E_NOTPCM                   =0x8878112A,
	DMUS_E_BADWAVE                  =0x8878112B,
	DMUS_E_BADOFFSETTABLE           =0x8878112C,
	DMUS_E_UNKNOWNDOWNLOAD          =0x8878112D,
	DMUS_E_NOSYNTHSINK              =0x8878112E,
	DMUS_E_ALREADYOPEN              =0x8878112F,
	DMUS_E_ALREADYCLOSED            =0x88781130,
	DMUS_E_SYNTHNOTCONFIGURED       =0x88781131,
	DMUS_E_SYNTHACTIVE              =0x88781132,
	DMUS_E_CANNOTREAD               =0x88781133,
	DMUS_E_DMUSIC_RELEASED          =0x88781134,
	DMUS_E_BUFFER_EMPTY             =0x88781135,
	DMUS_E_BUFFER_FULL              =0x88781136,
	DMUS_E_PORT_NOT_CAPTURE         =0x88781137,
	DMUS_E_PORT_NOT_RENDER          =0x88781138,
	DMUS_E_DSOUND_NOT_SET           =0x88781139,
	DMUS_E_ALREADY_ACTIVATED        =0x8878113A,
	DMUS_E_INVALIDBUFFER            =0x8878113B,
	DMUS_E_WAVEFORMATNOTSUPPORTED   =0x8878113C,
	DMUS_E_SYNTHINACTIVE            =0x8878113D,
	DMUS_E_DSOUND_ALREADY_SET       =0x8878113E,
	DMUS_E_INVALID_EVENT            =0x8878113F,
	DMUS_E_UNSUPPORTED_STREAM       =0x88781150,
	DMUS_E_ALREADY_INITED           =0x88781151,
	DMUS_E_INVALID_BAND             =0x88781152,
	DMUS_E_TRACK_HDR_NOT_FIRST_CK   =0x88781155,
	DMUS_E_TOOL_HDR_NOT_FIRST_CK    =0x88781156,
	DMUS_E_INVALID_TRACK_HDR        =0x88781157,
	DMUS_E_INVALID_TOOL_HDR         =0x88781158,
	DMUS_E_ALL_TOOLS_FAILED         =0x88781159,
	DMUS_E_ALL_TRACKS_FAILED        =0x88781160,
	DMUS_E_NOT_FOUND                =0x88781161,
	DMUS_E_NOT_INIT                 =0x88781162,
	DMUS_E_TYPE_DISABLED            =0x88781163,
	DMUS_E_TYPE_UNSUPPORTED         =0x88781164,
	DMUS_E_TIME_PAST                =0x88781165,
	DMUS_E_TRACK_NOT_FOUND		=0x88781166,
	DMUS_E_NO_MASTER_CLOCK          =0x88781170,
	DMUS_E_LOADER_NOCLASSID         =0x88781180,
	DMUS_E_LOADER_BADPATH           =0x88781181,
	DMUS_E_LOADER_FAILEDOPEN        =0x88781182,
	DMUS_E_LOADER_FORMATNOTSUPPORTED=0x88781183,
	DMUS_E_LOADER_FAILEDCREATE      =0x88781184,
	DMUS_E_LOADER_OBJECTNOTFOUND    =0x88781185,
	DMUS_E_LOADER_NOFILENAME	=0x88781186,
	DMUS_E_INVALIDFILE              =0x88781200,
	DMUS_E_ALREADY_EXISTS           =0x88781201,
	DMUS_E_OUT_OF_RANGE             =0x88781202,
	DMUS_E_SEGMENT_INIT_FAILED      =0x88781203,
	DMUS_E_ALREADY_SENT             =0x88781204,
	DMUS_E_CANNOT_FREE              =0x88781205,
	DMUS_E_CANNOT_OPEN_PORT         =0x88781206,
	DMUS_E_CANNOT_CONVERT           =0x88781207,
	DMUS_E_DESCEND_CHUNK_FAIL       =0x88781210,
	DMUS_E_NOT_LOADED               = 0x88781211,
	DMUS_E_INVALID_SEGMENTTRIGGERTRACK	= 0x88781220,
	DMUS_E_INVALID_LYRICSTRACK	= 0x88781221,
	DMUS_E_INVALID_PARAMCONTROLTRACK= 0x88781222,
	DMUS_E_AUDIOPATHS_NOT_VALID	= 0x88781226,
	DMUS_E_AUDIOPATHS_IN_USE	= 0x88781227,
	DMUS_E_NO_AUDIOPATH_CONFIG	= 0x88781228,
	DMUS_E_AUDIOPATH_INACTIVE	= 0x88781229,
	DMUS_E_AUDIOPATH_NOBUFFER	= 0x8878122A,
	DMUS_E_AUDIOPATH_NOPORT		= 0x8878122B,
	DMUS_E_NO_AUDIOPATH     	= 0x8878122C,
	DMUS_E_FAIL			= 0x80070057,
	DMUS_E_INVALIDARG		=5,
	DMUS_E_NOINTERFACE		=430,
	DMUS_E_OUTOFMEMORY		=7,
	DMUS_E_NOTIMPL			=445
} CONST_DMUSERR;

#endif


    //This is a new enumeration that needs to be available for
    //both C and VB code
 [helpcontext(81775)]
    typedef enum CONST_DMUS_NOTIFICATION_TYPE 
    {
	DMUS_NOTIFY_ON_RECOMPOSE 	=0,
    	DMUS_NOTIFY_ON_CHORD 		=1,
    	DMUS_NOTIFY_ON_COMMAND 		=2,
    	DMUS_NOTIFY_ON_MEASUREANDBEAT 	=3,
    	DMUS_NOTIFY_ON_PERFORMANCE	=4,
    	DMUS_NOTIFY_ON_SEGMENT		=5
    } CONST_DMUS_NOTIFICATION_TYPE;



    ///////////////////////////////////////////////////////////////////////////
    // 
    // Direct Sound structs
    // 
    ///////////////////////////////////////////////////////////////////////////

    

 [helpcontext(81937)]
    typedef struct DSEFFECTDESC_CDESC
    {
        [hidden] LONG lSize;
	LONG        		lFlags;
	BSTR        		guidDSFXClass;
#if 0
        I_dxj_DirectSoundBuffer	*SendBuffer;
#endif
        [hidden] LONG		lReserved;
        [hidden] LONG		lReserved2;
    } DSEFFECTDESC_CDESC;
    			
 [helpcontext(81837)]
    	typedef struct DSBCAPS_CDESC
    	{
    	     [hidden] LONG  lSize;
    	     CONST_DSBCAPSFLAGS  lFlags;
    	     LONG  lBufferBytes;
    	     LONG  lUnlockTransferRate;
    	     LONG  lPlayCpuOverhead;
    	} DSBCAPS_CDESC;
    	
    			
 [helpcontext(81840)]
    	typedef struct DSCAPS_CDESC {
    	     [hidden] LONG  lSize;
    	     CONST_DSCAPSFLAGS  lFlags;
    	     LONG  lMinSecondarySampleRate;
    	     LONG  lMaxSecondarySampleRate;
    	     LONG  lPrimaryBuffers;
    	     LONG  lMaxHwMixingAllBuffers;
    	     LONG  lMaxHwMixingStaticBuffers;
    	     LONG  lMaxHwMixingStreamingBuffers;
    	     LONG  lFreeHwMixingAllBuffers;
    	     LONG  lFreeHwMixingStaticBuffers;
    	     LONG  lFreeHwMixingStreamingBuffers;
    	
    	     LONG  lMaxHw3DAllBuffers;
    	     LONG  lMaxHw3DStaticBuffers;
    	     LONG  lMaxHw3DStreamingBuffers;
    	     LONG  lFreeHw3DAllBuffers;
    	     LONG  lFreeHw3DStaticBuffers;
    	     LONG  lFreeHw3DStreamingBuffers;
    	     LONG  lTotalHwMemBytes;
    	     LONG  lFreeHwMemBytes;
    	     LONG  lMaxContigFreeHwMemBytes;
    	     LONG  lUnlockTransferRateHwBuffers;
    	     LONG  lPlayCpuOverheadSwBuffers;
    	
    	     LONG  lReserved1;
    	     LONG  lReserved2;
    	} DSCAPS_CDESC;
    	
    			
 [helpcontext(81951)]
    	typedef struct WAVEFORMATEX_CDESC
    	{
    	     SHORT  nFormatTag;          /* format type */
    	     SHORT  nChannels;			/* number of channels (i.e. mono, stereo...) */
    	     LONG   lSamplesPerSec;		/* sample rate */
    	     LONG   lAvgBytesPerSec;		/* for buffer estimation */
    	     SHORT  nBlockAlign;			/* block size of data */
    	     SHORT  nBitsPerSample;      /* number of bits per sample of mono data */
    	     SHORT  nSize;				/* nbytes of the extra information */
    	     LONG   lExtra;				// was byte* seen as an array - extra information (after cbSize)
    	} WAVEFORMATEX_CDESC;
    	
    			
 [helpcontext(81931)]
    	typedef struct DSBUFFERDESC_CDESC 				//docdoc: requires WaveFormatex
    	{
    	     [hidden]	LONG  				lSize;
    	     		CONST_DSBCAPSFLAGS  			lFlags;
    	     		LONG  				lBufferBytes;
    	     [hidden] 	LONG  				lReserved;
    	     		WAVEFORMATEX_CDESC 		fxFormat;			// WaveFormatex   *lpwfxFormat;
			BSTR				guid3DAlgorithm;
    	} DSBUFFERDESC_CDESC;
    	
    			
 [helpcontext(81936)]
    	typedef struct DSCURSORS_CDESC
    	{
    	     LONG   lPlay;				// Play cursor
    	     LONG   lWrite;				// Write Cursor
    	} DSCURSORS_CDESC;
    
    	
    	//
    	// 3D Sound
    	//    
    
    			
 [helpcontext(81927)]
    	typedef struct DS3DBUFFER_CDESC
    	{
    	[hidden]LONG		lSize;
    		D3DVECTOR_CDESC	vPosition;
	    	D3DVECTOR_CDESC	vVelocity;
	    	LONG		lInsideConeAngle;
	    	LONG		lOutsideConeAngle;
	    	D3DVECTOR_CDESC	vConeOrientation;
	    	LONG		lConeOutsideVolume;
	    	FLOAT		minDistance;
	    	FLOAT		maxDistance;
	    	CONST_DS3DMODEFLAGS	lMode;
    	}DS3DBUFFER_CDESC;
    
    			
 [helpcontext(81928)]
    	typedef struct DS3DLISTENER_CDESC
    	{
    	    	[hidden] LONG lSize;	
    		D3DVECTOR_CDESC	vPosition;
    		D3DVECTOR_CDESC	vVelocity;
    		D3DVECTOR_CDESC	vOrientFront;
    		D3DVECTOR_CDESC	vOrientTop;
    
    	    	FLOAT distanceFactor;
    	    	FLOAT rolloffFactor;
    	    	FLOAT dopplerFactor;
    	
    	} DS3DLISTENER_CDESC;
       
    				
 [helpcontext(81841)]
    	typedef struct DSCBCAPS_CDESC
    	{
    		[hidden] LONG   lSize;
    		CONST_DSCBCAPSFLAGS   lFlags;
    		LONG   lBufferBytes;
    		LONG   lReserved;
    	} DSCBCAPS_CDESC;
    
    				
 [helpcontext(81843)]
    	typedef struct DSCCAPS_CDESC
    	{
    		[hidden] LONG   lSize;
    		CONST_DSCCAPSFLAGS	lFlags;
    		CONST_WAVEFORMATFLAGS lFormats;
    		LONG   lChannels;
    	} DSCCAPS_CDESC;
    				
 [helpcontext(81934)]
    	typedef struct DSCBUFFERDESC_CDESC
    	{
    		[hidden]LONG           	lSize;		
    		CONST_DSCBCAPSFLAGS          	lFlags;
    		LONG                   	lBufferBytes;
    		[hidden]    LONG    	lReserved;
            	WAVEFORMATEX_CDESC     	fxFormat;
		BSTR			guid3DAlgorithm;
    	} DSCBUFFERDESC_CDESC;
   
    			
 [helpcontext(81930)]
    	typedef struct DSBPOSITIONNOTIFY_CDESC 
	{
    		LONG  lOffset;
    		LONG  hEventNotify;
    	} DSBPOSITIONNOTIFY_CDESC;
     

	//
	// Direct Sound Effects Structures
	//

 [helpcontext(81857)]
	typedef struct DSFXPARAMEQ_CDESC
	{
	    FLOAT	fCenter;
	    FLOAT	fBandwidth;
	    FLOAT	fGain;
	} DSFXPARAMEQ_CDESC;

 [helpcontext(81210)]
	typedef struct DSFXWAVESREVERB_CDESC
	{
	    FLOAT	fInGain;                // [-96.0,0.0]            default: 0.0 dB
	    FLOAT	fReverbMix;             // [-96.0,0.0]            default: -10.0 db
	    FLOAT	fReverbTime;            // [0.001,3000.0]         default: 1000.0 ms
	    FLOAT	fHighFreqRTRatio;       // [0.001,0.999]          default: 0.001
	} DSFXWAVESREVERB_CDESC;

#if 0
 [helpcontext(81950)]
	typedef struct DSFXSEND_CDESC
	{
	    LONG                	lSendLevel;
	} DSFXSEND_CDESC;
#endif
    
 [helpcontext(81856)]
	typedef struct DSFXGARGLE_CDESC
	{
		CONST_DSFXGARGLE_RATEHZ lRateHz;               
		CONST_DSFXGARGLE_WAVE	lWaveShape;            
	} DSFXGARGLE_CDESC;

 [helpcontext(81943)]
	typedef struct DSFXCHORUS_CDESC
	{
	    FLOAT			fWetDryMix;
	    FLOAT			fDepth;
	    FLOAT			fFeedback;
	    FLOAT		 	fFrequency;
	    CONST_DSFX_WAVE		lWaveform;
	    FLOAT			fDelay;
	    CONST_DSFX_PHASE		lPhase;
	} DSFXCHORUS_CDESC;

 [helpcontext(81147)]
	typedef struct DSFXFLANGER_CDESC
	{
	    FLOAT			fWetDryMix;
	    FLOAT			fDepth;
	    FLOAT			fFeedback;
	    FLOAT			fFrequency;
	    CONST_DSFX_WAVE		lWaveform;
	    FLOAT			fDelay;
	    CONST_DSFX_PHASE		lPhase;
	} DSFXFLANGER_CDESC;

 [helpcontext(81946)]
	typedef struct DSFXECHO_CDESC
	{
	    FLOAT 			fWetDryMix;
	    FLOAT 			fFeedback;
	    FLOAT 			fLeftDelay;
	    FLOAT 			fRightDelay;
	    CONST_DSFX_PANDELAY		lPanDelay;
	} DSFXECHO_CDESC;

 [helpcontext(81853)]
	typedef struct DSFXDISTORTION_CDESC
	{
	    FLOAT 			fGain;
	    FLOAT 			fEdge;
	    FLOAT 			fPostEQCenterFrequency;
	    FLOAT 			fPostEQBandwidth;
	    FLOAT 			fPreLowpassCutoff;
	} DSFXDISTORTION_CDESC;

 [helpcontext(81852)]
	typedef struct DSFXCOMPRESSOR_CDESC
	{
	    FLOAT	fGain;
	    FLOAT	fAttack;
	    FLOAT	fRelease;
	    FLOAT	fThreshold;
	    FLOAT	fRatio;
	    FLOAT	fPredelay;
	} DSFXCOMPRESSOR_CDESC;

#if 0
 [helpcontext(81872)]
	typedef struct DSFXI3DL2OBSTRUCTION_CDESC
	{
	    CONST_I3DL2SOURCEOBSTRUCTION	lHFLevel;   
	    FLOAT	fRatio;  
	} DSFXI3DL2OBSTRUCTION_CDESC;

 [helpcontext(81873)]
	typedef struct DSFXI3DL2OCCLUSION_CDESC
	{
	    CONST_I3DL2SOURCEOCCLUSION		lHFLevel;   
	    FLOAT	fRatio;  
	} DSFXI3DL2OCCLUSION_CDESC;

 [helpcontext(81875)]
	typedef struct DSFXI3DL2SOURCE_CDESC
	{
	    CONST_I3DL2SOURCEDIRECT		lDirect;                // [-10000, 1000] default: 0 mB
	    CONST_I3DL2SOURCEDIRECTHF		lDirectHF;              // [-10000, 0]    default: 0 mB
	    CONST_I3DL2SOURCEROOM		lRoom;                  // [-10000, 1000] default: 0 mB
	    CONST_I3DL2SOURCEROOMHF		lRoomHF;                // [-10000, 0]    default: 0 mB
	    FLOAT				fRoomRolloffFactor;    // [0.0, 10.0]    default: 0.0
	    DSFXI3DL2OBSTRUCTION_CDESC		Obstruction;
	    DSFXI3DL2OCCLUSION_CDESC		Occlusion;
	    CONST_I3DL2SOURCEFLAGS		lFlags;                // default: DSFX_I3DL2SOURCE_OCC_LPF
	} DSFXI3DL2SOURCE_CDESC;

#endif
 [helpcontext(81849)]
	typedef struct DSFXI3DL2REVERB_CDESC
	{
	    LONG	lRoom;                  // [-10000, 0]      default: -10000 mB
	    LONG	lRoomHF;                // [-10000, 0]      default: 0 mB
	    FLOAT	fRoomRolloffFactor;    // [0.0, 10.0]      default: 0.0
	    FLOAT	fDecayTime;            // [0.1, 20.0]      default: 1.0 s
	    FLOAT	fDecayHFRatio;         // [0.1, 2.0]       default: 0.5
	    LONG	lReflections;           // [-10000, 1000]   default: -10000 mB
	    FLOAT	fReflectionsDelay;     // [0.0, 0.3]       default: 0.02 s
	    LONG	lReverb;                // [-10000, 2000]   default: -10000 mB
	    FLOAT	fReverbDelay;          // [0.0, 0.1]       default: 0.04 s
	    FLOAT	fDiffusion;            // [0.0, 100.0]     default: 100.0 %
	    FLOAT	fDensity;              // [0.0, 100.0]     default: 100.0 %
	    FLOAT	fHFReference;          // [20.0, 20000.0]  default: 5000.0 Hz
	} DSFXI3DL2REVERB_CDESC;

	//
	// DirectMusic Structures
	//

 [helpcontext(81666)]
	typedef struct DMUS_AUDIOPARAMS_CDESC
	{
	    [hidden] LONG	dwSize;             /* Size of this structure. */
	    VARIANT_BOOL    		fInitNow;           /* If true, the sink and synth are created immediately and results returned in this structure. */
	    CONST_DMUS_AUDIOPARAMS 	lValidData;        /* Flags indicating which fields below are valid. */
	    CONST_DMUS_AUDIO		lFeatures;         /* Required DMUS_AUDIOF features. */
	    LONG			lVoices;           /* Required number of voices. */
	    LONG			lSampleRate;       /* Sample rate of synths and sink. */
	    BSTR			clsidDefaultSynth;  /* Class ID of default synthesizer. */
	} DMUS_AUDIOPARAMS_CDESC;

 [helpcontext(81764)]
    typedef struct DMUS_TIMESIGNATURE_CDESC {
        LONG   mtTime;
        Byte   beatsPerMeasure;
        Byte   beat;
        SHORT  gridsPerBeat;
    } DMUS_TIMESIGNATURE_CDESC;
    
    #define MUSIC_TIME LONG
    
 [helpcontext(81763)]
    typedef struct DMUS_NOTIFICATION_PMSG_CDESC 
    {   
    [hidden]	LONG	lFlags;
    			LONG	ctTime;
    			LONG	mtTime;
    			LONG	lNotificationType;			
    			LONG	lNotificationOption;
    			LONG	lField1;
    			LONG	lField2;
			IUnknown *User;
    } DMUS_NOTIFICATION_PMSG_CDESC;
    
    
 [helpcontext(81761)]
    typedef struct DMUS_CURVE_PMSG_CDESC {
    	MUSIC_TIME mtDuration;
    	MUSIC_TIME mtOriginalStart;
    	MUSIC_TIME mtResetDuration;
    	SHORT      startValue;
    	SHORT      endValue;
    	SHORT      resetValue;
    	SHORT      measure;
    	SHORT      offset;
    	Byte       beat;
    	Byte       grid;
    	Byte       type;
    	Byte       curveShape;
    	Byte       ccData;
    	Byte       flags;
    	SHORT      ParamType;      /* RPN or NRPN parameter number. */
    	SHORT      MergeIndex;     /* Allows multiple parameters to be merged (pitchbend, volume, and expression.)*/
    } DMUS_CURVE_PMSG_CDESC;
    
 [helpcontext(81762)]
    typedef struct DMUS_NOTE_PMSG_CDESC {
    	MUSIC_TIME mtDuration;
    	SHORT      musicValue;
    	SHORT      measure;
    	SHORT      offset;
    	Byte       beat;
    	Byte       grid;
    	Byte       velocity;
    	Byte       flags;
    	Byte       timeRange;
    	Byte       durRange;
    	Byte       velRange;
    	Byte       playModeFlags;
    	Byte       subChordLevel;
    	Byte       midiValue;
    	SHORT      transpose;	//becomes byte
    } DMUS_NOTE_PMSG_CDESC;
    
    ///////////////////////////////////////////////////////////////////////////
    // 
    // Direct Sound Interfaces 
    // 
    ///////////////////////////////////////////////////////////////////////////

    	[
    		object,
    		uuid(9F76FB00-8E92-11d1-8808-00C04FC2C603),
    		helpstring("DirectSound Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(312400)
    	]
    	interface I_dxj_DirectSound : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    		//
    		//*** IDirectSound methods ***
    		//
    		[helpcontext(81823)]		HRESULT createSoundBuffer([in] DSBUFFERDESC_CDESC *bufferDesc,
    								[out, retval] I_dxj_DirectSoundBuffer **soundBuffer);
    
    		[helpcontext(81824)]		HRESULT createSoundBufferFromFile([in] BSTR fileName, [in,out] DSBUFFERDESC_CDESC *bufferDesc,
    								[out, retval] I_dxj_DirectSoundBuffer **soundBuffer);
    
    		[helpcontext(81825)]		HRESULT createSoundBufferFromResource([in] BSTR dll, [in] BSTR resourceName, [in,out] DSBUFFERDESC_CDESC *bufferDesc,
    								[out, retval] I_dxj_DirectSoundBuffer **soundBuffer);
    
    		[helpcontext(81827)]		HRESULT getCaps([in,out] DSCAPS_CDESC *caps);
    		[helpcontext(81826)]		HRESULT duplicateSoundBuffer([in] I_dxj_DirectSoundBuffer *original, 
    									[out, retval] I_dxj_DirectSoundBuffer **duplicate);
    		
#ifdef _WIN64
    		[helpcontext(81829)]		HRESULT setCooperativeLevel([in] HWND hwnd, [in] CONST_DSSCLFLAGS level);		
#else
    		[helpcontext(81829)]		HRESULT setCooperativeLevel([in] LONG hwnd, [in] CONST_DSSCLFLAGS level);		
#endif
    		[helpcontext(81828)]		HRESULT getSpeakerConfig([out,retval] CONST_DSSPEAKERFLAGS *speakerConfig);
    		[helpcontext(81830)]		HRESULT setSpeakerConfig([in] CONST_DSSPEAKERFLAGS speakerConfig);
    		[helpcontext(81822)]		HRESULT CreatePrimarySoundBuffer([in] DSBUFFERDESC_CDESC *bufferDesc,
    								[out, retval] I_dxj_DirectSoundPrimaryBuffer **soundBuffer);
    	};
    
    	[
    		object,
    		uuid(4E6F040E-03FB-4ba1-897C-2265700D5368),
    		helpstring("DirectSoundPrimaryBuffer Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(312600)
    	]
    	interface I_dxj_DirectSoundPrimaryBuffer : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    		//
    		/*** IDirectSoundBuffer methods ***/
    		//
    		[helpcontext(96791)]		HRESULT getDirectSound3dListener([out, retval] I_dxj_DirectSound3dListener **lpdsl);
    		[helpcontext(81889)]		HRESULT getCaps([in,out] DSBCAPS_CDESC *caps);
    		[helpcontext(81890)]		HRESULT getCurrentPosition([out] DSCURSORS_CDESC *cursors);
    		
    		[helpcontext(81892)]		HRESULT getFormat([in,out] WAVEFORMATEX_CDESC *format);
    		[helpcontext(81895)]		HRESULT getVolume([out,retval] LONG *volume);
    		[helpcontext(81893)]		HRESULT getPan([out,retval] LONG *pan);
    		[helpcontext(81894)]		HRESULT getStatus([out,retval] CONST_DSBSTATUSFLAGS *status);
    		[hidden]		HRESULT initialize([in] I_dxj_DirectSound *directSound, 
    							[in,out] DSBUFFERDESC_CDESC *bufferDesc, [in,out] byte *wbuf);
    
    
    		[helpcontext(81903)]		HRESULT writeBuffer([in] LONG start, [in] LONG size, [in] void *buffer, [in] CONST_DSBLOCKFLAGS flags);
    		[helpcontext(81897)]		HRESULT readBuffer([in] LONG start, [in] LONG size, [in] void *buffer, [in] CONST_DSBLOCKFLAGS flags);
    		[helpcontext(81896)]		HRESULT play([in] CONST_DSBPLAYFLAGS flags);
    		[helpcontext(81899)]		HRESULT setFormat([in] WAVEFORMATEX_CDESC *format);
    		[helpcontext(81901)]		HRESULT setVolume([in] LONG volume);
    		[helpcontext(81900)]		HRESULT setPan([in] LONG pan);
    		[helpcontext(81902)]		HRESULT stop();
    		[helpcontext(81898)]		HRESULT restore();
    		
    	};
    	///////////////////////////////////////////////////////////////////////////
    	[
    		object,
    		uuid(9F76FB01-8E92-11d1-8808-00C04FC2C603),
    		helpstring("DirectSoundBuffer Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(98600)
    	]
    	interface I_dxj_DirectSoundBuffer : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    		//
    		/*** IDirectSoundBuffer methods ***/
    		//
    		[helpcontext(81908)]		HRESULT getDirectSound3dBuffer([out, retval] I_dxj_DirectSound3dBuffer **lpdsb);
    		[helpcontext(81906)]		HRESULT getCaps([in,out] DSBCAPS_CDESC *caps);
    		[helpcontext(81907)]		HRESULT getCurrentPosition([out] DSCURSORS_CDESC *cursors);
    		
    		
    		[helpcontext(81909)]		HRESULT getFormat([in,out] WAVEFORMATEX_CDESC *format);
    		[helpcontext(81914)]		HRESULT getVolume([out,retval] LONG *volume);
    		[helpcontext(81912)]		HRESULT getPan([out,retval] LONG *pan);
    		[helpcontext(81910)]		HRESULT getFrequency([out,retval] LONG *frequency);
    		[helpcontext(81913)]		HRESULT getStatus([out,retval] CONST_DSBSTATUSFLAGS *status);
    		[hidden]		HRESULT initialize([in] I_dxj_DirectSound *directSound, 
    							[in,out] DSBUFFERDESC_CDESC *bufferDesc, [in,out] byte *wbuf);
    
    
    		[helpcontext(81926)]		HRESULT writeBuffer([in] LONG start, [in] LONG size, [in] void *buffer, [in] CONST_DSBLOCKFLAGS flags);
    		[helpcontext(81116)]		HRESULT readBuffer([in] LONG start, [in] LONG size, [in] void *buffer, [in] CONST_DSBLOCKFLAGS flags);
    		[helpcontext(81915)]		HRESULT play([in] CONST_DSBPLAYFLAGS flags);
    		[helpcontext(81919)]		HRESULT setCurrentPosition([in] LONG newPosition);
    		[helpcontext(81924)]		HRESULT setVolume([in] LONG volume);
    		[helpcontext(81923)]		HRESULT setPan([in] LONG pan);
    		[helpcontext(81920)]		HRESULT setFrequency([in] LONG frequency);
    		[helpcontext(81925)]		HRESULT stop();
    		[helpcontext(81917)]		HRESULT restore();
    		[helpcontext(81922)]		HRESULT setNotificationPositions(LONG nElements, SAFEARRAY(DSBPOSITIONNOTIFY_CDESC) *psa); 
    		[helpcontext(81918)]		HRESULT saveToFile([in] BSTR filename);
    		[helpcontext(81921)]		HRESULT SetFX([in] LONG lEffectsCount, SAFEARRAY(DSEFFECTDESC_CDESC) *Buffers, SAFEARRAY(LONG) *lResultIDs);
    		[helpcontext(81905)]		HRESULT AcquireResources([in] LONG lFlags, [in,out] SAFEARRAY(LONG) *lEffectsResults);
    		[helpcontext(81911)]		HRESULT GetObjectinPath([in] BSTR guidFX, [in] LONG lIndex, [in] BSTR iidInterface, [out,retval] IUnknown **ret);
    		
    	};
    
    
    	///////////////////////////////////////////////////////////////////////////
    	// I_dxj_DirectSound3dListener
    	[
    		object,
    		uuid(9F76FB02-8E92-11d1-8808-00C04FC2C603),		
    		helpstring("DirectSound3dListener Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(312800)
    	]
    	interface I_dxj_DirectSound3dListener : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    		//
    		/*** IDirectSound3D methods ***/
    		//
    		[helpcontext(81806)]		HRESULT getAllParameters( [in,out] DS3DLISTENER_CDESC *listener );
    		[helpcontext(81808)]		HRESULT getDistanceFactor( [out,retval] FLOAT *distanceFactor );
    		[helpcontext(81809)]		HRESULT getDopplerFactor( [out,retval] FLOAT *dopplerFactor );
    		[helpcontext(81810)]		HRESULT getOrientation( [in,out] D3DVECTOR_CDESC *orientFront, [in,out] D3DVECTOR_CDESC *orientTop );
    		[helpcontext(81811)]		HRESULT getPosition( [out] D3DVECTOR_CDESC *position );
    		[helpcontext(81812)]		HRESULT getRolloffFactor( [out,retval] FLOAT* rolloffFactor );
    		[helpcontext(81813)]		HRESULT getVelocity( [out,retval] D3DVECTOR_CDESC *velocity );
    		[helpcontext(81814)]		HRESULT setAllParameters( [in] DS3DLISTENER_CDESC *listener, [in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81815)]		HRESULT setDistanceFactor( [in] FLOAT distanceFactor, [in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81816)]		HRESULT setDopplerFactor( [in] FLOAT dopplerFactor, [in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81817)]		HRESULT setOrientation( [in] FLOAT xFront, [in] FLOAT yFront, [in] FLOAT zFront, 
    								[in] FLOAT xTop, [in] FLOAT yTop, [in] FLOAT zTop, 
    								[in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81818)]		HRESULT setPosition( [in] FLOAT x , [in] FLOAT y, [in] FLOAT z, [in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81819)]		HRESULT setRolloffFactor( [in] FLOAT rolloffFactor, [in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81820)]		HRESULT setVelocity( [in] FLOAT x, [in] FLOAT y, [in] FLOAT z, [in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81805)]		HRESULT commitDeferredSettings();
    		[helpcontext(81807)]		HRESULT getDirectSoundBuffer([out,retval] I_dxj_DirectSoundPrimaryBuffer **retVal);
    	};
    
    	///////////////////////////////////////////////////////////////////////////
    	// IDirectSound3DBuffer
    	[
    		object,
    		uuid(9F76FB03-8E92-11d1-8808-00C04FC2C603),		
    		helpstring("DirectSound3DBuffer Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(313000)
    	]
    	interface I_dxj_DirectSound3dBuffer : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    		//
    		/*** IDirectSoundBuffer3D methods ***/
    		//
    		[helpcontext(81789)]		HRESULT getDirectSoundBuffer([out,retval] I_dxj_DirectSoundBuffer **retVal);
    		[helpcontext(81785)]		HRESULT getAllParameters( [in,out] DS3DBUFFER_CDESC *buffer );
    		[helpcontext(81786)]		HRESULT getConeAngles( [in,out]  LONG *inCone, [in,out]  LONG *outCone );
    		[helpcontext(81787)]		HRESULT getConeOrientation( [in,out] D3DVECTOR_CDESC* orientation );
    		[helpcontext(81788)]		HRESULT getConeOutsideVolume( [out,retval] LONG * coneOutsideVolume );
    		[helpcontext(81790)]		HRESULT getMaxDistance( [out,retval] FLOAT* maxDistance );
    		[helpcontext(81791)]		HRESULT getMinDistance( [out,retval] FLOAT* minDistance );
    		[helpcontext(81792)]		HRESULT getMode( [out,retval]  CONST_DS3DMODEFLAGS *mode );
    		[helpcontext(81793)]		HRESULT getPosition( [in,out] D3DVECTOR_CDESC* position );
    		[helpcontext(81794)]		HRESULT getVelocity( [in,out] D3DVECTOR_CDESC* velocity );
    		[helpcontext(81795)]		HRESULT setAllParameters( [in] DS3DBUFFER_CDESC *buffer,[in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81796)]		HRESULT setConeAngles( [in] LONG inCone, [in] LONG outCone, [in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81797)]		HRESULT setConeOrientation( [in] FLOAT x , [in] FLOAT y, [in] FLOAT z, [in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81798)]		HRESULT setConeOutsideVolume( [in] LONG coneOutsideVolume,[in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81799)]		HRESULT setMaxDistance( [in] FLOAT maxDistance,[in]  CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81800)]		HRESULT setMinDistance( [in] FLOAT minDistance,[in]  CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81801)]		HRESULT setMode( [in]  CONST_DS3DMODEFLAGS mode,[in]  CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81802)]		HRESULT setPosition( [in] FLOAT x , [in] FLOAT y, [in] FLOAT z, [in] CONST_DS3DAPPLYFLAGS applyFlag);
    		[helpcontext(81803)]		HRESULT setVelocity( [in] FLOAT x , [in] FLOAT y, [in] FLOAT z, [in] CONST_DS3DAPPLYFLAGS applyFlag);		
    	};
    
    	[
    		object,
    		uuid(9F76FB04-8E92-11d1-8808-00C04FC2C603),	
    		helpstring("DirectSoundCapture Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(313200)
    	]
    	interface I_dxj_DirectSoundCapture : IUnknown	
    	{
    		import "oaidl.idl";
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    		[helpcontext(81832)]		HRESULT createCaptureBuffer([in]DSCBUFFERDESC_CDESC *bufferDesc,[out,retval] I_dxj_DirectSoundCaptureBuffer **ret);
    		[helpcontext(81833)]		HRESULT getCaps([in,out]DSCCAPS_CDESC *caps);
    	
    	};
    	
    
    	[
    		object,
    		uuid(9F76FB05-8E92-11d1-8808-00C04FC2C603),	
    		helpstring("DirectSoundCaptureBuffer Interface"),
    		pointer_default(unique),
    		helpcontext(313400)
    
    	]
    	interface I_dxj_DirectSoundCaptureBuffer : IUnknown	
    	{
    		import "oaidl.idl";
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    		[helpcontext(81835)]		HRESULT getCaps([in,out]DSCBCAPS_CDESC *caps);		
    		[helpcontext(81836)]		HRESULT getCurrentPosition([in,out] DSCURSORS_CDESC *cursors);
    		[helpcontext(81537)]		HRESULT getFormat([in,out] WAVEFORMATEX_CDESC *waveformat);
    		[helpcontext(81838)]		HRESULT getStatus([out,retval] CONST_DSCBSTATUSFLAGS * status);
    		[hidden]				HRESULT initialize([in]I_dxj_DirectSoundCaptureBuffer *captureBuffer,[in]DSCBUFFERDESC_CDESC *bufferDesc);
    		[helpcontext(81541)]		HRESULT start([in] CONST_DSCBSTARTFLAGS flags);
    		[helpcontext(81842)]		HRESULT stop();
    		[helpcontext(81543)]		HRESULT writeBuffer([in] LONG start, [in] LONG size, [in] void *buffer, [in] CONST_DSCBLOCKFLAGS flags);
    		[helpcontext(81839)]		HRESULT readBuffer([in] LONG start, [in] LONG size, [in] void *buffer, [in] CONST_DSCBLOCKFLAGS flags);
    		[helpcontext(81540)]		HRESULT setNotificationPositions(LONG nElements, SAFEARRAY(DSBPOSITIONNOTIFY_CDESC) *psa); 
    
    	};
    
    	[
    		object,
    		uuid(9F76FB07-8E92-11d1-8808-00C04FC2C603),	
    		helpstring("DSEnum Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(313600)
    	]
    	interface I_dxj_DSEnum : IUnknown
    	{
    		import "oaidl.idl";
    		[helpcontext(81847)]		HRESULT getGuid([in] LONG index,[out,retval] BSTR *guid);
    		[helpcontext(81846)]		HRESULT getDescription([in] LONG index,[out,retval] BSTR *guid);
    		[helpcontext(81848)]		HRESULT getName([in] LONG index,[out,retval] BSTR *guid);
            	[helpcontext(81845)]		HRESULT getCount([out,retval]LONG *count);		
    	};
    


    ///////////////////////////////////////////////////////////////////////////
    // 
    // Direct Sound Effects Interfaces 
    // 
    ///////////////////////////////////////////////////////////////////////////

    	[
    		object,
    		uuid(A4D4D800-94BE-4c33-9A0E-EBA0696A63A9),
    		helpstring("DirectSoundFXWavesReverb Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81211)
    	]
    	interface I_dxj_DirectSoundFXWavesReverb : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81887)]			HRESULT SetAllParameters([in,out] DSFXWAVESREVERB_CDESC *params);
		[helpcontext(81886)]			HRESULT GetAllParameters([out,retval] DSFXWAVESREVERB_CDESC *params);
    	};

    	[
    		object,
    		uuid(CD83B9C1-B4E9-416b-97F5-0642DC952301),
    		helpstring("DirectSoundFXParamEQ Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81212)
    	]
    	interface I_dxj_DirectSoundFXParamEQ : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81881)]			HRESULT SetAllParameters([in,out] DSFXPARAMEQ_CDESC *params);
		[helpcontext(81880)]			HRESULT GetAllParameters([out,retval] DSFXPARAMEQ_CDESC *params);
    	};

    	[
    		object,
    		uuid(542C5D87-47FC-457b-859A-1A45BBF71A63),
    		helpstring("DirectSoundFXI3DL2Reverb Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81213)
    	]
    	interface I_dxj_DirectSoundFXI3DL2Reverb : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81870)]			HRESULT SetAllParameters([in,out] DSFXI3DL2REVERB_CDESC *params);
		[helpcontext(81868)]			HRESULT GetAllParameters([out,retval] DSFXI3DL2REVERB_CDESC *params);
		[helpcontext(81871)]			HRESULT SetPreset([in] CONST_DSFX_I3DL2_ENVIRONMENT_PRESETS lPreset);
		[helpcontext(81869)]			HRESULT GetPreset([out,retval] LONG *ret);
		[helpcontext(89150)]			HRESULT SetQuality([in] CONST_DSFX_I3DL2REVERB_QUALITY lQuality);
		[helpcontext(89151)]			HRESULT GetQuality([out,retval] LONG *ret);
    	};

#if 0
    	[
    		object,
    		uuid(F24E6886-C3CC-4a57-A1E4-860314BDF8D6),
    		helpstring("DirectSoundFXI3DL2Source Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81214)
    	]
    	interface I_dxj_DirectSoundFXI3DL2Source : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81876)]			HRESULT SetAllParameters([in, out] DSFXI3DL2SOURCE_CDESC *params);
		[helpcontext(81573)]			HRESULT GetAllParameters([out,retval] DSFXI3DL2SOURCE_CDESC *params);
		[helpcontext(81877)]			HRESULT SetObstructionPreset([in] CONST_DSFX_I3DL2_MATERIAL_PRESET lObstruction);
		[helpcontext(81874)]			HRESULT GetObstructionPreset([out,retval] LONG *ret);
		[helpcontext(81878)]			HRESULT SetOcclusionPreset([in] CONST_DSFX_I3DL2_MATERIAL_PRESET lOcclusion);
		[helpcontext(81575)]			HRESULT GetOcclusionPreset([out,retval] LONG *ret);
    	};

#endif
    	[
    		object,
    		uuid(F902315C-D34A-4133-BD65-4069230811DD),
    		helpstring("DirectSoundFXCompressor Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81215)
    	]
    	interface I_dxj_DirectSoundFXCompressor : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81854)]			HRESULT SetAllParameters([in,out] DSFXCOMPRESSOR_CDESC *params);
		[helpcontext(81553)]			HRESULT GetAllParameters([out,retval] DSFXCOMPRESSOR_CDESC *params);
    	};

    	[
    		object,
    		uuid(3CE4D8D6-B301-49b4-9C63-9A989CA40388),
    		helpstring("DirectSoundFXDistortion Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81216)
    	]
    	interface I_dxj_DirectSoundFXDistortion : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81557)]			HRESULT SetAllParameters([in,out] DSFXDISTORTION_CDESC *params);
		[helpcontext(81556)]			HRESULT GetAllParameters([out,retval] DSFXDISTORTION_CDESC *params);
    	};

    	[
    		object,
    		uuid(E852583A-526F-4875-842B-8DB091A20FBC),
    		helpstring("DirectSoundFXEcho Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81217)
    	]
    	interface I_dxj_DirectSoundFXEcho : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81860)]			HRESULT SetAllParameters([in,out] DSFXECHO_CDESC *params);
		[helpcontext(81859)]			HRESULT GetAllParameters([out,retval] DSFXECHO_CDESC *params);
    	};

    	[
    		object,
    		uuid(9F9C7BB0-F4EA-472b-89A8-36FAADBCE26E),
    		helpstring("DirectSoundFXFlanger Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81218)
    	]
    	interface I_dxj_DirectSoundFXFlanger : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81863)]			HRESULT SetAllParameters([in,out] DSFXFLANGER_CDESC *params);
		[helpcontext(81862)]			HRESULT GetAllParameters([out,retval] DSFXFLANGER_CDESC *params);
    	};

    	[
    		object,
    		uuid(E53AC43D-651F-400d-B01F-E8A14512C6D6),
    		helpstring("DirectSoundFXChorus Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81219)
    	]
    	interface I_dxj_DirectSoundFXChorus : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81851)]			HRESULT SetAllParameters([in,out] DSFXCHORUS_CDESC *params);
		[helpcontext(81850)]			HRESULT GetAllParameters([out,retval] DSFXCHORUS_CDESC *params);
    	};


    	[
    		object,
    		uuid(B9B28963-4ADC-44f0-873F-9955244C9BD0),
    		helpstring("DirectSoundFXGargle Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81220)
    	]
    	interface I_dxj_DirectSoundFXGargle : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81866)]			HRESULT SetAllParameters([in,out] DSFXGARGLE_CDESC *params);
		[helpcontext(81865)]			HRESULT GetAllParameters([out,retval] DSFXGARGLE_CDESC *params);
    	};

#if 0
    	[
    		object,
    		uuid(E307FA2B-1305-403b-A769-2EF053BEAA3E),
    		helpstring("DirectSoundFXSend Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81221)
    	]
    	interface I_dxj_DirectSoundFXSend : IUnknown	
    	{
    		import "oaidl.idl";
    
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81884)]			HRESULT SetAllParameters([in,out] DSFXSEND_CDESC *params);
		[helpcontext(81883)]			HRESULT GetAllParameters([out,retval] DSFXSEND_CDESC *params);
    	};

#endif
    ///////////////////////////////////////////////////////////////////////////
    // 
    // DirectMusic
    // 
    ///////////////////////////////////////////////////////////////////////////


    	[
    		object,
    		uuid(A4A8597A-BA7A-4648-B321-1701598844D8),	
    		helpstring("DirectMusicAudioPath Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81022)
    	]
    	interface I_dxj_DirectMusicAudioPath : IUnknown	
    	{
      		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
		[helpcontext(81639)]			HRESULT GetObjectInPath([in] LONG lPChannel, [in] CONST_DMUSIC_PATH lStage, [in] LONG lBuffer, [in] BSTR guidObject, [in] LONG lIndex, [in] BSTR iidInterface, [out,retval] IUnknown **ppObject);
		[helpcontext(81638)]			HRESULT Activate([in] VARIANT_BOOL fActive);
		[helpcontext(81640)]			HRESULT SetVolume([in] LONG lVolume, [in] LONG lDuration);
    				
    	};

    	[
    		object,
    		uuid(FAFA35A0-8B72-11d2-90B2-00C04FC2C603),	
    		helpstring("DirectMusicLoader Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(316800)
    	]
    	interface I_dxj_DirectMusicLoader : IUnknown	
    	{
      		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    		// in place of GetObject we can have a function for each type -
    		// load from Resource 
    		[helpcontext(81661)]		HRESULT loadSegment([in]BSTR filename, [out,retval] I_dxj_DirectMusicSegment **ret);
    		[helpcontext(81664)]		HRESULT loadStyle([in]BSTR filename, [out,retval] I_dxj_DirectMusicStyle **ret);
    		[helpcontext(81655)]		HRESULT loadBand([in]BSTR filename, [out,retval] I_dxj_DirectMusicBand **ret);
    		[helpcontext(81659)]		HRESULT loadCollection([in]BSTR filename, [out,retval] I_dxj_DirectMusicCollection **ret);
    
    		[helpcontext(81662)]		HRESULT loadSegmentFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] I_dxj_DirectMusicSegment **ret);
    		[helpcontext(81665)]		HRESULT loadStyleFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] I_dxj_DirectMusicStyle **ret);
    		[helpcontext(81656)]		HRESULT loadBandFromResource([in]BSTR moduleName,[in] BSTR resourceName, [out,retval] I_dxj_DirectMusicBand **ret);
    		[helpcontext(81660)]		HRESULT loadCollectionFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] I_dxj_DirectMusicCollection **ret);
    
    		[helpcontext(81566)]		HRESULT setSearchDirectory([in] BSTR dir);
    
    		[helpcontext(81657)]		HRESULT loadChordMap([in]BSTR filename, [out,retval] I_dxj_DirectMusicChordMap **ret);
    		[helpcontext(81658)]		HRESULT loadChordMapFromResource([in]BSTR moduleName,[in]BSTR resourceName, [out,retval] I_dxj_DirectMusicChordMap **ret);

#if 0
    		[helpcontext(81663)]		HRESULT LoadSong([in]BSTR filename, [out,retval] I_dxj_DirectMusicSong **ret);
#endif

    				
    	};


    	[
    		object,
    		uuid(FAFA35A1-8B72-11d2-90B2-00C04FC2C603),	
    		helpstring("DirectMusicSegment Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(317000)
    	]
    	interface I_dxj_DirectMusicSegment : IUnknown	
    	{
    	
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    		
    		/* I_dxj_DirectMusicSegment */
    		[helpcontext(81718)]		HRESULT clone  ([in] MUSIC_TIME mtStart, [in]   MUSIC_TIME mtEnd,   [out,retval]    I_dxj_DirectMusicSegment** ppSegment);
    		[helpcontext(81734)]		HRESULT setStartPoint            ([in] MUSIC_TIME mtStart) ;
    		[helpcontext(81727)]		HRESULT getStartPoint            ([out,retval]  MUSIC_TIME* pmtStart);
    		[helpcontext(81731)]		HRESULT setLoopPoints            ([in]  MUSIC_TIME mtStart,    [in]   MUSIC_TIME mtEnd);
    		[helpcontext(81725)]		HRESULT getLoopPointStart        ([out,retval] MUSIC_TIME* pmtStart);
    		[helpcontext(81724)]		HRESULT getLoopPointEnd          ([out,retval] MUSIC_TIME* pmtEnd);
    		[helpcontext(81723)]		HRESULT getLength                ([out,retval] MUSIC_TIME* pmtLength);
    		[helpcontext(81730)]		HRESULT setLength                ([in] MUSIC_TIME mtLength);
    		[helpcontext(81726)]		HRESULT getRepeats               ([out,retval] LONG* lRepeats);
    		[helpcontext(81732)]		HRESULT setRepeats               ([in] LONG  lRepeats) ;
    
    
    		//track params
    	
    		[helpcontext(81720)]		HRESULT download( [in] IUnknown *downloadpath);
    		[helpcontext(81737)]		HRESULT unload(  [in] IUnknown *downloadpath);
    		[helpcontext(81729)]		HRESULT setAutoDownloadEnable ( [in] VARIANT_BOOL b);		
    		[helpcontext(81735)]		HRESULT setTempoEnable (  [in] VARIANT_BOOL b);
    		[helpcontext(81736)]		HRESULT setTimeSigEnable (  [in] VARIANT_BOOL b);
    		[helpcontext(81733)]		HRESULT setStandardMidiFile( );
      	    	[helpcontext(81719)]		HRESULT connectToCollection (  [in] I_dxj_DirectMusicCollection *c);
     		[helpcontext(81721)]		HRESULT GetAudioPathConfig([out,retval] IUnknown **ret);

    		[helpcontext(81728)]		HRESULT getStyle([in] LONG lTrack,[out,retval] I_dxj_DirectMusicStyle **ret);
    		[helpcontext(81722)]		HRESULT getChordMap([in] LONG lTrack, [in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] I_dxj_DirectMusicChordMap **ret);		
    		[helpcontext(88722)]		HRESULT GetName([out,retval] BSTR *ret);		
   		
    	};
            
    
    	[
    		object,
    		uuid(FAFA35A2-8B72-11d2-90B2-00C04FC2C603),	
    		helpstring("DirectMusicComposer Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(317200)
    	]
    	interface I_dxj_DirectMusicComposer : IUnknown	
    	{
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    
    		
    		[helpcontext(81648)]		HRESULT autoTransition ([in] I_dxj_DirectMusicPerformance* performance, 
                                                 [in] I_dxj_DirectMusicSegment* toSeg, 
                                                 [in] LONG lCommand, 
                                                 [in] LONG lFlags, 
    											 [in] I_dxj_DirectMusicChordMap *chordmap,
                                                 [out,retval] I_dxj_DirectMusicSegment** ppTransSeg);
    		[helpcontext(81651)]		HRESULT composeSegmentFromTemplate   ([in]  I_dxj_DirectMusicStyle* style,
    											 [in]  I_dxj_DirectMusicSegment* templateSeg, 
                                                 [in]  SHORT activity, 
    											 [in] I_dxj_DirectMusicChordMap *chordmap,
                                                 [out,retval] I_dxj_DirectMusicSegment** SectionSeg);
    
    		[helpcontext(81650)]		HRESULT composeSegmentFromShape   ( [in]  I_dxj_DirectMusicStyle* style,
                                                 [in]  SHORT numberOfMeasures, 
    											 [in]  SHORT shape, 
    											 [in]  SHORT activity, 
    											 [in] VARIANT_BOOL bIntro,
    											 [in] VARIANT_BOOL bEnd,
    											 [in] I_dxj_DirectMusicChordMap *chordmap,
                                                 [out,retval] I_dxj_DirectMusicSegment** SectionSeg);
    
    		[helpcontext(81653)]		HRESULT composeTransition   ([in] I_dxj_DirectMusicSegment* fromSeg, 
                                                  [in] I_dxj_DirectMusicSegment* toSeg, 
                                                  [in] MUSIC_TIME mtTime, 
                                                  [in] LONG lCommand, 
                                                  [in] LONG lFlags, 
    											  [in] I_dxj_DirectMusicChordMap *chordmap,
                                                  [out,retval]     I_dxj_DirectMusicSegment** SectionSeg);
     
    		[helpcontext(81652)]		HRESULT composeTemplateFromShape ([in] SHORT numMeasures, 
                                                 [in] SHORT shape, 
                                                  [in] VARIANT_BOOL bIntro, 
                                                  [in] VARIANT_BOOL bEnd, 
                                                   [in] SHORT endLength, 
                                                   [out,retval]    I_dxj_DirectMusicSegment** TempSeg);
    
    		[helpcontext(81649)]		HRESULT changeChordMap([in] I_dxj_DirectMusicSegment* segment,[in] VARIANT_BOOL trackScale, [in] I_dxj_DirectMusicChordMap* ChordMap);
    
    	};
     

    	[
    		object,
    		uuid(FAFA35A3-8B72-11d2-90B2-00C04FC2C603),	
    		helpstring("DirectMusicBand Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(317400)
    	]
    	interface I_dxj_DirectMusicBand : IUnknown	
    	{
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    		[helpcontext(81642)]		HRESULT createSegment([out,retval] I_dxj_DirectMusicSegment **ret);
    		[helpcontext(81643)]		HRESULT download([in] I_dxj_DirectMusicPerformance *downloadpath);
    		[helpcontext(81644)]		HRESULT unload([in] I_dxj_DirectMusicPerformance *downloadpath);
    	};
    
 
    	[
    		object,
    		uuid(FAFA35A4-8B72-11d2-90B2-00C04FC2C603),	
    		helpstring("DirectMusicStyle Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(317600)
    	]
    	interface I_dxj_DirectMusicStyle : IUnknown	
    	{
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    		[helpcontext(81753)]		HRESULT getBandName([in] LONG index,[out,retval] BSTR *name);
    		[helpcontext(81752)]		HRESULT getBandCount([out,retval] LONG *count);
    		[helpcontext(81751)]		HRESULT getBand([in] BSTR name,[out,retval] I_dxj_DirectMusicBand **ret);
    		[helpcontext(81754)]		HRESULT getDefaultBand([out,retval] I_dxj_DirectMusicBand **ret);
    		
    		[helpcontext(81757)]		HRESULT getMotifName([in] LONG index,[out,retval] BSTR *name);
    		[helpcontext(81756)]		HRESULT getMotifCount([out,retval] LONG *count);
    		[helpcontext(81755)]		HRESULT getMotif([in] BSTR name,[out,retval] I_dxj_DirectMusicSegment **ret);		
    		[helpcontext(81759)]		HRESULT getTimeSignature( [in,out] DMUS_TIMESIGNATURE_CDESC* pTimeSig); 
    		[helpcontext(81758)]		HRESULT getTempo([out,retval] double *pTempo); 
    
    	};


    	    
    
    	[
    		object,
    		uuid(FAFA35A5-8B72-11d2-90B2-00C04FC2C603),	
    		helpstring("DirectMusicChordMap Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(317800)
    	]
    	interface I_dxj_DirectMusicChordMap : IUnknown	
    	{
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    	
    		[hidden]		HRESULT getScale([out,retval] LONG *scale);
    
    	};
[
    		object,
    		uuid(FAFA35A6-8B72-11d2-90B2-00C04FC2C603),	
    		helpstring("DirectMusicSegmentState Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(318000)
    	]
    	interface I_dxj_DirectMusicSegmentState : IUnknown	
    	{
    	
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    		[helpcontext(81739)]		HRESULT getRepeats([out,retval] LONG *repeats);
    		[helpcontext(81740)]		HRESULT getSeek([out,retval] MUSIC_TIME *seek);
    		[helpcontext(81742)]		HRESULT getStartPoint([out,retval] MUSIC_TIME *seek);
    		[helpcontext(81743)]		HRESULT getStartTime([out,retval] MUSIC_TIME *seek);
    		[helpcontext(81741)]		HRESULT getSegment([out,retval] I_dxj_DirectMusicSegment  **segment);
    	};
    
    	[
    		object,
    		uuid(FAFA35A7-8B72-11d2-90B2-00C04FC2C603),	
    		helpstring("DirectMusicPerformance Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(318200)
    	]
    	interface I_dxj_DirectMusicPerformance : IUnknown	
    	{
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    
    		[helpcontext(81671)]		HRESULT closeDown			();
    		
    		[helpcontext(81690)]		HRESULT getSegmentState		([in] MUSIC_TIME mtTime, [out,retval] I_dxj_DirectMusicSegmentState **ret);
    		[helpcontext(81695)]		HRESULT invalidate			([in] MUSIC_TIME mtTime, [in] LONG flags);
    		[helpcontext(81696)]		HRESULT isPlaying           ([in] I_dxj_DirectMusicSegment* segment, [in] I_dxj_DirectMusicSegmentState* segmentState,[out,retval] VARIANT_BOOL *b);
    		
    		[helpcontext(81668)]		HRESULT addNotificationType ([in] CONST_DMUS_NOTIFICATION_TYPE type);
    		[helpcontext(81699)]		HRESULT removeNotificationType ([in] CONST_DMUS_NOTIFICATION_TYPE type);
    		#ifdef _WIN64
		[helpcontext(81714)]		HRESULT setNotificationHandle([in] HWND hnd);
		#else
		[helpcontext(81714)]		HRESULT setNotificationHandle([in] LONG hnd);
		#endif
    		[helpcontext(81686)]		HRESULT getNotificationPMSG  ([in,out] DMUS_NOTIFICATION_PMSG_CDESC *message,[out,retval] VARIANT_BOOL *success);
    		  
    			
    		[helpcontext(81697)]		HRESULT musicToClockTime ([in] MUSIC_TIME mtTime,[out,retval] REFERENCE_TIME *ctTime);
    		[helpcontext(81670)]		HRESULT clockToMusicTime ([in] REFERENCE_TIME ctTime,[out,retval] MUSIC_TIME *mtTime);
    		[helpcontext(81685)]		HRESULT getMusicTime       ([out,retval]   MUSIC_TIME* ret);
    		[helpcontext(81676)]		HRESULT getClockTime   ([out,retval]   REFERENCE_TIME* ret);
    		[helpcontext(81687)]		HRESULT getPrepareTime      ([out,retval] LONG *lMilliSeconds);
    		[helpcontext(81674)]		HRESULT getBumperLength      ([out,retval] LONG *lMilliSeconds);
    		[helpcontext(81680)]		HRESULT getLatencyTime      ([out,retval] REFERENCE_TIME *ctTime);
    		[helpcontext(81688)]		HRESULT getQueueTime		([out,retval] REFERENCE_TIME *ctTime);
    		[helpcontext(81689)]		HRESULT getResolvedTime		([in] REFERENCE_TIME ctTime, [in] LONG flags, [out,retval] REFERENCE_TIME *ret);
    		[helpcontext(81715)]		HRESULT setPrepareTime      ([in] LONG  lMilliSeconds);
    		[helpcontext(81708)]		HRESULT setBumperLength      ([in] LONG lMilliSeconds) ;		
    		[helpcontext(81669)]		HRESULT adjustTime			([in] LONG tAmount);
    	
    
    		//global params
    		[helpcontext(81710)]		HRESULT setMasterAutoDownload     ([in] VARIANT_BOOL b);
    		[helpcontext(81681)]		HRESULT getMasterAutoDownload      ([out,retval] VARIANT_BOOL *b);
    		[helpcontext(81712)]		HRESULT setMasterTempo 	    ([in] FLOAT tempo);
    		[helpcontext(81683)]		HRESULT getMasterTempo      ([out,retval] FLOAT *tempo);
    		[helpcontext(81713)]		HRESULT setMasterVolume     ([in] LONG vol);
    		[helpcontext(81684)]		HRESULT getMasterVolume      ([out,retval] LONG *v);
    		[helpcontext(81711)]		HRESULT setMasterGrooveLevel ([in] SHORT level);
    		[helpcontext(81682)]		HRESULT getMasterGrooveLevel ([out,retval] SHORT *level);
    
    		[helpcontext(81700)]		HRESULT Reset([in] LONG resetflags );
    		[helpcontext(81691)]		HRESULT getStyle([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] I_dxj_DirectMusicStyle **ret);
    		[helpcontext(81675)]		HRESULT getChordMap([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] I_dxj_DirectMusicChordMap **ret);		
    		[helpcontext(81677)]		HRESULT getCommand([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] Byte *command) ;
    		[helpcontext(81679)]		HRESULT getGrooveLevel([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] Byte *level) ;
    		[helpcontext(81692)]		HRESULT getTempo([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[out,retval] double *tempo) ;
    		[helpcontext(81693)]		HRESULT getTimeSig([in] MUSIC_TIME mtTime,[in,out] MUSIC_TIME *mtUntil,[in,out] DMUS_TIMESIGNATURE_CDESC *timeSig) ;
    
    		[helpcontext(81703)]		HRESULT sendNotePMSG([in] MUSIC_TIME lTime,
    											[in] LONG flags,
    											[in] LONG channel,
    											[in] DMUS_NOTE_PMSG_CDESC *msg);
    
    		
    		[helpcontext(81701)]		HRESULT sendCurvePMSG([in] MUSIC_TIME lTime,
    											[in] LONG flags,
    											[in] LONG channel,
    											[in] DMUS_CURVE_PMSG_CDESC *msg);
    									
    
    		[helpcontext(81702)]		HRESULT sendMIDIPMSG([in] MUSIC_TIME lTime,
    											[in] LONG flags,
    											[in] LONG channel,
    											[in] Byte status,
    											[in] Byte byte1,
    											[in] Byte byte2);
    
    		[helpcontext(81704)]		HRESULT sendPatchPMSG([in] MUSIC_TIME lTime,
    									 		[in] LONG flags,
    											[in] LONG channel,
    											[in] Byte instrument,
    											[in] Byte byte1,
    											[in] Byte byte2);
    		[helpcontext(81705)]		HRESULT sendTempoPMSG([in] MUSIC_TIME lTime,
    											[in] LONG flags,
    									//		[in] LONG channel,
    											[in] double tempo);
    
    		[helpcontext(81707)]		HRESULT sendTransposePMSG([in] MUSIC_TIME lTime,
    											[in] LONG flags,
    											[in] LONG channel,
    											[in] SHORT transpose);
    
    		[helpcontext(81706)]		HRESULT sendTimeSigPMSG([in] MUSIC_TIME lTime,
    											[in] LONG flags,
    											[in] DMUS_TIMESIGNATURE_CDESC *timesig);

		// New for DX8 		
#ifdef _WIN64
    		[helpcontext(81694)]		HRESULT InitAudio([in] HWND hWnd,                               /* HWND for DSound. */
								  [in] CONST_DMUS_AUDIO lFlags, 
								  [in,out] DMUS_AUDIOPARAMS_CDESC *AudioParams,
                                           			  [in,out,optional] I_dxj_DirectSound **DirectSound,            /* Optional DSound pointer. */
                                           			  [in,optional] CONST_DMUSIC_STANDARD_AUDIO_PATH lDefaultPathType,                 /* Requested default audio path type, also optional. */
                                           			  [in,optional]	LONG lPChannelCount                   /* Number of PChannels, if default audio path to be created. */
								  ); 
#else
    		[helpcontext(81694)]		HRESULT InitAudio([in] LONG hWnd,                               /* HWND for DSound. */
								  [in] CONST_DMUS_AUDIO lFlags, 
								  [in,out] DMUS_AUDIOPARAMS_CDESC *AudioParams,
                                           			  [in,out,optional] I_dxj_DirectSound **DirectSound,            /* Optional DSound pointer. */
                                           			  [in,optional] CONST_DMUSIC_STANDARD_AUDIO_PATH lDefaultPathType,                 /* Requested default audio path type, also optional. */
                                           			  [in,optional]	LONG lPChannelCount                   /* Number of PChannels, if default audio path to be created. */
								  ); 
#endif

    		[helpcontext(81698)]	HRESULT PlaySegmentEx([in] IUnknown *Source,    /* Segment to play. Alternately, could be an IDirectMusicSong. */
	                                   [in] CONST_DMUS_SEGF_FLAGS lFlags,                           /* DMUS_SEGF_ flags. */ 
                                           [in] LONG StartTime,                    /* Time to start playback. */
                                           [in,optional] IUnknown *From,                         /* Optional segmentstate or audiopath to replace. */
                                           [in,optional] IUnknown *AudioPath,              /* Optional audioPath to play on. */
#if 0
                                           [in,optional] BSTR SegmentName,   /* If song, which segment in the song. */
					   [in,optional] IUnknown *Transition, /* Optional template segment to compose transition with. */
#endif
                                           [out,retval] I_dxj_DirectMusicSegmentState **ppSegmentState); /* Returned Segment State. */

    		[helpcontext(81716)]	HRESULT StopEx([in] IUnknown *ObjectToStop,                 /* Segstate, AudioPath, Segment, or Song. */ 
                                           		[in] LONG lStopTime, 
                                           		[in] CONST_DMUS_SEGF_FLAGS lFlags);

    		[helpcontext(81672)]		HRESULT CreateAudioPath([in] IUnknown *SourceConfig, [in] VARIANT_BOOL fActive, 
                                           		[out,retval] I_dxj_DirectMusicAudioPath **ppNewPath);

    		[helpcontext(81673)]		HRESULT CreateStandardAudioPath([in] CONST_DMUSIC_STANDARD_AUDIO_PATH lType, [in] LONG lPChannelCount, [in] VARIANT_BOOL fActive,
	                                           [out,retval] I_dxj_DirectMusicAudioPath **ppNewPath);

    		[helpcontext(81709)]		HRESULT SetDefaultAudioPath([in,out] I_dxj_DirectMusicAudioPath *AudioPath);
    		[helpcontext(81678)]		HRESULT GetDefaultAudioPath([out,retval] I_dxj_DirectMusicAudioPath **ppAudioPath);
    	};
    
    	
    	[
    		object,
    		uuid(FAFA35A8-8B72-11d2-90B2-00C04FC2C603),	
    		helpstring("DirectMusicCollection Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(318400)
    	]
    	interface I_dxj_DirectMusicCollection : IUnknown	
    	{
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    
    	};
    
#if 0
    	[
    		object,
    		uuid(7D140634-A5B2-46cc-A8C0-F51BC475BF5D),	
    		helpstring("DirectMusicSong Interface"),
    		pointer_default(unique),
    		local,
    		helpcontext(81023)
    	]
    	interface I_dxj_DirectMusicSong : IUnknown	
    	{
    		[hidden]		HRESULT InternalSetObject([in] IUnknown *lpdd);
    		[hidden]		HRESULT InternalGetObject([out, retval] IUnknown **lpdd);
    		[helpcontext(81745)]		HRESULT Compose();
    		[helpcontext(81748)]		HRESULT GetSegment([in] BSTR Name, [out,retval] I_dxj_DirectMusicSegment **ret);
    		[helpcontext(81747)]		HRESULT GetAudioPathConfig([out,retval] IUnknown **ret);
    		[helpcontext(81746)]		HRESULT Download([in] IUnknown *downloadpath);
    		[helpcontext(81749)]		HRESULT Unload([in] IUnknown *downloadpath);
    		[helpcontext(81348)]		HRESULT EnumSegment([in] LONG lSegmentID, [out,retval] I_dxj_DirectMusicSegment **ret);
    
    	};
#endif
	//
	// AUDIO String Constants
	//

	[
		dllname("dx8vb.dll")
	]
	module AUDIOCONSTANTS
	{
		// GUID for FX components
#if 0
		const BSTR DSFX_SEND 				= L"GUID_DSFX_SEND";
#endif
		const BSTR DSFX_STANDARD_GARGLE			= L"GUID_DSFX_STANDARD_GARGLE";
		const BSTR DSFX_STANDARD_CHORUS			= L"GUID_DSFX_STANDARD_CHORUS";
		const BSTR DSFX_STANDARD_FLANGER		= L"GUID_DSFX_STANDARD_FLANGER";
		const BSTR DSFX_STANDARD_ECHO			= L"GUID_DSFX_STANDARD_ECHO";
		const BSTR DSFX_STANDARD_DISTORTION		= L"GUID_DSFX_STANDARD_DISTORTION";
		const BSTR DSFX_STANDARD_COMPRESSOR		= L"GUID_DSFX_STANDARD_COMPRESSOR";
#if 0
		const BSTR DSFX_STANDARD_I3DL2SOURCE		= L"GUID_DSFX_STANDARD_I3DL2SOURCE";
#endif
		const BSTR DSFX_STANDARD_I3DL2REVERB		= L"GUID_DSFX_STANDARD_I3DL2REVERB";
		const BSTR DSFX_STANDARD_PARAMEQ		= L"GUID_DSFX_STANDARD_PARAMEQ";
		const BSTR DSFX_STANDARD_WAVES_REVERB		= L"GUID_DSFX_WAVES_REVERB";

		// IID for FX Interfaces		
#if 0
		const BSTR IID_DirectSoundFXSend		= L"IID_DirectSoundFXSend";
#endif
		const BSTR IID_DirectSoundFXChorus		= L"IID_DirectSoundFXChorus";
		const BSTR IID_DirectSoundFXCompressor		= L"IID_DirectSoundFXCompressor";
		const BSTR IID_DirectSoundFXDistortion		= L"IID_DirectSoundFXDistortion";
		const BSTR IID_DirectSoundFXEcho		= L"IID_DirectSoundFXEcho";
		const BSTR IID_DirectSoundFXFlanger		= L"IID_DirectSoundFXFlanger";
		const BSTR IID_DirectSoundFXGargle		= L"IID_DirectSoundFXGargle";
		const BSTR IID_DirectSoundFXI3DL2REVERB		= L"IID_DirectSoundFXI3DL2REVERB";
#if 0
		const BSTR IID_DirectSoundFXI3DL2SOURCE		= L"IID_DirectSoundFXI3DL2SOURCE";
#endif
		const BSTR IID_DirectSoundFXParamEq		= L"IID_DirectSoundFXParamEq";
		const BSTR IID_DirectSoundFXWavesReverb		= L"IID_DirectSoundFXWavesReverb";

		// IID for Interfaces
		const BSTR IID_DirectSoundSecondaryBuffer	= L"IID_IDirectSoundBuffer8";
		const BSTR IID_DirectSoundPrimaryBuffer		= L"IID_IDirectSoundBuffer";
		const BSTR IID_DirectSound3DBuffer		= L"IID_IDirectSound3DBuffer";
		const BSTR IID_DirectSound3DListener		= L"IID_IDirectSound3DListener";
		
		const BSTR GUID_ALL				= L"GUID_ALL_OBJECTS";

		// IID For 3D Algorithms
		const BSTR GUID_DS3DALG_DEFAULT			= L"DS3DALG_DEFAULT";
		const BSTR GUID_DS3DALG_NO_VIRTUALIZATION 	= L"DS3DALG_NO_VIRTUALIZATION";
		const BSTR GUID_DS3DALG_HRTF_FULL		= L"DS3DALG_HRTF_FULL";
		const BSTR GUID_DS3DALG_HRTF_LIGHT		= L"DS3DALG_HRTF_LIGHT";
	};
