WASAPI driver will now resample when the device rate != audio/mix_rate

(cherry picked from commit d21a2019f1)
This commit is contained in:
Marcelo Fernandez 2018-03-29 22:56:57 -03:00 committed by Hein-Pieter van Braam
parent 5f5ec7e162
commit 125b403c0f
1 changed files with 13 additions and 4 deletions

View File

@ -218,7 +218,6 @@ Error AudioDriverWASAPI::init_device(bool reinit) {
// Since we're using WASAPI Shared Mode we can't control any of these, we just tag along
wasapi_channels = pwfex->nChannels;
mix_rate = pwfex->nSamplesPerSec;
format_tag = pwfex->wFormatTag;
bits_per_sample = pwfex->wBitsPerSample;
@ -254,7 +253,14 @@ Error AudioDriverWASAPI::init_device(bool reinit) {
}
}
hr = audio_client->Initialize(AUDCLNT_SHAREMODE_SHARED, AUDCLNT_STREAMFLAGS_EVENTCALLBACK, 0, 0, pwfex, NULL);
DWORD streamflags = AUDCLNT_STREAMFLAGS_EVENTCALLBACK;
if (mix_rate != pwfex->nSamplesPerSec) {
streamflags |= AUDCLNT_STREAMFLAGS_RATEADJUST;
pwfex->nSamplesPerSec = mix_rate;
pwfex->nAvgBytesPerSec = pwfex->nSamplesPerSec * pwfex->nChannels * (pwfex->wBitsPerSample / 8);
}
hr = audio_client->Initialize(AUDCLNT_SHAREMODE_SHARED, streamflags, 0, 0, pwfex, NULL);
ERR_FAIL_COND_V(hr != S_OK, ERR_CANT_OPEN);
event = CreateEvent(NULL, FALSE, FALSE, NULL);
@ -290,10 +296,11 @@ Error AudioDriverWASAPI::finish_device() {
if (audio_client) {
if (active) {
audio_client->Stop();
audio_client->Release();
audio_client = NULL;
active = false;
}
audio_client->Release();
audio_client = NULL;
}
if (render_client) {
@ -311,6 +318,8 @@ Error AudioDriverWASAPI::finish_device() {
Error AudioDriverWASAPI::init() {
mix_rate = GLOBAL_DEF("audio/mix_rate", DEFAULT_MIX_RATE);
Error err = init_device();
if (err != OK) {
ERR_PRINT("WASAPI: init_device error");