WASAPI driver will now resample when the device rate != audio/mix_rate
(cherry picked from commit d21a2019f1
)
This commit is contained in:
parent
5f5ec7e162
commit
125b403c0f
1 changed files with 13 additions and 4 deletions
|
@ -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");
|
||||
|
|
Loading…
Reference in a new issue