Detailed steps on how to reproduce the bug
Windows offers Audio enhancements per audio input (such as "voice clarity"). when this option is toggled, the setup changes and buffers become stale, requiring an engine reset.
When enhancements switch, and the current setup/buffers become invalid, an issue in the implementation occurs where a notification is triggered (when the enhancements are toggled on/off):
JUCE_COMRESULT OnPropertyValueChanged (LPCWSTR, const PROPERTYKEY) { return notify(); }
this propagates and triggers the timer which calls
device->deviceChangeDetector.triggerAsyncDeviceChangeCallback();
this calls:
void systemDeviceChanged()
{
const auto newDevices = scan();
if (std::exchange (devices, newDevices) != newDevices)
{
hasScanned = true;
callDeviceChangeListeners();
}
}
(juce_WASAPI_windows.cpp, juce_HiddenMessageWindow_windows.h)
the issue is that the device list remains the same and std::exchange (devices, newDevices) != newDevices doesn't trigger the callback on client side. Hence, the setup becomes stale and the buffers are not updated anymore.
What is the expected behaviour?
buffers should be reallocated and clients notified.
Operating systems
Windows
What versions of the operating systems?
10, 11
Architectures
x86_64
Stacktrace
Plug-in formats (if applicable)
No response
Plug-in host applications (DAWs) (if applicable)
No response
Testing on the develop branch
I have not tested against the develop branch
Code of Conduct
Detailed steps on how to reproduce the bug
Windows offers Audio enhancements per audio input (such as "voice clarity"). when this option is toggled, the setup changes and buffers become stale, requiring an engine reset.
When enhancements switch, and the current setup/buffers become invalid, an issue in the implementation occurs where a notification is triggered (when the enhancements are toggled on/off):
JUCE_COMRESULT OnPropertyValueChanged (LPCWSTR, const PROPERTYKEY) { return notify(); }this propagates and triggers the timer which calls
device->deviceChangeDetector.triggerAsyncDeviceChangeCallback();this calls:
(juce_WASAPI_windows.cpp, juce_HiddenMessageWindow_windows.h)
the issue is that the device list remains the same and std::exchange (devices, newDevices) != newDevices doesn't trigger the callback on client side. Hence, the setup becomes stale and the buffers are not updated anymore.
What is the expected behaviour?
buffers should be reallocated and clients notified.
Operating systems
Windows
What versions of the operating systems?
10, 11
Architectures
x86_64
Stacktrace
Plug-in formats (if applicable)
No response
Plug-in host applications (DAWs) (if applicable)
No response
Testing on the
developbranchI have not tested against the
developbranchCode of Conduct