60 int totalNumInputChannels,
61 float*
const* outputChannelData,
62 int totalNumOutputChannels,
67 jassert (sampleRate > 0 && bufferSize > 0);
69 const ScopedLock sl (readLock);
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));
139 source->getNextAudioBlock (info);
148 for (
int i = 0; i < totalNumOutputChannels; ++i)
149 if (outputChannelData[i] !=
nullptr)
150 zeromem (outputChannelData[i], (
size_t) numSamples *
sizeof (
float));
void audioDeviceIOCallbackWithContext(const float *const *inputChannelData, int totalNumInputChannels, float *const *outputChannelData, int totalNumOutputChannels, int numSamples, const AudioIODeviceCallbackContext &context) override