Would like to support EUcon


#1

I’ve just ordered a Euphonix Artist Mix controller with an eye toward supporting the EUCon protocol in my plugs. I still have a lot to learn, but in driving around Juce it appears that some things are missing.

The most obvious problem (please someone correct me if it’s not a problem) is that getParameterText isn’t called at all from the AU wrapper or the AAX wrapper. Although it is called from VST and RTAS, it’s not called correctly. Both of those plugin formats provide a size parameter. That size is not passed to getParameterText. What actually happens is that the RTAS wrapper arbitrarily crops the string at the requested size. The VST wrapper crops it to a size of 24. That value really needs to be passed in through Juce so that we can make informed decisions on how to format the display.

It seems to me that EUcCon is important. There’s hardly a DAW that doesn’t support it on Mac or Windows. I’m aware that it requires rewriting of my parameter display functions, but I’m more than willing to do it. Perhaps a compile-time constant could be added to Juce to extend getParameterText to include the size parameter. And perhaps the call could be added to the AAX and AU wrappers. That would provide protection to developers with no interest in EUCon.

I’ve gotta think that there’s somebody out there who’s been dealing with EUCon, and I’d certainly appreciate any comments.


#2

I recall cleaning up the VST method (do a search for “getTextForOpcode”); there’s no “cropping” of strings involved there. Also, why provide a size; the string should be null terminated, right?


#3

No, Eucon is a whole other thing. It’s a protocol that supports a fair number of control devices from full-sized Euphonix consoles down to lap-sized extension fader boxes. Each device has a different display size (spec’ed sizes are 4, 5, 6, 7, 8 and 31 characters). You really need to format the value differently, depending on the size of the display. Truncation doesn’t do it.


#4

Just poked around the web for a bit and see what you mean by “cropping”. Totally forgot about the displays doing that…

I’m as curious about this library as I am confused; where does cropping occur from within the JUCE VST wrapper? Sounds like it’s up to the host to do the cropping on its end, to me…

I searched through the VST spec, and it doesn’t anything about hosts having to provide the number of characters to display per string. Here’s effGetParamDisplay - the opcode used in getParameterText.


#5

[quote=“jrlanglois”]Just poked around the web for a bit and see what you mean by “cropping”. Totally forgot about the displays doing that…

I’m as curious about this library as I am confused; where does cropping occur from within the JUCE VST wrapper? Sounds like it’s up to the host to do the cropping on its end, to me…

I searched through the VST spec, and it doesn’t anything about hosts having to provide the number of characters to display per string. Here’s effGetParamDisplay - the opcode used in getParameterText.[/quote]

In the RTAS wrapper, there’s this:

void GetValueString (char* valueString, int maxLength, long value) const { juceFilter->getParameterText (index).copyToUTF8 (valueString, (size_t) maxLength); }

And in the VST wrapper, there’s this:

void getParameterDisplay (VstInt32 index, char* text) { if (filter != nullptr) { jassert (isPositiveAndBelow (index, filter->getNumParameters())); filter->getParameterText (index).copyToUTF8 (text, 24); // length should technically be kVstMaxParamStrLen, which is 8, but hosts will normally allow a bit more. } }
You’re correct in that VST doesn’t appear to pass in a size. RTAS does (and so does AAX, although it doesn’t seem to be in the wrapper right now). There are quite a few VST DAWs (Cubase is a prominent one) that claim to support EUCon. Whether there’s an extension to VST 2.x or whether this is part of VST3, I don’t know. Guess I’ll have to try and track that down. On the AU side, Logic is one of the big ones that claims EUCon support, so I assume there’s a similar parameter in the AudioUnits API as well. Again, it doesn’t appear to be called in the AU wrapper.

AAX and RTAS are far and away the most important formats using this, with AU coming up next and VST bringing up the rear. I don’t think there can be any assumption of the host doing the cropping. As a matter of fact, there is discussion in the Avid documentation about the best ways to approach it.


#6

It didn’t take much digging. For Cubase to use EUcon, a VST->AU or VST->RTAS adapter wrapper must be used. The RTAS wrapper’s been around for a long time, but of course it’s 32-bit (and FX-expansion isn’t getting much love from Avid). So I’d guess that an AU wrapper is the best way to go. That would still mean that the Juce AU wrapper would need to support the character count, as would AAX.


#7

Hm… interesting! Sucks that to get a copy to take a look at the SDK I have to register and apply…


#8

Should be relevant : http://www.rawmaterialsoftware.com/viewtopic.php?f=8&t=10710 – See the changes in the latest patch (RTAS). You might want to provide 2-values booleans for EUCON. Also, mind the number of steps, 0xffffffff or even 0x7fffffff is rarely supported by hardware.


#9

I’ve been looking into it and I have patches to both RTAS and AAX wrappers that show initial promise. It doesn’t appear that the VST 2.x API supports it at all. I don’t think AU is really difficult, but every time I look into that code I get weirded out.

Once I’ve got things working with several real Euphonix controllers, I’ll go over it with Jules and see what we can do. The wrapper stuff and internal Juce stuff looks very minimal, and I think I’ve got a way that allows current stuff to be migrated whenever the developer wants to do it (not being forced into it). The real challenge is to the developer, who must come up with meaningful parameter strings for variable-width character displays.

It will probably take a couple of months. Not really that much work. Just a lot of testing by users with different desks.


#10

I’ve just sent some working EuCon code to Jules. With some luck, he’ll like what he sees and will add it to the code base. I’ve actually got product in the field now that supports a number of controllers. There’s one more (at least one more) thing that I need to do. In ProTools, you can click on a control (slider, button, etc) while holding modifier keys. This will bring up appropriate parameter-related windows on ProTools. It’s easy enough to snag the clicks on the parameter controllers, but this brings up the need to do something that I don’t see anywhere in Juce.

That need is the ability to communicate back to the DAW’s GUI. Everything that I can find in Juce is essentially one-way communication: the DAW tells the plugin to do something. Now we have the case in which the plugin needs to drive the DAW. As far as I can see, that path doesn’t exist (let me hasten to say I understand the reasons why). Because there may be many instantiations of a plug, there’s no place to have any sort of context pointer in the wrapper. So it looks to me like I need to add a field to the plugin editor class in which it can store some sort of reference to the DAW’s context (properly speaking, it’s not the context of the DAW. It’s the context of the AAX object that is the plugin’s GUI). This introduces a dependency that I’m sure Jules would find hideous. It’s not necessarily a thing of beauty to me either, given the number of DAWs in the world.

But I’m trying to solve a particular case in ProTools, which uses only AAX and RTAS. Because no other DAWs use (or are allowed to use) those formats, the effect of such a dependency is limited. It appears that with sufficient caution and appropriate caveats that I can pull it off. The place at which it must happen is the point at which the plugin editor is created. This may be something that Jules would never want to put into the main body of Juce. But dang it, PT11 is pretty nifty.

I’m throwing this notice out just in case someone is aware of a callback path that I’ve missed. Or perhaps this is such a foolish venture that I should head back toward land.

[size=150][color=#FF0000]Edit: Well son-of-a-gun! It works![/color][/size]


#11

I did not understand everything you wrote. But I also added the ctrl-alt-cmd-clic-on-a-controller parameter automation menu to the AAX wrapper, is that also what you already did?


#12

Yep. Wonder how similar our approaches were. I’ve got that working in addition to variable sized parameter names and values and XML page tables.


#13

Can someone provide info on how they added the ctrl-alt-cmd click and ctrl-cmd click on the controller parameters - facing the same issue myself.  Thanks!


#14

Got it- just had to pass a pointer for the AAX_IViewContainer to my plug-in editor - from there easy to make my own slider class that calls AAX_IViewContainer's handleMouseDown() when clicked


#15

If it didn't make it into Juce proper, would you consider making it a module please?

 

Bruce