diff --git a/sounddevice.py b/sounddevice.py index 0d4040c..15fbd42 100644 --- a/sounddevice.py +++ b/sounddevice.py @@ -2448,7 +2448,7 @@ def __init__(self, channel_map=None, change_device_parameters=False, class WasapiSettings: - def __init__(self, exclusive=False, auto_convert=False): + def __init__(self, exclusive=False, auto_convert=False, explicit_sample_format=False): """WASAPI-specific input/output settings. Objects of this class can be used as *extra_settings* argument @@ -2470,6 +2470,13 @@ def __init__(self, exclusive=False, auto_convert=False): system mixer sample rate. This only applies in *shared mode* and has no effect when *exclusive* is set to ``True``. + explicit_sample_format : bool + Force explicit sample format and do not allow PortAudio to + select suitable working format. API will fail if provided + sample format is not supported by audio hardware in Exclusive + mode or system mixer in Shared mode. This is required for + accurate native format detection. + Examples -------- Setting exclusive mode when calling `play()`: @@ -2487,8 +2494,10 @@ def __init__(self, exclusive=False, auto_convert=False): flags = 0x0 if exclusive: flags |= _lib.paWinWasapiExclusive - elif auto_convert: + if auto_convert: flags |= _lib.paWinWasapiAutoConvert + if explicit_sample_format: + flags |= _lib.paWinWasapiExplicitSampleFormat self._streaminfo = _ffi.new('PaWasapiStreamInfo*', dict( size=_ffi.sizeof('PaWasapiStreamInfo'), hostApiType=_lib.paWASAPI, diff --git a/sounddevice_build.py b/sounddevice_build.py index 6b45b79..6d9cf80 100644 --- a/sounddevice_build.py +++ b/sounddevice_build.py @@ -255,6 +255,7 @@ paWinWasapiUseChannelMask = 4, paWinWasapiPolling = 8, paWinWasapiThreadPriority = 16, + paWinWasapiExplicitSampleFormat = 32, paWinWasapiAutoConvert = 64 } PaWasapiFlags;