Full-duplex without input information

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.


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;


I also tried the AudioRecordingDemo, but I cannot get audio input working.

After reviewing the forum I have found solutions to similar problems for previous versions of JUCE in which the use of the microphone could be enabled. In my case this option is not available so I have not yet figured out how to unblock this situation.

Any kind of guidance would be of great help.

Problem solved. The app had to be authorized to access the microphone using “Privacy - Microphone Usage Description” from the Information Property List