Hello World,
I am developing a project that must work in full-duplex mode. In summary, a float vector is prepared to write over the output buffers and the information from the input buffers is expected to be read over the input float vector. Data vectors have a limited length that is pre-selected at runtime.
I have defined a class (class myAudioEngine : public AudioIODeviceCallback) for data input and output management (myAudioEngine.h and myAudioEngine.cpp).
Basically two float vectors defined in pMainComponent are used to handle the input and output data (pLocalOutSignal->psignal and pLocalInSignal->psignal). The output signal will always be the same for all selected output channels (numOutputChannels), while the input signal must be stored independently for each input channel (numInputChannels).
For some reason no information is being recorded in the input, while the output reproduces the information from pLocalOutSignal->psignal without any problem. I don’t know what I may be overlooking.
Any type of recommendation is welcome. Thank you very much in advance.
Greetings
void myAudioEngine::audioDeviceIOCallbackWithContext(const float* const* inputChannelData, int numInputChannels, float* const* outputChannelData, int numOutputChannels, int numSamples, const AudioIODeviceCallbackContext& context)
{
if (isAudioProcessingEnabled)
{
pSignalFloat pLocalInSignal = pAEMainInSignal;
pSignalFloat pLocalOutSignal = pAEMainOutSignal;
for (int outputChannel = 0; outputChannel < numOutputChannels; ++outputChannel){
if (pAEMainOutSignal != nullptr) {
for (int sample = 0; sample < numSamples; sample++)
outputChannelData[outputChannel][sample] = pLocalOutSignal->psignal[gBufferCount * gBufferLength + sample];
}
}
for (int inputChannel = 0; inputChannel < numInputChannels; ++inputChannel){
if (pLocalInSignal != nullptr) {
for (int sample = 0; sample < numSamples; sample++)
pLocalInSignal->psignal[gBufferCount * gBufferLength + sample] = inputChannelData[inputChannel][sample];
pLocalInSignal = pLocalInSignal->link;
}
}
gBufferCount = gBufferCount + 1;
if (gBufferCount == gNBuffers){
isAudioProcessingEnabled = false;
mainComponentRef->stopRunning();
}
}
}