I'm trying to host Kairatune plug-in (available for free here http://futucraft.com/2013/kairatune-1-2-is-out/) within a Juce app, and it's definitely failing. I'm using Juce 2.1.8 and I also tried using the "audio plugin host" demo code without success.
The thing is very strange: it seems that this plug-in is somehow breaking the audio processing. When it is loaded, testing the audio from the AudioDeviceSelectorComponent doesn't generate sound anymore.
Nevertheless this plug-in is working perfectly within other hosts (I tried several DAW and SaviHost).
It would be great is someone here could take a look at this, I'm always wondering if my soft is involved (even the "audio plugin host" demo failed).
If you're using OSX, I've occasionally seen things "break the audio device" by producing vastly out-of-range samples, which makes the audio driver panic and go silent (I think there's probably an auto gain control that kicks in). So something that might be worth trying would be to hack in a quick sanity check on the audio buffers produced to limit their values to -1.0 -> 1.0, to see if that sorts it out.
Repear (Windows and OSX) does this as well, it auto-mutes audio tracks with out-of-range sample values.
Yes, and in tracktion we have a sanity-check on the output buffers to avoid this, but I didn't bother doing anything like that in the demo host.
Thanks for the hint! But it does not change anything... The output buffers are always filled with -1.0 values in any case, even when I feed the plug-in with MIDI notes.
It seems like the plug-in doesn't receive the MIDI events. However I've traced the MIDI messages until the dispatcher call (effProcessEvents) in juce_VSTPluginFormat.cpp, so I'm sure the plug-in receives them.
This is the first plug-in I have with this behavior, and the weird thing is it works with other hosts I tried...
Some plugin do not copy MIDI events but keep the pointer if I remember correctly.
Check that the events are still valid when processing audio.
Thanks Olivier, but... yes they are...
I've contacted the developer of this plug-in to check if he's doing something special. He just told me that he begins the process with an RAII FPU state setter FPUState fpuState(FPUState::ROUND_NEAREST);
The class is by mystran from: http://www.kvraudio.com/forum/viewtopic.php?t=312228
But I must admit that it does not help me much :-D