|
|
@@ -445,16 +445,15 @@ String AudioDeviceManager::setAudioDeviceSetup (const AudioDeviceSetup& newSetup |
|
|
|
|
|
|
|
|
stopDevice();
|
|
|
stopDevice();
|
|
|
|
|
|
|
|
|
if (! newSetup.useDefaultInputChannels) numInputChansNeeded = newSetup.inputChannels.countNumberOfSetBits();
|
|
|
|
|
|
if (! newSetup.useDefaultOutputChannels) numOutputChansNeeded = newSetup.outputChannels.countNumberOfSetBits();
|
|
|
|
|
|
|
|
|
if (! newSetup.useDefaultInputChannels)
|
|
|
|
|
|
numInputChansNeeded = newSetup.inputChannels.countNumberOfSetBits();
|
|
|
|
|
|
|
|
|
auto newInputDeviceName (numInputChansNeeded == 0 ? String() : newSetup.inputDeviceName);
|
|
|
|
|
|
auto newOutputDeviceName (numOutputChansNeeded == 0 ? String() : newSetup.outputDeviceName);
|
|
|
|
|
|
|
|
|
if (! newSetup.useDefaultOutputChannels)
|
|
|
|
|
|
numOutputChansNeeded = newSetup.outputChannels.countNumberOfSetBits();
|
|
|
|
|
|
|
|
|
String error;
|
|
|
|
|
|
auto* type = getCurrentDeviceTypeObject();
|
|
|
auto* type = getCurrentDeviceTypeObject();
|
|
|
|
|
|
|
|
|
if (type == nullptr || (newInputDeviceName.isEmpty() && newOutputDeviceName.isEmpty()))
|
|
|
|
|
|
|
|
|
if (type == nullptr)
|
|
|
{
|
|
|
{
|
|
|
deleteCurrentDevice();
|
|
|
deleteCurrentDevice();
|
|
|
|
|
|
|
|
|
@@ -464,20 +463,22 @@ String AudioDeviceManager::setAudioDeviceSetup (const AudioDeviceSetup& newSetup |
|
|
return {};
|
|
|
return {};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
if (currentSetup.inputDeviceName != newInputDeviceName
|
|
|
|
|
|
|| currentSetup.outputDeviceName != newOutputDeviceName
|
|
|
|
|
|
|| currentAudioDevice == nullptr)
|
|
|
|
|
|
|
|
|
String error;
|
|
|
|
|
|
|
|
|
|
|
|
if (currentSetup.inputDeviceName != newSetup.inputDeviceName
|
|
|
|
|
|
|| currentSetup.outputDeviceName != newSetup.outputDeviceName
|
|
|
|
|
|
|| currentAudioDevice == nullptr)
|
|
|
{
|
|
|
{
|
|
|
deleteCurrentDevice();
|
|
|
deleteCurrentDevice();
|
|
|
scanDevicesIfNeeded();
|
|
|
scanDevicesIfNeeded();
|
|
|
|
|
|
|
|
|
if (newOutputDeviceName.isNotEmpty() && ! deviceListContains (type, false, newOutputDeviceName))
|
|
|
|
|
|
return "No such device: " + newOutputDeviceName;
|
|
|
|
|
|
|
|
|
if (newSetup.outputDeviceName.isNotEmpty() && ! deviceListContains (type, false, newSetup.outputDeviceName))
|
|
|
|
|
|
return "No such device: " + newSetup.outputDeviceName;
|
|
|
|
|
|
|
|
|
if (newInputDeviceName.isNotEmpty() && ! deviceListContains (type, true, newInputDeviceName))
|
|
|
|
|
|
return "No such device: " + newInputDeviceName;
|
|
|
|
|
|
|
|
|
if (newSetup.inputDeviceName.isNotEmpty() && ! deviceListContains (type, true, newSetup.inputDeviceName))
|
|
|
|
|
|
return "No such device: " + newSetup.inputDeviceName;
|
|
|
|
|
|
|
|
|
currentAudioDevice.reset (type->createDevice (newOutputDeviceName, newInputDeviceName));
|
|
|
|
|
|
|
|
|
currentAudioDevice.reset (type->createDevice (newSetup.outputDeviceName, newSetup.inputDeviceName));
|
|
|
|
|
|
|
|
|
if (currentAudioDevice == nullptr)
|
|
|
if (currentAudioDevice == nullptr)
|
|
|
error = "Can't open the audio device!\n\n"
|
|
|
error = "Can't open the audio device!\n\n"
|
|
|
@@ -504,12 +505,15 @@ String AudioDeviceManager::setAudioDeviceSetup (const AudioDeviceSetup& newSetup |
|
|
outputChannels.setRange (0, numOutputChansNeeded, true);
|
|
|
outputChannels.setRange (0, numOutputChansNeeded, true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
if (newInputDeviceName.isEmpty()) inputChannels.clear();
|
|
|
|
|
|
if (newOutputDeviceName.isEmpty()) outputChannels.clear();
|
|
|
|
|
|
|
|
|
if (newSetup.inputDeviceName.isEmpty()) inputChannels.clear();
|
|
|
|
|
|
if (newSetup.outputDeviceName.isEmpty()) outputChannels.clear();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
if (! newSetup.useDefaultInputChannels) inputChannels = newSetup.inputChannels;
|
|
|
|
|
|
if (! newSetup.useDefaultOutputChannels) outputChannels = newSetup.outputChannels;
|
|
|
|
|
|
|
|
|
if (! newSetup.useDefaultInputChannels)
|
|
|
|
|
|
inputChannels = newSetup.inputChannels;
|
|
|
|
|
|
|
|
|
|
|
|
if (! newSetup.useDefaultOutputChannels)
|
|
|
|
|
|
outputChannels = newSetup.outputChannels;
|
|
|
|
|
|
|
|
|
currentSetup = newSetup;
|
|
|
currentSetup = newSetup;
|
|
|
|
|
|
|
|
|
|