Yes, I think you might be right there. Thanks, I’ll take a look and see what’s going on…

I was working with version 1.45 of JUCE and investigated the problem there. In that version, the buffer assignation suffered of a bug: you were allocating temporary input and output buffers according to their index in audio driver, but the processing was happening for indexes between 0 and numChannels.

Thus, for example, if one chose to process channels 0 and 3 from a 4-input soundcard, actual temporary buffers were allocated for indexes 0 and 3, but since the number of input channels was 2, only indexes 0 (correctly) and 1 (not correctly!) were processed.
The same was happening for output channels.

The solution was (and you correctly implemented it in the current tip, as I did in my “local” version of the JUCE 1.45) to allocate temporary buffers not according to their index in the sound driver, but counting from 0 to the number of channels actually used (compare the two different implementations of setTempBufferSize() in juce_mac_CoreAudio.cpp).

Thus, in the loops where you initialize the pointers, you should not use the “driver” index (info.sourceChannelNum, as it was in version 1.45), but the simple 0-based index “i”.

It seems to me, you correctly changed this in the tip when initializing output temporary buffers, but simply forgot to make the same change for the input buffers, leaving intact the code from the 1.45.