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*
const* outputChannelData,
62 int totalNumOutputChannels,
67 jassert (sampleRate > 0 && bufferSize > 0);
71 if (source !=
nullptr)
73 int numActiveChans = 0, numInputs = 0, numOutputs = 0;
77 for (
int i = 0; i < totalNumInputChannels; ++i)
79 if (inputChannelData[i] !=
nullptr)
81 inputChans [numInputs++] = inputChannelData[i];
82 if (numInputs >= numElementsInArray (inputChans))
87 for (
int i = 0; i < totalNumOutputChannels; ++i)
89 if (outputChannelData[i] !=
nullptr)
91 outputChans [numOutputs++] = outputChannelData[i];
92 if (numOutputs >= numElementsInArray (outputChans))
97 if (numInputs > numOutputs)
102 tempBuffer.
setSize (numInputs - numOutputs, numSamples,
105 for (
int i = 0; i < numOutputs; ++i)
107 channels[numActiveChans] = outputChans[i];
108 memcpy (channels[numActiveChans], inputChans[i], (
size_t) numSamples *
sizeof (
float));
112 for (
int i = numOutputs; i < numInputs; ++i)
114 channels[numActiveChans] = tempBuffer.
getWritePointer (i - numOutputs);
115 memcpy (channels[numActiveChans], inputChans[i], (
size_t) numSamples *
sizeof (
float));
121 for (
int i = 0; i < numInputs; ++i)
123 channels[numActiveChans] = outputChans[i];
124 memcpy (channels[numActiveChans], inputChans[i], (
size_t) numSamples *
sizeof (
float));
128 for (
int i = numInputs; i < numOutputs; ++i)
130 channels[numActiveChans] = outputChans[i];
131 zeromem (channels[numActiveChans], (
size_t) numSamples *
sizeof (
float));
148 for (
int i = 0; i < totalNumOutputChannels; ++i)
149 if (outputChannelData[i] !=
nullptr)
150 zeromem (outputChannelData[i], (
size_t) numSamples *
sizeof (
float));
162 sampleRate = newSampleRate;
163 bufferSize = newBufferSize;
164 zeromem (channels,
sizeof (channels));
166 if (source !=
nullptr)
172 if (source !=
nullptr)
void setSize(int newNumChannels, int newNumSamples, bool keepExistingContent=false, bool clearExtraSpace=false, bool avoidReallocating=false)
Type * getWritePointer(int channelNumber) noexcept
int getNumChannels() const noexcept
void applyGainRamp(int channel, int startSample, int numSamples, Type startGain, Type endGain) noexcept
virtual double getCurrentSampleRate()=0
virtual int getCurrentBufferSizeSamples()=0
void setGain(float newGain) noexcept
void setSource(AudioSource *newSource)
void audioDeviceIOCallbackWithContext(const float *const *inputChannelData, int totalNumInputChannels, float *const *outputChannelData, int totalNumOutputChannels, int numSamples, const AudioIODeviceCallbackContext &context) override
void audioDeviceStopped() override
~AudioSourcePlayer() override
void prepareToPlay(double sampleRate, int blockSize)
void audioDeviceAboutToStart(AudioIODevice *device) override
virtual void releaseResources()=0
virtual void prepareToPlay(int samplesPerBlockExpected, double sampleRate)=0
virtual void getNextAudioBlock(const AudioSourceChannelInfo &bufferToFill)=0
AudioBuffer< float > * buffer