RTAS client doesn't need an AsyncUpdater


#1

I've posted this to Jules several years ago in my updated wrapper code that supported multiple input and output configs, but it never made it through, so I thought I would start a bunch of single topic threads to highlight each addition I've made so I can contribute it to the community. Ok, first up the RTAS wrapper doesn't need an AsyncUpdater hack like the current wrapper, inside EffectInit there as always been all the info you need:

    void EffectInit()
    {
        sampleRate = GetSampleRate();
        jassert (sampleRate > 0);
        blockSizeMax = CEffectProcessRTAS::GetMaximumRTASQuantum();
        jassert (blockSizeMax > 0);
        ...
        // you can now allocate buffers and call
        juceFilter->prepareToPlay (sampleRate, blockSizeMax);
    }

#2

Also strings in RTAS land (probably AAX as well) should be 32 characters long max, and have newlines sepearing between multiple strings, with ecah subsequent string a shorter version of the initial string so it could possibly be used on control surfaces with limited character display

        void DefineManufacturerNamesAndID(const char *name, OSType manufacturerID);
        /*!
         *  \brief CALL: Defines the names of the overall plug-in, and the version number.
         * 
         *  The developer can use this call within their Group constructor to define the global name of the plug-in.
         *  This name is distinct from the individual names of each Type.  A version number should also be
         *  specified.
         *
         *    \param name Format: \a "Spork Tools II\nSporkTools2\nST2".
         *    \param versionNum The plug-in's version number.
         */    
        void DefinePlugInNamesAndVersion(const char *name, UInt32 versionNum);
        /*!
         *    \brief CALL: Defines specific properties of the entire plug-in --  for all Effect Types.
         *
         *    The developer can use this call from within their Group constructor to define characteristics of the global plug-in.
         *    By default, these two gestalts are currently the two most reasonable to declared at the Group level:
         *    \li \a pluginGestalt_SupportsDeckChange Allows RTAS and TDM Types to be automatically swapped by DAE.
         *    \sa CEffectType::DefineRelationID().
         *    
         *    \li \a pluginGestalt_IsCacheable Allows the plug-in to be cached for faster DAE loading.
         *
         *    If you are adding other gestalts at the Group level, make sure it makes sense!
         */

So createRTASName should be more along the lines of:

    static String createRTASName()
    {
        return String (JucePlugin_Name).substring (0, 32) + "\n"
                    + String (JucePlugin_NameShort8).substring (0, 8) + "\n"
                    + String (JucePlugin_NameShort4).substring (0, 4);
    }


#3

Ah, good call about not needing the async updater, I didn't know that it was possible to get that info. I've updated that now - would appreciate any RTAS people letting me know whether it's working ok for them.