mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-19 01:04:20 +00:00
Made AudioDeviceManager reset its cpu counter when the device is disabled. (Also did a bit of cleanup inside the class)
This commit is contained in:
parent
07968421a1
commit
1f770cc7c8
1 changed files with 34 additions and 47 deletions
|
|
@ -176,10 +176,8 @@ void AudioDeviceManager::addAudioDeviceType (AudioIODeviceType* newDeviceType)
|
|||
|
||||
static bool deviceListContains (AudioIODeviceType* type, bool isInput, const String& name)
|
||||
{
|
||||
StringArray devices (type->getDeviceNames (isInput));
|
||||
|
||||
for (int i = devices.size(); --i >= 0;)
|
||||
if (devices[i].trim().equalsIgnoreCase (name.trim()))
|
||||
for (auto& deviceName : type->getDeviceNames (isInput))
|
||||
if (deviceName.trim().equalsIgnoreCase (name.trim()))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
|
@ -216,28 +214,22 @@ String AudioDeviceManager::initialiseDefault (const String& preferredDefaultDevi
|
|||
}
|
||||
else if (preferredDefaultDeviceName.isNotEmpty())
|
||||
{
|
||||
for (int j = availableDeviceTypes.size(); --j >= 0;)
|
||||
for (auto* type : availableDeviceTypes)
|
||||
{
|
||||
AudioIODeviceType* const type = availableDeviceTypes.getUnchecked(j);
|
||||
|
||||
const StringArray outs (type->getDeviceNames (false));
|
||||
|
||||
for (int i = 0; i < outs.size(); ++i)
|
||||
for (auto& out : type->getDeviceNames (false))
|
||||
{
|
||||
if (outs[i].matchesWildcard (preferredDefaultDeviceName, true))
|
||||
if (out.matchesWildcard (preferredDefaultDeviceName, true))
|
||||
{
|
||||
setup.outputDeviceName = outs[i];
|
||||
setup.outputDeviceName = out;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const StringArray ins (type->getDeviceNames (true));
|
||||
|
||||
for (int i = 0; i < ins.size(); ++i)
|
||||
for (auto& in : type->getDeviceNames (true))
|
||||
{
|
||||
if (ins[i].matchesWildcard (preferredDefaultDeviceName, true))
|
||||
if (in.matchesWildcard (preferredDefaultDeviceName, true))
|
||||
{
|
||||
setup.inputDeviceName = ins[i];
|
||||
setup.inputDeviceName = in;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -249,7 +241,7 @@ String AudioDeviceManager::initialiseDefault (const String& preferredDefaultDevi
|
|||
}
|
||||
|
||||
String AudioDeviceManager::initialiseFromXML (const XmlElement& xml,
|
||||
const bool selectDefaultDeviceOnFailure,
|
||||
bool selectDefaultDeviceOnFailure,
|
||||
const String& preferredDefaultDeviceName,
|
||||
const AudioDeviceSetup* preferredSetupOptions)
|
||||
{
|
||||
|
|
@ -276,10 +268,10 @@ String AudioDeviceManager::initialiseFromXML (const XmlElement& xml,
|
|||
|
||||
if (findType (currentDeviceType) == nullptr)
|
||||
{
|
||||
if (AudioIODeviceType* const type = findType (setup.inputDeviceName, setup.outputDeviceName))
|
||||
if (auto* type = findType (setup.inputDeviceName, setup.outputDeviceName))
|
||||
currentDeviceType = type->getTypeName();
|
||||
else if (availableDeviceTypes.size() > 0)
|
||||
currentDeviceType = availableDeviceTypes.getUnchecked(0)->getTypeName();
|
||||
else if (auto* firstType = availableDeviceTypes.getFirst())
|
||||
currentDeviceType = firstType->getTypeName();
|
||||
}
|
||||
|
||||
setup.bufferSize = xml.getIntAttribute ("audioDeviceBufferSize", setup.bufferSize);
|
||||
|
|
@ -345,8 +337,8 @@ void AudioDeviceManager::scanDevicesIfNeeded()
|
|||
|
||||
createDeviceTypesIfNeeded();
|
||||
|
||||
for (int i = availableDeviceTypes.size(); --i >= 0;)
|
||||
availableDeviceTypes.getUnchecked(i)->scanForDevices();
|
||||
for (auto* type : availableDeviceTypes)
|
||||
type->scanForDevices();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -354,29 +346,23 @@ AudioIODeviceType* AudioDeviceManager::findType (const String& typeName)
|
|||
{
|
||||
scanDevicesIfNeeded();
|
||||
|
||||
for (int i = availableDeviceTypes.size(); --i >= 0;)
|
||||
if (availableDeviceTypes.getUnchecked(i)->getTypeName() == typeName)
|
||||
return availableDeviceTypes.getUnchecked(i);
|
||||
for (auto* type : availableDeviceTypes)
|
||||
if (type->getTypeName() == typeName)
|
||||
return type;
|
||||
|
||||
return nullptr;
|
||||
return {};
|
||||
}
|
||||
|
||||
AudioIODeviceType* AudioDeviceManager::findType (const String& inputName, const String& outputName)
|
||||
{
|
||||
scanDevicesIfNeeded();
|
||||
|
||||
for (int i = availableDeviceTypes.size(); --i >= 0;)
|
||||
{
|
||||
AudioIODeviceType* const type = availableDeviceTypes.getUnchecked(i);
|
||||
|
||||
for (auto* type : availableDeviceTypes)
|
||||
if ((inputName.isNotEmpty() && deviceListContains (type, true, inputName))
|
||||
|| (outputName.isNotEmpty() && deviceListContains (type, false, outputName)))
|
||||
{
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
return {};
|
||||
}
|
||||
|
||||
void AudioDeviceManager::getAudioDeviceSetup (AudioDeviceSetup& setup) const
|
||||
|
|
@ -391,8 +377,7 @@ void AudioDeviceManager::deleteCurrentDevice()
|
|||
currentSetup.outputDeviceName.clear();
|
||||
}
|
||||
|
||||
void AudioDeviceManager::setCurrentAudioDeviceType (const String& type,
|
||||
const bool treatAsChosenDevice)
|
||||
void AudioDeviceManager::setCurrentAudioDeviceType (const String& type, bool treatAsChosenDevice)
|
||||
{
|
||||
for (int i = 0; i < availableDeviceTypes.size(); ++i)
|
||||
{
|
||||
|
|
@ -421,15 +406,15 @@ void AudioDeviceManager::setCurrentAudioDeviceType (const String& type,
|
|||
|
||||
AudioIODeviceType* AudioDeviceManager::getCurrentDeviceTypeObject() const
|
||||
{
|
||||
for (int i = 0; i < availableDeviceTypes.size(); ++i)
|
||||
if (availableDeviceTypes.getUnchecked(i)->getTypeName() == currentDeviceType)
|
||||
return availableDeviceTypes.getUnchecked(i);
|
||||
for (auto* type : availableDeviceTypes)
|
||||
if (type->getTypeName() == currentDeviceType)
|
||||
return type;
|
||||
|
||||
return availableDeviceTypes[0];
|
||||
return availableDeviceTypes.getFirst();
|
||||
}
|
||||
|
||||
String AudioDeviceManager::setAudioDeviceSetup (const AudioDeviceSetup& newSetup,
|
||||
const bool treatAsChosenDevice)
|
||||
bool treatAsChosenDevice)
|
||||
{
|
||||
jassert (&newSetup != ¤tSetup); // this will have no effect
|
||||
|
||||
|
|
@ -441,11 +426,11 @@ String AudioDeviceManager::setAudioDeviceSetup (const AudioDeviceSetup& newSetup
|
|||
|
||||
stopDevice();
|
||||
|
||||
const String newInputDeviceName (numInputChansNeeded == 0 ? String() : newSetup.inputDeviceName);
|
||||
const String newOutputDeviceName (numOutputChansNeeded == 0 ? String() : newSetup.outputDeviceName);
|
||||
auto newInputDeviceName (numInputChansNeeded == 0 ? String() : newSetup.inputDeviceName);
|
||||
auto newOutputDeviceName (numOutputChansNeeded == 0 ? String() : newSetup.outputDeviceName);
|
||||
|
||||
String error;
|
||||
AudioIODeviceType* type = getCurrentDeviceTypeObject();
|
||||
auto* type = getCurrentDeviceTypeObject();
|
||||
|
||||
if (type == nullptr || (newInputDeviceName.isEmpty() && newOutputDeviceName.isEmpty()))
|
||||
{
|
||||
|
|
@ -544,7 +529,7 @@ double AudioDeviceManager::chooseBestSampleRate (double rate) const
|
|||
{
|
||||
jassert (currentAudioDevice != nullptr);
|
||||
|
||||
const Array<double> rates (currentAudioDevice->getAvailableSampleRates());
|
||||
auto rates = currentAudioDevice->getAvailableSampleRates();
|
||||
|
||||
if (rate > 0 && rates.contains (rate))
|
||||
return rate;
|
||||
|
|
@ -558,7 +543,7 @@ double AudioDeviceManager::chooseBestSampleRate (double rate) const
|
|||
|
||||
for (int i = rates.size(); --i >= 0;)
|
||||
{
|
||||
const double sr = rates[i];
|
||||
auto sr = rates[i];
|
||||
|
||||
if (sr >= 44100.0 && (lowestAbove44 < 1.0 || sr < lowestAbove44))
|
||||
lowestAbove44 = sr;
|
||||
|
|
@ -592,6 +577,7 @@ void AudioDeviceManager::closeAudioDevice()
|
|||
{
|
||||
stopDevice();
|
||||
currentAudioDevice.reset();
|
||||
cpuUsageMs = 0;
|
||||
}
|
||||
|
||||
void AudioDeviceManager::restartLastAudioDevice()
|
||||
|
|
@ -660,6 +646,7 @@ void AudioDeviceManager::addAudioCallback (AudioIODeviceCallback* newCallback)
|
|||
{
|
||||
{
|
||||
const ScopedLock sl (audioCallbackLock);
|
||||
|
||||
if (callbacks.contains (newCallback))
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue