Guest User

Untitled

a guest
May 28th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. int SoundPlayer_create(SoundPlayer *player,
  2. unsigned long int sample_rate, unsigned int sample_size, unsigned int channels)
  3. {
  4. player->format.nSamplesPerSec = sample_rate;
  5. player->format.wBitsPerSample = sample_size;
  6. player->format.nChannels = channels;
  7.  
  8. player->format.nBlockAlign = channels * sample_size / 8;
  9. player->format.nAvgBytesPerSec = sample_rate * player->format.nBlockAlign;
  10.  
  11. player->format.cbSize = 0;
  12. player->format.wFormatTag = WAVE_FORMAT_PCM;
  13.  
  14. int err = waveOutOpen(&player->hndl,
  15. WAVE_MAPPER, &player->format,
  16. 0, 0, CALLBACK_NULL);
  17.  
  18. switch(err)
  19. {
  20. case MMSYSERR_NOERROR: return 0;
  21. case MMSYSERR_ALLOCATED: return -1;
  22. case MMSYSERR_BADDEVICEID: return -2;
  23. case MMSYSERR_NODRIVER: return -3;
  24. case MMSYSERR_NOMEM: return -4;
  25.  
  26. default: return -999;
  27. }
  28. }
  29.  
  30. int SoundPlayer_playWave(SoundPlayer *player, void *wave_block, unsigned long wave_size)
  31. {
  32. int err;
  33.  
  34. WAVEHDR header;
  35. {
  36. memset(&header, 0, sizeof(header));
  37. header.dwBufferLength = wave_size;
  38. header.lpData = wave_block;
  39.  
  40. err = waveOutPrepareHeader(player->hndl, &header, sizeof(WAVEHDR));
  41. switch(err)
  42. {
  43. case MMSYSERR_NOERROR: break;
  44. case MMSYSERR_INVALHANDLE: return -1;
  45. case MMSYSERR_NODRIVER: return -2;
  46. case MMSYSERR_NOMEM: return -3;
  47.  
  48. default: return -999;
  49. }
  50. }
  51.  
  52. err = waveOutWrite(player->hndl, &header, sizeof(WAVEHDR));
  53.  
  54. switch(err)
  55. {
  56. case MMSYSERR_NOERROR: return 0;
  57. case MMSYSERR_INVALHANDLE: return -1;
  58. case MMSYSERR_NODRIVER: return -2;
  59. case MMSYSERR_NOMEM: return -3;
  60.  
  61. default: return -999;
  62. }
  63. }
  64.  
  65. static SoundPlayer main_sound_player;
  66. SoundPlayer_create(&main_sound_player, 44100, 16, 2);
  67. {
  68. test_sound.data_size);
  69. unsigned char *test_wave = malloc(4096);
  70. memset(test_wave, 127, 4096);
  71. SoundPlayer_playWave(&main_sound_player, test_wave, 4096);
  72. }
Add Comment
Please, Sign In to add comment