Believe you’ve introduced a bug in 1.46 when you changed the way audio channel data is handled.
Internal to CoreAudioInternal you are creating tempInputBuffers which are ultimately passed to AudioIODeviceCallback. In CoreAudioInternal::audioCallback you are accessing tempInputBuffers by source channel number.
This results in bad pointer access if the sourceChannelNum exceeds the number of open channels. For example, if only channel 2 is open the number of valid tempInputBuffers is 1 yet in the above code you attempt to write to the second buffer, which is NULL.
The fix is to reference tempInputBuffers by i.
I’ve not checked ASIO and DirectSound audio device code yet but they may be bugged as well.