Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "sound.h"
- soundManagerClass::soundManagerClass()
- : dsi( 0 )
- {
- ;
- }
- soundManagerClass::~soundManagerClass() {
- ;
- }
- bool soundManagerClass::init( HWND hwnd )
- {
- hr = DirectSoundCreate8( 0, &dsi, 0 );
- if ( hr != DS_OK ) {
- dsi = 0;
- return false;
- }
- hr = dsi->SetCooperativeLevel( hwnd, DSSCL_NORMAL );
- if ( hr != DS_OK )
- return false;
- return true;
- }
- void soundManagerClass::cleanup()
- {
- if ( !dsi )
- return;
- for ( unsigned int i = buffers.size(); i > 0; i-- ) {
- ( buffers[ i - 1 ] )->Release();
- delete buffers[ i - 1 ];
- buffers.pop_back();
- }
- dsi->Release();
- return;
- }
- bool soundManagerClass::loadShortSound( unsigned int* sound, const char* wav )
- {
- std::ifstream file;
- int fileSize;
- char* buffer;
- WAVEFORMATEX wfex;
- DSBUFFERDESC dsbd;
- IDirectSoundBuffer* dsb = 0;
- IDirectSoundBuffer8* dsb8;
- void* p;
- DWORD bytes;
- file.open( wav, std::fstream::binary );
- if ( !file.is_open() )
- return false;
- file.seekg( 0, std::fstream::end );
- fileSize = file.tellg();
- file.seekg( 0, std::fstream::beg );
- buffer = new char[ fileSize ];
- file.read( buffer, fileSize );
- file.close();
- fillwfex( &wfex, buffer );
- ZeroMemory( &dsbd, sizeof( DSBUFFERDESC ) );
- dsbd.dwSize = sizeof( DSBUFFERDESC );
- dsbd.dwFlags = DSBCAPS_GLOBALFOCUS;
- dsbd.dwBufferBytes = fileSize - 44;
- dsbd.lpwfxFormat = &wfex;
- hr = dsi->CreateSoundBuffer( &dsbd, &dsb, 0 );
- if ( hr != DS_OK ) {
- delete [] buffer;
- return false;
- }
- //
- //dsb8 = ( buffers[ buffers.size() ] );
- //dsb->QueryInterface( IID_IDirectSoundBuffer8, ( void** )( &dsb8 ) );
- dsb->Release();
- /*if ( !dsb8 ) {
- delete [] buffer;
- return false;
- }*/
- /*dsb8->Lock( 0, 0, &p, &bytes, 0, 0, DSBLOCK_ENTIREBUFFER );
- dsb8->Unlock( p, bytes, 0, 0 );*/
- delete [] buffer;
- return true;
- }
- void soundManagerClass::play( unsigned int sound )
- {
- ( buffers[ sound ] )->Play( 0, 0, 0 );
- return;
- }
- //private
- void soundManagerClass::fillwfex( WAVEFORMATEX* wfex, char* file )
- {
- ZeroMemory( wfex, sizeof( WAVEFORMATEX ) );
- wfex->wFormatTag = WAVE_FORMAT_PCM;
- wfex->nChannels = *( ( WORD* )( file + 22 ) );
- wfex->nSamplesPerSec = *( ( DWORD* )( file + 24 ) );
- wfex->wBitsPerSample = *( ( WORD* )( file + 34 ) );
- wfex->nBlockAlign = ( ( wfex->nChannels * wfex->wBitsPerSample ) / 8 );
- wfex->nAvgBytesPerSec = ( wfex->nSamplesPerSec * wfex->nBlockAlign );
- wfex->cbSize = sizeof( WAVEFORMATEX );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement