diff --git a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp index 62fe1a1f42..823a1b209b 100644 --- a/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp +++ b/modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp @@ -124,18 +124,29 @@ void AudioDeviceManager::audioDeviceListChanged() { if (currentAudioDevice != nullptr) { - auto isCurrentDeviceStillAvailable = [&] + auto currentDeviceStillAvailable = [&] { - for (auto* dt : availableDeviceTypes) - if (currentAudioDevice->getTypeName() == dt->getTypeName()) - for (auto& dn : dt->getDeviceNames (true)) - if (currentAudioDevice->getName() == dn) + auto currentTypeName = currentAudioDevice->getTypeName(); + auto currentDeviceName = currentAudioDevice->getName(); + + for (auto* deviceType : availableDeviceTypes) + { + if (currentTypeName == deviceType->getTypeName()) + { + for (auto& deviceName : deviceType->getDeviceNames (true)) + if (currentDeviceName == deviceName) return true; - return false; - }; + for (auto& deviceName : deviceType->getDeviceNames (false)) + if (currentDeviceName == deviceName) + return true; + } + } - if (! isCurrentDeviceStillAvailable()) + return false; + }(); + + if (! currentDeviceStillAvailable) { closeAudioDevice();