00001 #ifndef __GRSOUND_H__
00002 #define __GRSOUND_H__
00003
00004 #include <WinDX/Base/WXComBase.h>
00005
00006 #ifndef _WIN64
00007 typedef DWORD DWORD_PTR;
00008 #endif
00009
00010 #include <sstream>
00011 #include <mmsystem.h>
00012 #include <dsound.h>
00013
00014
00015
00016 enum SOUNDID{
00017 SAMPLE0 =0,
00018 SAMPLE1 =1,
00019 SAMPLE2 =2,
00020 SAMPLE3 =3,
00021 SAMPLE4 =4,
00022 SAMPLE5 =5,
00023 SAMPLE6 =6,
00024 SAMPLE7 =7,
00025 SAMPLE8 =8,
00026 SAMPLE9 =9,
00027 SAMPLE10=10,
00028 SAMPLE11=11,
00029 SAMPLE12=12,
00030 SAMPLE13=13,
00031 SAMPLE14=14,
00032 SAMPLE15=15,
00033 };
00034
00035 #define SOUNDBUFFER_MAX 100 //100以下でね
00036
00037 #define SAFE_DELETE(p) { if(p) { delete (p); (p)=NULL; } }
00038 #define SAFE_RELEASE(p) { if(p) { (p)->Release(); (p)=NULL; } }
00039
00040
00041 class GRSound{
00042 protected:
00043 IDirectSound8* pDS;
00044 LPDIRECTSOUNDBUFFER pDsbPrimary;
00045 LPDIRECTSOUNDBUFFER8 pDsb[SOUNDBUFFER_MAX];
00046 LPDIRECTSOUND3DLISTENER pListener;
00047 private:
00048 GRSound::GRSound();
00049 public:
00050 GRSound::~GRSound();
00051
00052 public:
00053
00054
00055 static GRSound* instance(){ return &inst; }
00056
00057
00058 HRESULT initialize( HWND hwnd );
00059 HRESULT volume( SOUNDID id , long volume);
00060 HRESULT play( SOUNDID id );
00061 HRESULT stop( SOUNDID id );
00062 HRESULT SetVolume(SOUNDID id, long volume);
00063 HRESULT GetVolume(SOUNDID id, long *volume);
00064 HRESULT RetriveVolumes();
00065 private:
00066 HRESULT createSoundBuffer( LPDIRECTSOUNDBUFFER8* ppDsb8 );
00067 HRESULT getListener( LPDIRECTSOUND3DLISTENER* ppListener );
00068 HRESULT loadWaveFile( SOUNDID id ,TCHAR* strFileName );
00069
00070 HRESULT freeDirectSound();
00071
00072 void convertCoord(LPD3DVECTOR* pos);
00073 VOID Set3DParameters( FLOAT fDopplerFactor, FLOAT fRolloffFactor, FLOAT fMinDistance, FLOAT fMaxDistance );
00074 VOID SetObjectProperties( D3DVECTOR* pvPosition, D3DVECTOR* pvVelocity );
00075 FLOAT ConvertLinearSliderPosToLogScale( LONG lSliderPos );
00076 LONG ConvertLogScaleToLinearSliderPosTo( FLOAT fValue );
00077
00078 static GRSound inst;
00079 };
00080
00081 #endif //__GRSOUND_H__