diff options
| author | Marcelo Fernandez | 2018-03-29 22:56:57 -0300 |
|---|---|---|
| committer | Hein-Pieter van Braam | 2018-04-14 22:07:30 +0200 |
| commit | 125b403c0f61bb14bc5c9e9bab855050cf3e8aaa (patch) | |
| tree | 267e357d89c0ccd7b18d300ff2dbb68ebfe03ea2 /drivers | |
| parent | 5f5ec7e1629b29a542e977766c86e93a16c3b7be (diff) | |
| download | godot-125b403c0f61bb14bc5c9e9bab855050cf3e8aaa.tar.gz godot-125b403c0f61bb14bc5c9e9bab855050cf3e8aaa.tar.zst godot-125b403c0f61bb14bc5c9e9bab855050cf3e8aaa.zip | |
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/wasapi/audio_driver_wasapi.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/wasapi/audio_driver_wasapi.cpp b/drivers/wasapi/audio_driver_wasapi.cpp index 6a20ff805..e1680601a 100644 --- a/drivers/wasapi/audio_driver_wasapi.cpp +++ b/drivers/wasapi/audio_driver_wasapi.cpp @@ -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"); |
