Browse Source

Try using the built-in WASAPI audio rate conversion

Fixes https://github.com/libsdl-org/SDL/issues/4608
Sam Lantinga 3 years ago
parent
commit
ac32c522ad
1 changed files with 4 additions and 13 deletions
  1. 4 13
      src/audio/wasapi/SDL_wasapi.c

+ 4 - 13
src/audio/wasapi/SDL_wasapi.c

@@ -556,21 +556,12 @@ WASAPI_PrepDevice(_THIS, const SDL_bool updatestream)
         return WIN_SetErrorFromHRESULT("WASAPI can't determine minimum device period", ret);
     }
 
-#if 1  /* we're getting reports that WASAPI's resampler introduces distortions, so it's disabled for now. --ryan. */
-    this->spec.freq = waveformat->nSamplesPerSec;  /* force sampling rate so our resampler kicks in, if necessary. */
-#else
-    /* favor WASAPI's resampler over our own, in Win7+. */
+    /* favor WASAPI's resampler over our own */
     if (this->spec.freq != waveformat->nSamplesPerSec) {
-        /* RATEADJUST only works with output devices in share mode, and is available in Win7 and later.*/
-        if (WIN_IsWindows7OrGreater() && !this->iscapture && (sharemode == AUDCLNT_SHAREMODE_SHARED)) {
-            streamflags |= AUDCLNT_STREAMFLAGS_RATEADJUST;
-            waveformat->nSamplesPerSec = this->spec.freq;
-            waveformat->nAvgBytesPerSec = waveformat->nSamplesPerSec * waveformat->nChannels * (waveformat->wBitsPerSample / 8);
-        } else {
-            this->spec.freq = waveformat->nSamplesPerSec;  /* force sampling rate so our resampler kicks in. */
-        }
+        streamflags |= (AUDCLNT_STREAMFLAGS_AUTOCONVERTPCM | AUDCLNT_STREAMFLAGS_SRC_DEFAULT_QUALITY);
+        waveformat->nSamplesPerSec = this->spec.freq;
+        waveformat->nAvgBytesPerSec = waveformat->nSamplesPerSec * waveformat->nChannels * (waveformat->wBitsPerSample / 8);
     }
-#endif
 
     streamflags |= AUDCLNT_STREAMFLAGS_EVENTCALLBACK;
     ret = IAudioClient_Initialize(client, sharemode, streamflags, 0, 0, waveformat, NULL);