aboutsummaryrefslogtreecommitdiff
path: root/samples/DX_APIUsage/DXUT/Optional/SDKsound.h
diff options
context:
space:
mode:
Diffstat (limited to 'samples/DX_APIUsage/DXUT/Optional/SDKsound.h')
-rw-r--r--samples/DX_APIUsage/DXUT/Optional/SDKsound.h124
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