OpenShot Audio Library | OpenShotAudio
1.0.0
Toggle main menu visibility
Loading...
Searching...
No Matches
juce_MixerAudioSource.cpp
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
The code included in this file is provided under the terms of the ISC license
11
http://www.isc.org/downloads/software-support-policy/isc-license. Permission
12
To use, copy, modify, and/or distribute this software for any purpose with or
13
without fee is hereby granted provided that the above copyright notice and
14
this permission notice appear in all copies.
15
16
JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
17
EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
18
DISCLAIMED.
19
20
==============================================================================
21
*/
22
23
namespace
juce
24
{
25
26
MixerAudioSource::MixerAudioSource
()
27
: currentSampleRate (0.0), bufferSizeExpected (0)
28
{
29
}
30
31
MixerAudioSource::~MixerAudioSource
()
32
{
33
removeAllInputs
();
34
}
35
36
//==============================================================================
37
void
MixerAudioSource::addInputSource
(
AudioSource
* input,
const
bool
deleteWhenRemoved)
38
{
39
if
(input !=
nullptr
&& ! inputs.contains (input))
40
{
41
double
localRate;
42
int
localBufferSize;
43
44
{
45
const
ScopedLock sl (lock);
46
localRate = currentSampleRate;
47
localBufferSize = bufferSizeExpected;
48
}
49
50
if
(localRate > 0.0)
51
input->
prepareToPlay
(localBufferSize, localRate);
52
53
const
ScopedLock sl (lock);
54
55
inputsToDelete.setBit (inputs.size(), deleteWhenRemoved);
56
inputs.add (input);
57
}
58
}
59
60
void
MixerAudioSource::removeInputSource
(
AudioSource
*
const
input)
61
{
62
if
(input !=
nullptr
)
63
{
64
std::unique_ptr<AudioSource> toDelete;
65
66
{
67
const
ScopedLock sl (lock);
68
const
int
index = inputs.indexOf (input);
69
70
if
(index < 0)
71
return
;
72
73
if
(inputsToDelete [index])
74
toDelete.reset (input);
75
76
inputsToDelete.shiftBits (-1, index);
77
inputs.remove (index);
78
}
79
80
input->
releaseResources
();
81
}
82
}
83
84
void
MixerAudioSource::removeAllInputs
()
85
{
86
OwnedArray<AudioSource>
toDelete;
87
88
{
89
const
ScopedLock sl (lock);
90
91
for
(
int
i = inputs.size(); --i >= 0;)
92
if
(inputsToDelete[i])
93
toDelete.
add
(inputs.getUnchecked (i));
94
95
inputs.clear();
96
}
97
98
for
(
int
i = toDelete.
size
(); --i >= 0;)
99
toDelete.
getUnchecked
(i)->releaseResources();
100
}
101
102
void
MixerAudioSource::prepareToPlay
(
int
samplesPerBlockExpected,
double
sampleRate)
103
{
104
tempBuffer.setSize (2, samplesPerBlockExpected);
105
106
const
ScopedLock sl (lock);
107
108
currentSampleRate = sampleRate;
109
bufferSizeExpected = samplesPerBlockExpected;
110
111
for
(
int
i = inputs.size(); --i >= 0;)
112
inputs.getUnchecked (i)->prepareToPlay (samplesPerBlockExpected, sampleRate);
113
}
114
115
void
MixerAudioSource::releaseResources
()
116
{
117
const
ScopedLock sl (lock);
118
119
for
(
int
i = inputs.size(); --i >= 0;)
120
inputs.getUnchecked (i)->releaseResources();
121
122
tempBuffer.setSize (2, 0);
123
124
currentSampleRate = 0;
125
bufferSizeExpected = 0;
126
}
127
128
void
MixerAudioSource::getNextAudioBlock
(
const
AudioSourceChannelInfo
& info)
129
{
130
const
ScopedLock sl (lock);
131
132
if
(inputs.size() > 0)
133
{
134
inputs.getUnchecked (0)->getNextAudioBlock (info);
135
136
if
(inputs.size() > 1)
137
{
138
tempBuffer.setSize (jmax (1, info.
buffer
->
getNumChannels
()),
139
info.
buffer
->
getNumSamples
());
140
141
AudioSourceChannelInfo
info2 (&tempBuffer, 0, info.
numSamples
);
142
143
for
(
int
i = 1; i < inputs.size(); ++i)
144
{
145
inputs.getUnchecked (i)->getNextAudioBlock (info2);
146
147
for
(
int
chan = 0; chan < info.
buffer
->
getNumChannels
(); ++chan)
148
info.
buffer
->
addFrom
(chan, info.
startSample
, tempBuffer, chan, 0, info.
numSamples
);
149
}
150
}
151
}
152
else
153
{
154
info.
clearActiveBufferRegion
();
155
}
156
}
157
158
}
// namespace juce
juce::AudioBuffer::getNumChannels
int getNumChannels() const noexcept
Definition
juce_AudioSampleBuffer.h:236
juce::AudioBuffer::getNumSamples
int getNumSamples() const noexcept
Definition
juce_AudioSampleBuffer.h:242
juce::AudioBuffer::addFrom
void addFrom(int destChannel, int destStartSample, const AudioBuffer &source, int sourceChannel, int sourceStartSample, int numSamples, Type gainToApplyToSource=Type(1)) noexcept
Definition
juce_AudioSampleBuffer.h:784
juce::AudioSource::releaseResources
virtual void releaseResources()=0
juce::AudioSource::AudioSource
AudioSource()=default
juce::AudioSource::prepareToPlay
virtual void prepareToPlay(int samplesPerBlockExpected, double sampleRate)=0
juce::MixerAudioSource::removeInputSource
void removeInputSource(AudioSource *input)
Definition
juce_MixerAudioSource.cpp:60
juce::MixerAudioSource::getNextAudioBlock
void getNextAudioBlock(const AudioSourceChannelInfo &) override
Definition
juce_MixerAudioSource.cpp:128
juce::MixerAudioSource::MixerAudioSource
MixerAudioSource()
Definition
juce_MixerAudioSource.cpp:26
juce::MixerAudioSource::removeAllInputs
void removeAllInputs()
Definition
juce_MixerAudioSource.cpp:84
juce::MixerAudioSource::addInputSource
void addInputSource(AudioSource *newInput, bool deleteWhenRemoved)
Definition
juce_MixerAudioSource.cpp:37
juce::MixerAudioSource::prepareToPlay
void prepareToPlay(int samplesPerBlockExpected, double sampleRate) override
Definition
juce_MixerAudioSource.cpp:102
juce::MixerAudioSource::~MixerAudioSource
~MixerAudioSource() override
Definition
juce_MixerAudioSource.cpp:31
juce::MixerAudioSource::releaseResources
void releaseResources() override
Definition
juce_MixerAudioSource.cpp:115
juce::OwnedArray
Definition
juce_OwnedArray.h:50
juce::OwnedArray::size
int size() const noexcept
Definition
juce_OwnedArray.h:129
juce::OwnedArray::getUnchecked
ObjectClass * getUnchecked(int index) const noexcept
Definition
juce_OwnedArray.h:159
juce::OwnedArray::add
ObjectClass * add(ObjectClass *newObject)
Definition
juce_OwnedArray.h:293
juce::AudioSourceChannelInfo
Definition
juce_AudioSource.h:33
juce::AudioSourceChannelInfo::numSamples
int numSamples
Definition
juce_AudioSource.h:81
juce::AudioSourceChannelInfo::clearActiveBufferRegion
void clearActiveBufferRegion() const
Definition
juce_AudioSource.h:84
juce::AudioSourceChannelInfo::buffer
AudioBuffer< float > * buffer
Definition
juce_AudioSource.h:73
juce::AudioSourceChannelInfo::startSample
int startSample
Definition
juce_AudioSource.h:77
libopenshot-audio
JuceLibraryCode
modules
juce_audio_basics
sources
juce_MixerAudioSource.cpp
Generated by
1.18.0