/* ============================================================================== This file is part of the JUCE library. Copyright (c) 2020 - Raw Material Software Limited JUCE is an open source library subject to commercial or open-source licensing. By using JUCE, you agree to the terms of both the JUCE 6 End-User License Agreement and JUCE Privacy Policy (both effective as of the 16th June 2020). End User License Agreement: www.juce.com/juce-6-licence Privacy Policy: www.juce.com/juce-privacy-policy Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses). JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED. ============================================================================== */ namespace juce { AudioAppComponent::AudioAppComponent() : deviceManager (defaultDeviceManager), usingCustomDeviceManager (false) { } AudioAppComponent::AudioAppComponent (AudioDeviceManager& adm) : deviceManager (adm), usingCustomDeviceManager (true) { } AudioAppComponent::~AudioAppComponent() { // If you hit this then your derived class must call shutdown audio in // destructor! jassert (audioSourcePlayer.getCurrentSource() == nullptr); } void AudioAppComponent::setAudioChannels (int numInputChannels, int numOutputChannels, const XmlElement* const xml) { String audioError; if (usingCustomDeviceManager && xml == nullptr) { auto setup = deviceManager.getAudioDeviceSetup(); 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); audioSourcePlayer.setSource (this); } void AudioAppComponent::shutdownAudio() { audioSourcePlayer.setSource (nullptr); deviceManager.removeAudioCallback (&audioSourcePlayer); // other audio callbacks may still be using the device if (! usingCustomDeviceManager) deviceManager.closeAudioDevice(); } } // namespace juce