Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. #include "sound.h"
  2.  
  3. soundManagerClass::soundManagerClass()
  4. : dsi( 0 )
  5. {
  6. ;
  7. }
  8.  
  9. soundManagerClass::~soundManagerClass() {
  10. ;
  11. }
  12.  
  13.  
  14. bool soundManagerClass::init( HWND hwnd )
  15. {
  16. hr = DirectSoundCreate8( 0, &dsi, 0 );
  17. if ( hr != DS_OK ) {
  18. dsi = 0;
  19. return false;
  20. }
  21. hr = dsi->SetCooperativeLevel( hwnd, DSSCL_NORMAL );
  22. if ( hr != DS_OK )
  23. return false;
  24. return true;
  25. }
  26.  
  27. void soundManagerClass::cleanup()
  28. {
  29. if ( !dsi )
  30. return;
  31. for ( unsigned int i = buffers.size(); i > 0; i-- ) {
  32. ( buffers[ i - 1 ] )->Release();
  33. delete buffers[ i - 1 ];
  34. buffers.pop_back();
  35. }
  36. dsi->Release();
  37. return;
  38. }
  39.  
  40. bool soundManagerClass::loadShortSound( unsigned int* sound, const char* wav )
  41. {
  42. std::ifstream file;
  43. int fileSize;
  44. char* buffer;
  45. WAVEFORMATEX wfex;
  46. DSBUFFERDESC dsbd;
  47. IDirectSoundBuffer* dsb = 0;
  48. IDirectSoundBuffer8* dsb8;
  49. void* p;
  50. DWORD bytes;
  51. file.open( wav, std::fstream::binary );
  52. if ( !file.is_open() )
  53. return false;
  54. file.seekg( 0, std::fstream::end );
  55. fileSize = file.tellg();
  56. file.seekg( 0, std::fstream::beg );
  57. buffer = new char[ fileSize ];
  58. file.read( buffer, fileSize );
  59. file.close();
  60. fillwfex( &wfex, buffer );
  61. ZeroMemory( &dsbd, sizeof( DSBUFFERDESC ) );
  62. dsbd.dwSize = sizeof( DSBUFFERDESC );
  63. dsbd.dwFlags = DSBCAPS_GLOBALFOCUS;
  64. dsbd.dwBufferBytes = fileSize - 44;
  65. dsbd.lpwfxFormat = &wfex;
  66. hr = dsi->CreateSoundBuffer( &dsbd, &dsb, 0 );
  67. if ( hr != DS_OK ) {
  68. delete [] buffer;
  69. return false;
  70. }
  71. //
  72. //dsb8 = ( buffers[ buffers.size() ] );
  73. //dsb->QueryInterface( IID_IDirectSoundBuffer8, ( void** )( &dsb8 ) );
  74. dsb->Release();
  75. /*if ( !dsb8 ) {
  76. delete [] buffer;
  77. return false;
  78. }*/
  79. /*dsb8->Lock( 0, 0, &p, &bytes, 0, 0, DSBLOCK_ENTIREBUFFER );
  80. dsb8->Unlock( p, bytes, 0, 0 );*/
  81. delete [] buffer;
  82. return true;
  83. }
  84.  
  85. void soundManagerClass::play( unsigned int sound )
  86. {
  87. ( buffers[ sound ] )->Play( 0, 0, 0 );
  88. return;
  89. }
  90.  
  91. //private
  92.  
  93. void soundManagerClass::fillwfex( WAVEFORMATEX* wfex, char* file )
  94. {
  95. ZeroMemory( wfex, sizeof( WAVEFORMATEX ) );
  96. wfex->wFormatTag = WAVE_FORMAT_PCM;
  97. wfex->nChannels = *( ( WORD* )( file + 22 ) );
  98. wfex->nSamplesPerSec = *( ( DWORD* )( file + 24 ) );
  99. wfex->wBitsPerSample = *( ( WORD* )( file + 34 ) );
  100. wfex->nBlockAlign = ( ( wfex->nChannels * wfex->wBitsPerSample ) / 8 );
  101. wfex->nAvgBytesPerSec = ( wfex->nSamplesPerSec * wfex->nBlockAlign );
  102. wfex->cbSize = sizeof( WAVEFORMATEX );
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement