Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (format) {
- if (_waveFormat->Format.nChannels == 1) {
- _waveFormat->Format.nChannels = 2;
- } else {
- _waveFormat->Format.nChannels = format->channelCount;
- }
- _waveFormat->Format.wBitsPerSample = format->bitsPerSample;
- _waveFormat->Format.nSamplesPerSec = format->sampleRate;
- _waveFormat->Format.wFormatTag = 1;
- _waveFormat->Format.nBlockAlign = _waveFormat->Format.nChannels * format->bitsPerSample / 8;
- _waveFormat->Format.nAvgBytesPerSec = format->sampleRate * _waveFormat->Format.nBlockAlign;
- _waveFormat->Format.cbSize = 0;
- _waveFormat->Samples.wValidBitsPerSample = format->bitsPerSample;
- hr = _pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, (WAVEFORMATEX *)_waveFormat, &match);
- if (hr != S_OK) {
- LOG(ERROR) << "Wave format provided not supported by sound card";
- throw - 1;
- }
- } else {
- // A format wasn't requested, but we want to minimum force 48k and 32-bit.
- // if 32-bit isnt supported, request 16-bit
- if (_waveFormat->Format.nSamplesPerSec != 48000) {
- // Attempt 48k, if we cant, BAIL
- LOG(TRACE) << "Default is not 48k rate, attempting 48k....";
- _waveFormat->Format.nSamplesPerSec = 48000;
- _waveFormat->Format.nAvgBytesPerSec = _waveFormat->Format.nSamplesPerSec * _waveFormat->Format.nBlockAlign;
- // REQUEST IT
- hr = _pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, (WAVEFORMATEX *)_waveFormat, &match);
- if (hr != S_OK) {
- // Try 24k
- _waveFormat->Format.nSamplesPerSec = 24000;
- _waveFormat->Format.nAvgBytesPerSec = _waveFormat->Format.nSamplesPerSec * _waveFormat->Format.nBlockAlign;
- if (hr != S_OK) {
- LOG(ERROR) << "Sound card hardware must support at least 24k or 48k sample rate";
- throw - 1;
- }
- }
- SAFE_CO_FREE(match);
- }
- if (_waveFormat->Format.wBitsPerSample != 32) {
- // Try to request 32-bits
- LOG(TRACE) << "Default is not 32-bit PCM, attempting 32-bit...";
- _waveFormat->Format.wBitsPerSample = 32;
- _waveFormat->Format.nBlockAlign = _waveFormat->Format.nChannels * _waveFormat->Format.wBitsPerSample / 8;
- hr = _pAudioClient->IsFormatSupported(AUDCLNT_SHAREMODE_SHARED, (WAVEFORMATEX *)_waveFormat, &match);
- if (hr != S_OK) {
- // It didnt support 32-bit, just use 16-bit
- LOG(TRACE) << "falling back on 16-bit PCM";
- _waveFormat->Format.wBitsPerSample = 16;
- _waveFormat->Format.nBlockAlign = _waveFormat->Format.nChannels * _waveFormat->Format.wBitsPerSample / 8;
- }
- SAFE_CO_FREE(match);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement