JUCE-7.0.12-0-g4f43011b96 JUCE-7.0.12-0-g4f43011b96
JUCE — C++ application framework with suport for VST, VST3, LV2 audio plug-ins

« « « Anklang Documentation
Loading...
Searching...
No Matches
juce_AudioAppComponent.cpp
Go to the documentation of this file.
1 /*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
29AudioAppComponent::AudioAppComponent()
30 : deviceManager (defaultDeviceManager),
31 usingCustomDeviceManager (false)
32{
33}
34
35AudioAppComponent::AudioAppComponent (AudioDeviceManager& adm)
36 : deviceManager (adm),
37 usingCustomDeviceManager (true)
38{
39}
40
41AudioAppComponent::~AudioAppComponent()
42{
43 // If you hit this then your derived class must call shutdown audio in
44 // destructor!
45 jassert (audioSourcePlayer.getCurrentSource() == nullptr);
46}
47
48void AudioAppComponent::setAudioChannels (int numInputChannels, int numOutputChannels, const XmlElement* const xml)
49{
50 String audioError;
51
52 if (usingCustomDeviceManager && xml == nullptr)
53 {
54 auto setup = deviceManager.getAudioDeviceSetup();
55
56 if (setup.inputChannels.countNumberOfSetBits() != numInputChannels
57 || setup.outputChannels.countNumberOfSetBits() != numOutputChannels)
58 {
59 setup.inputChannels.clear();
60 setup.outputChannels.clear();
61
62 setup.inputChannels.setRange (0, numInputChannels, true);
63 setup.outputChannels.setRange (0, numOutputChannels, true);
64
65 audioError = deviceManager.setAudioDeviceSetup (setup, false);
66 }
67 }
68 else
69 {
70 audioError = deviceManager.initialise (numInputChannels, numOutputChannels, xml, true);
71 }
72
73 jassert (audioError.isEmpty());
74
75 deviceManager.addAudioCallback (&audioSourcePlayer);
76 audioSourcePlayer.setSource (this);
77}
78
79void AudioAppComponent::shutdownAudio()
80{
81 audioSourcePlayer.setSource (nullptr);
82 deviceManager.removeAudioCallback (&audioSourcePlayer);
83
84 // other audio callbacks may still be using the device
85 if (! usingCustomDeviceManager)
86 deviceManager.closeAudioDevice();
87}
88
89} // namespace juce
The JUCE String class!
Definition juce_String.h:53
bool isEmpty() const noexcept
Returns true if the string contains no characters.
void clear() noexcept
Resets this string to be empty.
Used to build a tree of elements representing an XML document.
#define jassert(expression)
Platform-independent assertion macro.
JUCE Namespace.
Type unalignedPointerCast(void *ptr) noexcept
Casts a pointer to another type via void*, which suppresses the cast-align warning which sometimes ar...
Definition juce_Memory.h:88