wasapi-rs icon indicating copy to clipboard operation
wasapi-rs copied to clipboard

Support device change notifications

Open liautaud opened this issue 1 year ago • 1 comments

Hi Henrik,

Thanks a lot for this crate, it's been super helpful!

Currently, when recording from a device, if that device gets disconnected (e.g. a USB microphone gets unplugged), the recording loop crashes at the next call to audio_client.get_next_nbr_frames() or audio_client.read_from_device(). The recommended fix seems to be to listen to device change notifications to synchronously detect when the device disappears and to retry recording with a different device.

The crate already supports registering audio session notifications, so I feel it would be reasonable to also support registering device change notifications. Looking over the Win32 documentation, this seems to require:

Also, it seems like AudioSessionControl doesn't support unregistering session notifications. Is that intentional?

liautaud avatar Sep 24 '24 16:09 liautaud

This would be a useful addition. But don't you get a call to OnSessionDisconnected with value DisconnectReasonDeviceRemoval when unplugging a device? https://learn.microsoft.com/en-us/windows/win32/api/audiopolicy/nf-audiopolicy-iaudiosessionevents-onsessiondisconnected

There is no particular reason for not implementing unregistering, except that nobody has asked for it.

HEnquist avatar Sep 25 '24 10:09 HEnquist