#include "stdafx.h" #include "Direct.h" #include "dms.h" #include "dMusAudioPathObj.h" #include "dsound3dbuffer.h" #include "dsoundbufferobj.h" #include "dsoundprimarybufferobj.h" #include "dsound3dlistener.h" #include "dsoundFXGargleobj.h" #include "dsoundFXEchoobj.h" #include "dsoundFXChorusobj.h" #include "dsoundFXCompressorobj.h" #include "dsoundFXDistortionobj.h" #include "dsoundFXFlangerobj.h" #include "dsoundfxi3dl2reverbobj.h" #if 0 #include "dsoundfxi3dl2sourceobj.h" #include "dsoundfxsendobj.h" #endif #include "dsoundfxparameqobj.h" #include "dsoundfxwavesreverbobj.h" extern void *g_dxj_DirectSoundFXWavesReverb; extern void *g_dxj_DirectSoundFXCompressor; extern void *g_dxj_DirectSoundFXChorus; extern void *g_dxj_DirectSoundFXGargle; extern void *g_dxj_DirectSoundFXEcho; extern void *g_dxj_DirectSoundFXSend; extern void *g_dxj_DirectSoundFXDistortion; extern void *g_dxj_DirectSoundFXFlanger; extern void *g_dxj_DirectSoundFXParamEQ; extern void *g_dxj_DirectSoundFXI3DL2Reverb; #if 0 extern void *g_dxj_DirectSoundFXI3DL2Source; #endif extern HRESULT AudioBSTRtoGUID(LPGUID,BSTR); extern void *g_dxj_DirectMusicAudioPath; extern void *g_dxj_DirectSoundPrimaryBuffer; /////////////////////////////////////////////////////////////////// // InternalAddRef /////////////////////////////////////////////////////////////////// DWORD C_dxj_DirectMusicAudioPathObject::InternalAddRef(){ DWORD i; i=CComObjectRoot::InternalAddRef(); DPF2(1,"DirectMusicAudioPath [%d] AddRef %d \n",creationid,i); return i; } /////////////////////////////////////////////////////////////////// // InternalRelease /////////////////////////////////////////////////////////////////// DWORD C_dxj_DirectMusicAudioPathObject::InternalRelease(){ DWORD i; i=CComObjectRoot::InternalRelease(); DPF2(1,"DirectMusicAudioPath [%d] Release %d \n",creationid,i); return i; } /////////////////////////////////////////////////////////////////// // C_dxj_DirectMusicAudioPathObject /////////////////////////////////////////////////////////////////// C_dxj_DirectMusicAudioPathObject::C_dxj_DirectMusicAudioPathObject(){ DPF1(1,"Constructor Creation DirectMusicAudioPath Object[%d] \n ",g_creationcount); m__dxj_DirectMusicAudioPath = NULL; parent = NULL; pinterface = NULL; nextobj = g_dxj_DirectMusicAudioPath; creationid = ++g_creationcount; g_dxj_DirectMusicAudioPath = (void *)this; } /////////////////////////////////////////////////////////////////// // ~C_dxj_DirectMusicAudioPathObject /////////////////////////////////////////////////////////////////// C_dxj_DirectMusicAudioPathObject::~C_dxj_DirectMusicAudioPathObject() { DPF(1,"Entering ~C_dxj_DirectMusicAudioPathObject destructor \n"); C_dxj_DirectMusicAudioPathObject *prev=NULL; for(C_dxj_DirectMusicAudioPathObject *ptr=(C_dxj_DirectMusicAudioPathObject *)g_dxj_DirectMusicAudioPath ; ptr; ptr=(C_dxj_DirectMusicAudioPathObject *)ptr->nextobj) { if(ptr == this) { if(prev) prev->nextobj = ptr->nextobj; else g_dxj_DirectMusicAudioPath = (void*)ptr->nextobj; DPF(1,"DirectMusicAudioPathObject found in g_dxj list now removed\n"); break; } prev = ptr; } if(m__dxj_DirectMusicAudioPath){ int count = IUNK(m__dxj_DirectMusicAudioPath)->Release(); #ifdef DEBUG char AudioPath[256]; wsprintf(AudioPath,"DirectX IDirectMusicAudioPath Ref count [%d] \n",count); #endif if(count==0) m__dxj_DirectMusicAudioPath = NULL; } if(parent) IUNK(parent)->Release(); } HRESULT C_dxj_DirectMusicAudioPathObject::InternalGetObject(IUnknown **pUnk){ *pUnk=(IUnknown*)m__dxj_DirectMusicAudioPath; return S_OK; } HRESULT C_dxj_DirectMusicAudioPathObject::InternalSetObject(IUnknown *pUnk){ m__dxj_DirectMusicAudioPath=(IDirectMusicAudioPath8*)pUnk; return S_OK; } HRESULT C_dxj_DirectMusicAudioPathObject::GetObjectInPath(long lPChannel, long lStage, long lBuffer, BSTR guidObject, long lIndex, BSTR iidInterface, IUnknown **ppObject) { HRESULT hr; GUID guidObj; GUID guidIID; __try { if (FAILED (hr = AudioBSTRtoGUID(&guidObj, guidObject) ) ) return hr; if (FAILED (hr = AudioBSTRtoGUID(&guidIID, iidInterface ) ) ) return hr; if( 0==_wcsicmp(iidInterface,L"iid_idirectsound3dbuffer")){ IDirectSound3DBuffer *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSound3dBuffer, lpRetObj, ppObject); } else if( 0==_wcsicmp(iidInterface,L"iid_idirectsoundbuffer8")){ IDirectSoundBuffer8 *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundBuffer, lpRetObj, ppObject); } else if( 0==_wcsicmp(iidInterface,L"iid_idirectsoundbuffer")){ IDirectSoundBuffer *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundPrimaryBuffer, lpRetObj, ppObject); } else if( 0==_wcsicmp(iidInterface,L"iid_idirectsound3dlistener")){ IDirectSound3DListener *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSound3dListener, lpRetObj, ppObject); } else if( 0==_wcsicmp(guidObject,L"guid_dsfx_standard_gargle")){ IDirectSoundFXGargle *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXGargle, lpRetObj, ppObject); } #if 0 else if( 0==_wcsicmp(guidObject,L"guid_dsfx_send")){ IDirectSoundFXSend *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXSend, lpRetObj, ppObject); } #endif else if( 0==_wcsicmp(guidObject,L"guid_dsfx_standard_echo")){ IDirectSoundFXEcho *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXEcho, lpRetObj, ppObject); } else if( 0==_wcsicmp(guidObject,L"guid_dsfx_standard_chorus")){ IDirectSoundFXChorus *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXChorus, lpRetObj, ppObject); } else if( 0==_wcsicmp(guidObject,L"guid_dsfx_standard_compressor")){ IDirectSoundFXCompressor *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXCompressor, lpRetObj, ppObject); } else if( 0==_wcsicmp(guidObject,L"guid_dsfx_standard_distortion")){ IDirectSoundFXDistortion *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXDistortion, lpRetObj, ppObject); } else if( 0==_wcsicmp(guidObject,L"guid_dsfx_standard_flanger")){ IDirectSoundFXFlanger *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXFlanger, lpRetObj, ppObject); } #if 0 else if( 0==_wcsicmp(guidObject,L"guid_dsfx_standard_i3dl2source")){ IDirectSoundFXI3DL2Source *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXI3DL2Source, lpRetObj, ppObject); } #endif else if( 0==_wcsicmp(guidObject,L"guid_dsfx_standard_i3dl2reverb")){ IDirectSoundFXI3DL2Reverb *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXI3DL2Reverb, lpRetObj, ppObject); } else if( 0==_wcsicmp(guidObject,L"guid_dsfx_standard_parameq")){ IDirectSoundFXParamEq *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXParamEQ, lpRetObj, ppObject); } else if( 0==_wcsicmp(guidObject,L"guid_dsfx_waves_reverb")){ IDirectSoundFXWavesReverb *lpRetObj = NULL; if (FAILED ( hr= m__dxj_DirectMusicAudioPath->GetObjectInPath((DWORD) lPChannel, (DWORD) lStage, (DWORD) lBuffer, guidObj, (DWORD) lIndex, guidIID, (void**) &lpRetObj) ) ) return hr; INTERNAL_CREATE(_dxj_DirectSoundFXWavesReverb, lpRetObj, ppObject); } else return E_INVALIDARG; } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; } HRESULT C_dxj_DirectMusicAudioPathObject::Activate(VARIANT_BOOL fActive) { HRESULT hr; __try { if (FAILED (hr = m__dxj_DirectMusicAudioPath->Activate((BOOL) fActive) ) ) return hr; } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; } HRESULT C_dxj_DirectMusicAudioPathObject::SetVolume(long lVolume, long lDuration) { HRESULT hr; __try { if (FAILED (hr = m__dxj_DirectMusicAudioPath->SetVolume(lVolume, (DWORD) lDuration) ) ) return hr; } __except(EXCEPTION_EXECUTE_HANDLER) { return E_FAIL; } return S_OK; }