Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 KB | None | 0 0
  1.         if (format) {
  2.                 if (_waveFormat->Format.nChannels == 1) {
  3.                     _waveFormat->Format.nChannels = 2;
  4.                 } else {
  5.                     _waveFormat->Format.nChannels = format->channelCount;
  6.                 }
  7.                 _waveFormat->Format.wBitsPerSample = format->bitsPerSample;
  8.                 _waveFormat->Format.nSamplesPerSec = format->sampleRate;
  9.                 _waveFormat->Format.wFormatTag = 1;
  10.                 _waveFormat->Format.nBlockAlign = _waveFormat->Format.nChannels * format->bitsPerSample / 8;
  11.                 _waveFormat->Format.nAvgBytesPerSec = format->sampleRate * _waveFormat->Format.nBlockAlign;
  12.                 _waveFormat->Format.cbSize = 0;
  13.                 _waveFormat->Samples.wValidBitsPerSample = format->bitsPerSample;
  14.                 hr = _pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, (WAVEFORMATEX *)_waveFormat, &match);
  15.                 if (hr != S_OK) {
  16.                     LOG(ERROR) << "Wave format provided not supported by sound card";
  17.                     throw - 1;
  18.                 }
  19.  
  20.             } else {
  21.                 // A format wasn't requested, but we want to minimum force 48k and 32-bit.
  22.                 // if 32-bit isnt supported, request 16-bit
  23.                 if (_waveFormat->Format.nSamplesPerSec != 48000) {
  24.                     // Attempt 48k, if we cant, BAIL
  25.                     LOG(TRACE) << "Default is not 48k rate, attempting 48k....";
  26.                     _waveFormat->Format.nSamplesPerSec = 48000;
  27.                     _waveFormat->Format.nAvgBytesPerSec = _waveFormat->Format.nSamplesPerSec * _waveFormat->Format.nBlockAlign;
  28.                     // REQUEST IT
  29.  
  30.                     hr = _pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, (WAVEFORMATEX *)_waveFormat, &match);
  31.                     if (hr != S_OK) {
  32.                         // Try 24k
  33.                         _waveFormat->Format.nSamplesPerSec = 24000;
  34.                         _waveFormat->Format.nAvgBytesPerSec = _waveFormat->Format.nSamplesPerSec * _waveFormat->Format.nBlockAlign;
  35.                         if (hr != S_OK) {
  36.                             LOG(ERROR) << "Sound card hardware must support at least 24k or 48k sample rate";
  37.                             throw - 1;
  38.                         }
  39.                     }
  40.                     SAFE_CO_FREE(match);
  41.                 }
  42.                 if (_waveFormat->Format.wBitsPerSample != 32) {
  43.                     // Try to request 32-bits
  44.                     LOG(TRACE) << "Default is not 32-bit PCM, attempting 32-bit...";
  45.                     _waveFormat->Format.wBitsPerSample = 32;
  46.                     _waveFormat->Format.nBlockAlign = _waveFormat->Format.nChannels * _waveFormat->Format.wBitsPerSample / 8;
  47.                     hr = _pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, (WAVEFORMATEX *)_waveFormat, &match);
  48.                     if (hr != S_OK) {
  49.                         // It didnt support 32-bit, just use 16-bit
  50.                         LOG(TRACE) << "falling back on 16-bit PCM";
  51.                         _waveFormat->Format.wBitsPerSample = 16;
  52.                         _waveFormat->Format.nBlockAlign = _waveFormat->Format.nChannels * _waveFormat->Format.wBitsPerSample / 8;
  53.                     }
  54.                     SAFE_CO_FREE(match);
  55.                 }
  56.             }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement