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

Try to re-use the current selected audio device if sharing an AudioDeviceManager with an AudioAppComponent

This commit is contained in:
hogliux 2018-03-13 11:09:01 +00:00
parent d8c06ab657
commit 8bb56fcad8
2 changed files with 33 additions and 4 deletions

View file

@ -28,12 +28,14 @@ namespace juce
{
AudioAppComponent::AudioAppComponent()
: deviceManager (defaultDeviceManager)
: deviceManager (defaultDeviceManager),
usingCustomDeviceManager (false)
{
}
AudioAppComponent::AudioAppComponent (AudioDeviceManager& adm)
: deviceManager (adm)
: deviceManager (adm),
usingCustomDeviceManager (true)
{
}
@ -46,7 +48,30 @@ AudioAppComponent::~AudioAppComponent()
void AudioAppComponent::setAudioChannels (int numInputChannels, int numOutputChannels, const XmlElement* const xml)
{
String audioError = deviceManager.initialise (numInputChannels, numOutputChannels, xml, true);
String audioError;
if (usingCustomDeviceManager && xml == nullptr)
{
AudioDeviceManager::AudioDeviceSetup setup;
deviceManager.getAudioDeviceSetup (setup);
if (setup.inputChannels.countNumberOfSetBits() != numInputChannels
|| setup.outputChannels.countNumberOfSetBits() != numOutputChannels)
{
setup.inputChannels.clear();
setup.outputChannels.clear();
setup.inputChannels.setRange (0, numInputChannels, true);
setup.outputChannels.setRange (0, numOutputChannels, true);
audioError = deviceManager.setAudioDeviceSetup (setup, false);
}
}
else
{
audioError = deviceManager.initialise (numInputChannels, numOutputChannels, xml, true);
}
jassert (audioError.isEmpty());
deviceManager.addAudioCallback (&audioSourcePlayer);
@ -57,7 +82,10 @@ void AudioAppComponent::shutdownAudio()
{
audioSourcePlayer.setSource (nullptr);
deviceManager.removeAudioCallback (&audioSourcePlayer);
deviceManager.closeAudioDevice();
// other audio callbacks may still be using the device
if (! usingCustomDeviceManager)
deviceManager.closeAudioDevice();
}
} // namespace juce

View file

@ -126,6 +126,7 @@ private:
//=============================================================================
AudioDeviceManager defaultDeviceManager;
AudioSourcePlayer audioSourcePlayer;
bool usingCustomDeviceManager;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioAppComponent)
};