static int callbackByLambda(const void *inputBuffer,
                            void *outputBuffer,
                            unsigned long framesPerBuffer,
                            const PaStreamCallbackTimeInfo* timeInfo,
                            PaStreamCallbackFlags statusFlags,
                            void *userData)
{
    AudioDevice* audioDevice = (AudioDevice*)userData;
    float** output = (float**)outputBuffer;
    float** input = (float**)inputBuffer;
    
    audioDevice->getLambda()(input, audioDevice->getNumInputs() ,output, audioDevice->getNumOutputs() ,framesPerBuffer);
    
    return 0;
}
static OSStatus inputRenderCallback(void* inRefCon,
                                    AudioUnitRenderActionFlags *ioActionFlags,
                                    const AudioTimeStamp *inTimeStamp,
                                    UInt32 inBusNumber,
                                    UInt32 inNumberFrames,
                                    AudioBufferList *ioData)
{
    OSStatus result = noErr;
    
    AudioDevice* thisDevice = (AudioDevice*)inRefCon;
    
    SInt16* left = (SInt16*) ioData->mBuffers[0].mData;
    SInt16* right = (SInt16*) ioData->mBuffers[1].mData;
    
    thisDevice->getLambda()(thisDevice->buffer, thisDevice->buffer, inNumberFrames);
    
    floatToInt16(thisDevice->buffer[0], left, inNumberFrames);
    floatToInt16(thisDevice->buffer[1], right, inNumberFrames);
    
    return result;
}