1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Added a removeAudioDeviceType() method to AudioDeviceManager and made the ownership semantics of addAudioDeviceType() clearer

This commit is contained in:
ed 2019-12-18 09:25:38 +00:00
parent 57d3cc6166
commit 859315fe4f
2 changed files with 26 additions and 8 deletions

View file

@ -105,7 +105,7 @@ void AudioDeviceManager::createDeviceTypesIfNeeded()
createAudioDeviceTypes (types);
for (auto* t : types)
addAudioDeviceType (t);
addAudioDeviceType (std::unique_ptr<AudioIODeviceType> (t));
types.clear (false);
@ -180,15 +180,32 @@ void AudioDeviceManager::createAudioDeviceTypes (OwnedArray<AudioIODeviceType>&
addIfNotNull (list, AudioIODeviceType::createAudioIODeviceType_Android());
}
void AudioDeviceManager::addAudioDeviceType (AudioIODeviceType* newDeviceType)
void AudioDeviceManager::addAudioDeviceType (std::unique_ptr<AudioIODeviceType> newDeviceType)
{
if (newDeviceType != nullptr)
{
jassert (lastDeviceTypeConfigs.size() == availableDeviceTypes.size());
availableDeviceTypes.add (newDeviceType);
availableDeviceTypes.add (newDeviceType.release());
lastDeviceTypeConfigs.add (new AudioDeviceSetup());
newDeviceType->addListener (callbackHandler.get());
availableDeviceTypes.getLast()->addListener (callbackHandler.get());
}
}
void AudioDeviceManager::removeAudioDeviceType (AudioIODeviceType* deviceTypeToRemove)
{
if (deviceTypeToRemove != nullptr)
{
jassert (lastDeviceTypeConfigs.size() == availableDeviceTypes.size());
auto index = availableDeviceTypes.indexOf (deviceTypeToRemove);
if (auto removed = std::unique_ptr<AudioIODeviceType> (availableDeviceTypes.removeAndReturn (index)))
{
removed->removeListener (callbackHandler.get());
lastDeviceTypeConfigs.remove (index, true);
}
}
}

View file

@ -391,10 +391,11 @@ public:
*/
virtual void createAudioDeviceTypes (OwnedArray<AudioIODeviceType>& types);
/** Adds a new device type to the list of types.
The manager will take ownership of the object that is passed-in.
*/
void addAudioDeviceType (AudioIODeviceType* newDeviceType);
/** Adds a new device type to the list of types. */
void addAudioDeviceType (std::unique_ptr<AudioIODeviceType> newDeviceType);
/** Removes a previously added device type from the manager. */
void removeAudioDeviceType (AudioIODeviceType* deviceTypeToRemove);
//==============================================================================
/** Plays a beep through the current audio device.