37 if (source != newSource)
39 auto* oldSource = source;
41 if (newSource !=
nullptr && bufferSize > 0 && sampleRate > 0)
49 if (oldSource !=
nullptr)
60 int totalNumInputChannels,
61 float** outputChannelData,
62 int totalNumOutputChannels,
66 jassert (sampleRate > 0 && bufferSize > 0);
70 if (source !=
nullptr)
72 int numActiveChans = 0, numInputs = 0, numOutputs = 0;
76 for (
int i = 0; i < totalNumInputChannels; ++i)
78 if (inputChannelData[i] !=
nullptr)
80 inputChans [numInputs++] = inputChannelData[i];
81 if (numInputs >= numElementsInArray (inputChans))
86 for (
int i = 0; i < totalNumOutputChannels; ++i)
88 if (outputChannelData[i] !=
nullptr)
90 outputChans [numOutputs++] = outputChannelData[i];
91 if (numOutputs >= numElementsInArray (outputChans))
96 if (numInputs > numOutputs)
101 tempBuffer.
setSize (numInputs - numOutputs, numSamples,
104 for (
int i = 0; i < numOutputs; ++i)
106 channels[numActiveChans] = outputChans[i];
107 memcpy (channels[numActiveChans], inputChans[i], (
size_t) numSamples *
sizeof (
float));
111 for (
int i = numOutputs; i < numInputs; ++i)
113 channels[numActiveChans] = tempBuffer.
getWritePointer (i - numOutputs);
114 memcpy (channels[numActiveChans], inputChans[i], (
size_t) numSamples *
sizeof (
float));
120 for (
int i = 0; i < numInputs; ++i)
122 channels[numActiveChans] = outputChans[i];
123 memcpy (channels[numActiveChans], inputChans[i], (
size_t) numSamples *
sizeof (
float));
127 for (
int i = numInputs; i < numOutputs; ++i)
129 channels[numActiveChans] = outputChans[i];
130 zeromem (channels[numActiveChans], (
size_t) numSamples *
sizeof (
float));
147 for (
int i = 0; i < totalNumOutputChannels; ++i)
148 if (outputChannelData[i] !=
nullptr)
149 zeromem (outputChannelData[i], (
size_t) numSamples *
sizeof (
float));
161 sampleRate = newSampleRate;
162 bufferSize = newBufferSize;
163 zeromem (channels,
sizeof (channels));
165 if (source !=
nullptr)
171 if (source !=
nullptr)
void audioDeviceAboutToStart(AudioIODevice *device) override
virtual void getNextAudioBlock(const AudioSourceChannelInfo &bufferToFill)=0
virtual void releaseResources()=0
void setSize(int newNumChannels, int newNumSamples, bool keepExistingContent=false, bool clearExtraSpace=false, bool avoidReallocating=false)
void setSource(AudioSource *newSource)
void audioDeviceIOCallback(const float **inputChannelData, int totalNumInputChannels, float **outputChannelData, int totalNumOutputChannels, int numSamples) override
int getNumChannels() const noexcept
void setGain(float newGain) noexcept
virtual void prepareToPlay(int samplesPerBlockExpected, double sampleRate)=0
virtual double getCurrentSampleRate()=0
virtual int getCurrentBufferSizeSamples()=0
void applyGainRamp(int channel, int startSample, int numSamples, Type startGain, Type endGain) noexcept
AudioBuffer< float > * buffer
Type * getWritePointer(int channelNumber) noexcept
void audioDeviceStopped() override
void prepareToPlay(double sampleRate, int blockSize)
~AudioSourcePlayer() override