Audition CS5.5 only enables plug-in for maximum number of channels


I'm developing a VST plug-in that supports both mono and stereo configurations.  In Audition CS6 and Sound Forge 11, no problem.  Plug-in is enabled for both mono and stereo audio files.  However in Audition CS5.5, it is only enabled for stereo audio files (disabled for mono files).

I am using the Introjucer and verified my "Plugin Channel Configurations" is set to "{1, 1}, {2, 2}".  Thinking I may have some other problem going on, I switched over to building the demo plug-in included with Juce just to get a sanity check.  It exhibits the same problem with CS5.5 - I did not modify the example.  Just build it "straight out of the box".

If I change the channel configurations to "{1, 1}" - it is only enabled for mono files (obviously so).

If I change the channel configurations to "{2, 2}, {1, 1}" - no difference, still only enabled for stereo files.

When attaching a debugger to Audition, it appears that the default getSpeakerArrangement function is being called in the audioeffectx.h file - which returns 0 for the arrangements.  To override this, I would need to modify juce_VST_Wrapper - which seems unwise.

Anybody else run into this with Audition 5.5?  Any ideas what might be going on here?



I have confirmed that Adobe Audition CS5.5 does not choose to call setSpeakerArrangement first as is optionally specified in the VST 2.4 documentation, but instead calls getSpeakerArrangement first.  Because getSpeakerArrangement is not overridden in the juce_VST_wrapper class, the default in audioeffectx.h is called which sets null pointers for both input and output speaker arrangements and returns false.

This appears to cause CS5.5 to never call setSpeakerArrangement, and thus defaults back to the maximum number of channels.

My thought at this point is to modify juce_VST_wrapper to override the getSpeakerArrangement method, which of course I'm hesitant to do.

Any thoughts on this?



I have changed juce_VST_wrapper class to contain member variables for input and output VstSpeakerArrangements.  They are initialized in the constructor based on the JucePlugin_MaxNumInputChannels and JucePlugin_MaxNumOutputChannels configuration macros.  These members are returned whenever getSpeakerArrangement is called and are modified to match any valid channel configuration that is passed into setSpeakerArrangement.

This seems to make CS5.5 happy and I've also tested it in CS6, Sony Sound Forge Pro 11 and Acoustica.

I'm curious to know what Jules and the community here thinks about this approach and if you think it might have any side effects I'm not realizing.

I also realize that my juce_VST_wrapper class is going to be obliterated every time I run the Introjucer - which is why I was hesitant to do this in the first place.  Is there another way or is this just a fix that needs to be included?