diff options
Diffstat (limited to 'samples/DX_APIUsage/DXUT/Optional/SDKsound.h')
| -rw-r--r-- | samples/DX_APIUsage/DXUT/Optional/SDKsound.h | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/samples/DX_APIUsage/DXUT/Optional/SDKsound.h b/samples/DX_APIUsage/DXUT/Optional/SDKsound.h new file mode 100644 index 0000000..d505ed7 --- /dev/null +++ b/samples/DX_APIUsage/DXUT/Optional/SDKsound.h @@ -0,0 +1,124 @@ +//----------------------------------------------------------------------------- +// File: DXUTsound.h +// +// Copyright (c) Microsoft Corp. All rights reserved. +//----------------------------------------------------------------------------- +#ifndef DXUTSOUND_H +#define DXUTSOUND_H + +//----------------------------------------------------------------------------- +// Header Includes +//----------------------------------------------------------------------------- +#include <dsound.h> +#include <ks.h> + +//----------------------------------------------------------------------------- +// Classes used by this header +//----------------------------------------------------------------------------- +class CSoundManager; +class CSound; +class CStreamingSound; +class CWaveFile; + + +//----------------------------------------------------------------------------- +// Typing macros +//----------------------------------------------------------------------------- +#define DXUT_StopSound(s) { if(s) s->Stop(); } +#define DXUT_PlaySound(s) { if(s) s->Play( 0, 0 ); } +#define DXUT_PlaySoundLooping(s) { if(s) s->Play( 0, DSBPLAY_LOOPING ); } + + +//----------------------------------------------------------------------------- +// Name: class CSoundManager +// Desc: +//----------------------------------------------------------------------------- +class CSoundManager +{ +protected: + IDirectSound8* m_pDS; + +public: + CSoundManager(); + ~CSoundManager(); + + HRESULT Initialize( HWND hWnd, DWORD dwCoopLevel ); + inline LPDIRECTSOUND8 GetDirectSound() + { + return m_pDS; + } + HRESULT SetPrimaryBufferFormat( DWORD dwPrimaryChannels, DWORD dwPrimaryFreq, + DWORD dwPrimaryBitRate ); + HRESULT Get3DListenerInterface( LPDIRECTSOUND3DLISTENER* ppDSListener ); + + HRESULT Create( CSound** ppSound, LPWSTR strWaveFileName, DWORD dwCreationFlags = 0, + GUID guid3DAlgorithm = GUID_NULL, DWORD dwNumBuffers = 1 ); + HRESULT CreateFromMemory( CSound** ppSound, BYTE* pbData, ULONG ulDataSize, LPWAVEFORMATEX pwfx, + DWORD dwCreationFlags = 0, GUID guid3DAlgorithm = GUID_NULL, + DWORD dwNumBuffers = 1 ); + HRESULT CreateStreaming( CStreamingSound** ppStreamingSound, LPWSTR strWaveFileName, + DWORD dwCreationFlags, GUID guid3DAlgorithm, DWORD dwNotifyCount, + DWORD dwNotifySize, HANDLE hNotifyEvent ); +}; + + +//----------------------------------------------------------------------------- +// Name: class CSound +// Desc: Encapsulates functionality of a DirectSound buffer. +//----------------------------------------------------------------------------- +class CSound +{ +protected: + LPDIRECTSOUNDBUFFER* m_apDSBuffer; + DWORD m_dwDSBufferSize; + CWaveFile* m_pWaveFile; + DWORD m_dwNumBuffers; + DWORD m_dwCreationFlags; + + HRESULT RestoreBuffer( LPDIRECTSOUNDBUFFER pDSB, BOOL* pbWasRestored ); + +public: + CSound( LPDIRECTSOUNDBUFFER* apDSBuffer, DWORD dwDSBufferSize, DWORD dwNumBuffers, + CWaveFile* pWaveFile, DWORD dwCreationFlags ); + virtual ~CSound(); + + HRESULT Get3DBufferInterface( DWORD dwIndex, LPDIRECTSOUND3DBUFFER* ppDS3DBuffer ); + HRESULT FillBufferWithSound( LPDIRECTSOUNDBUFFER pDSB, BOOL bRepeatWavIfBufferLarger ); + LPDIRECTSOUNDBUFFER GetFreeBuffer(); + LPDIRECTSOUNDBUFFER GetBuffer( DWORD dwIndex ); + + HRESULT Play( DWORD dwPriority = 0, DWORD dwFlags = 0, LONG lVolume = 0, LONG lFrequency = -1, + LONG lPan = 0 ); + HRESULT Play3D( LPDS3DBUFFER p3DBuffer, DWORD dwPriority = 0, DWORD dwFlags = 0, LONG lFrequency = 0 ); + HRESULT Stop(); + HRESULT Reset(); + BOOL IsSoundPlaying(); +}; + + +//----------------------------------------------------------------------------- +// Name: class CStreamingSound +// Desc: Encapsulates functionality to play a wave file with DirectSound. +// The Create() method loads a chunk of wave file into the buffer, +// and as sound plays more is written to the buffer by calling +// HandleWaveStreamNotification() whenever hNotifyEvent is signaled. +//----------------------------------------------------------------------------- +class CStreamingSound : public CSound +{ +protected: + DWORD m_dwLastPlayPos; + DWORD m_dwPlayProgress; + DWORD m_dwNotifySize; + DWORD m_dwNextWriteOffset; + BOOL m_bFillNextNotificationWithSilence; + +public: + CStreamingSound( LPDIRECTSOUNDBUFFER pDSBuffer, DWORD dwDSBufferSize, CWaveFile* pWaveFile, + DWORD dwNotifySize ); + ~CStreamingSound(); + + HRESULT HandleWaveStreamNotification( BOOL bLoopedPlay ); + HRESULT Reset(); +}; + +#endif // DXUTSOUND_H |