VST vs Rewire
-
- KVRian
- 522 posts since 19 Jul, 2007 from Netherlands
Hi
I'm looking into the different plugin standards to investigate the possibility to write one unifying "uber" API.
I know about VST and Rewire and I was wondering if there is any information how these two compare; both on features and code level. Are there any other plugin standards that are major players?
-or do you know if there already is such an uber API?
I'm looking into the different plugin standards to investigate the possibility to write one unifying "uber" API.
I know about VST and Rewire and I was wondering if there is any information how these two compare; both on features and code level. Are there any other plugin standards that are major players?
-or do you know if there already is such an uber API?
-
- KVRian
- 646 posts since 18 Feb, 2006 from California
Huh??? ReWire is not a plugin standard. It's an IPC protocol with very specific features. You haven't heard of Audio Units (mac proprietary) and RTAS (digidesign) plugin standards? VST, Audio Units, and RTAS are the major players, I guess. JUCE is an API that wraps all of them. It's your "uper API". There's also Infinity, but I don't know if it does RTAS.
- KVRAF
- 9600 posts since 17 Sep, 2002 from Gothenburg Sweden
To do RTAS plugins you need to be approved by Digidesign first. So i doubt either of JUCE or Infinty does RTAS. Even if they have templates for it you still need Digidesigns approval for the actual SDK.
- KVRAF
- 3614 posts since 28 Jan, 2006 from Phoenix, AZ
Please never use ReWire, I've had very bad experiences, it's a very clumsy interface/design. VST is infinitely easier to integrate with a sequencer.
-
- KVRian
- Topic Starter
- 522 posts since 19 Jul, 2007 from Netherlands
"Please never use ReWire, I've had very bad experiences, it's a very clumsy interface/design"
Well, this whole idea started because I think VST also has a very poorly designed SDK. I sketched some new structure for the main functionality for VST and then realized my new design could function as an abstraction layer and perhaps could incorporate other standards as well.
I will have a look at JUCE.
Thanx everyone.
Well, this whole idea started because I think VST also has a very poorly designed SDK. I sketched some new structure for the main functionality for VST and then realized my new design could function as an abstraction layer and perhaps could incorporate other standards as well.
I will have a look at JUCE.
Thanx everyone.
- KVRAF
- 12615 posts since 7 Dec, 2004
just write your code so that it exposes a generic interface which you can wrap with vst, au, dxi or whatever other interface you want. that way you wont need to write a complex "uber wrapper" since it'll only take a couple of minutes to re-wrap your generic interface in something else.
think of it like creating a whole factory with robots in order to change your coat automatically vs. just taking off your coat and putting on another. you're not going to do it a million times a day, so you dont need a bunch of robots.
think of it like creating a whole factory with robots in order to change your coat automatically vs. just taking off your coat and putting on another. you're not going to do it a million times a day, so you dont need a bunch of robots.
-
Jeff McClintock Jeff McClintock https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=56398
- KVRist
- 433 posts since 30 Jan, 2005 from New Zealand
GMPI was such an attempt. Not completed (officially), but the requirements docs make good reading as far as describing the theoretical state-of-the-art.obiwanjacobi wrote:Hi
I'm looking into the different plugin standards to investigate the possibility to write one unifying "uber" API. Are there any other plugin standards that are major players?
-or do you know if there already is such an uber API?
http://en.wikipedia.org/wiki/GMPI
Jeff
-
- KVRian
- Topic Starter
- 522 posts since 19 Jul, 2007 from Netherlands
I just looked at the JUCE documentation at http://www.rawmaterialsoftware.com/juce/api/index.html
"Can anybody point me to the classes that has to do with the Snap-in technologies? I've found some Midi related classes (but no MidiOutput?) but I couldn't see the plug-in related classes..."
Never mind. I've found it. AudioFilterBase, right?
And by the looks of it has the same crappy design as the original VST SDK.
[sigh]
"Can anybody point me to the classes that has to do with the Snap-in technologies? I've found some Midi related classes (but no MidiOutput?) but I couldn't see the plug-in related classes..."
Never mind. I've found it. AudioFilterBase, right?
And by the looks of it has the same crappy design as the original VST SDK.
[sigh]
-
- KVRian
- Topic Starter
- 522 posts since 19 Jul, 2007 from Netherlands
-
- KVRAF
- 7217 posts since 21 Aug, 2004 from Trondheim, Norway
Rewire is a free protocol, but you have to apply for the SDK and your company has to be be licensed by the Propellerheads. I doubt if they will give you a license if your expressed intention is to write an API that gives anyone access to the Rewire protocol.
Rakkervoksen
-
- KVRian
- 791 posts since 8 Mar, 2006 from Australia
Hi Marc,obiwanjacobi wrote:I've published my VST SDK design ideas in a
blog post.
Nice job, though I'm actually in two minds re the message protocol vs interface approaches. For a long time I was a fan of interfaces, but the simplicity of message based protocols has grown on me recently. Both have pros and cons and both have their place.
For a .NET interop for VST I would probably use interfaces too but here's some things to consider:
* it's harder to write a logger/spy/stub+proxy/whatever to sit between a plugin and host with interfaces than it is with message model - particularly as you can just forward unrecognised messages. Its more difficult to forward an unrecognised interface.
* I wouldn't suggest using the existance of an interface as an indication of capability - sometimes the capability of plugin might need to be decided at runtime and depending on language/technology it may not be easy to change from implementing/not implementing an interface at runtime. I'd suggest qualifying the capability with a function on the related interface.
* As an API grows I've tended to notice that interface based APIs seem to get exponentially harder to understand/grasp (take a look at the ActiveScript debugger interfaces for example, or ActiveX controls) - often raising questions like who implements what, what are the dependencies between interfaces etc... similar problems exist with messages but for some reason they never seem to be quite so daunting - the learning curve seems to stay more linear. (if that makes sense)
Otherwise, nice blog and obviously well thought out.
Brad
-
- KVRian
- 791 posts since 8 Mar, 2006 from Australia
Forget to mention - if you're doing .NET interop, have you looked into the C++/CLI/IJW ("It Just Works") stuff in VC 2005? If not I'd thoroughly recommend it. In my day job we spent a bunch of time testing this stuff out and it really did seem to be the best (ie: fastest/simplest) way to interop large API's between managed and unmanaged code.
Brad
Brad
-
- KVRian
- Topic Starter
- 522 posts since 19 Jul, 2007 from Netherlands
Thanks for your suggestions and comments, Brad. You bring some good points to the table.
* Yes, I intent to use C++/CLI to make the jump to .NET. It is clearly the best approach available at this time (although I have to brush up on my C++ again!).
* The Interop framework itself will be part C++ and part C#. Because I'm planning on interfacing with the core VST interface and not the SDK classes, I think the amount of C++ code will be minimal.
* I think its pretty easy to allow a chain-of-responsibility extension point at the low-level message exchange points (both for the host and the plugin).
* Dynamic feature support with interfaces will be hard indeed (unless you go for a QueryInterface type of solution). Any tips/hints on what features might typically be implemented dynamically?
* Evolving interface vs messages? My goal is to provide a structured framework for implementing (managed) VST plugins. If I would keep it down to message level I would only have a unmanaged-managed transition and I would have no chance to remedy the imperfections of the VST interface itself. Of course you have the always-returning interface versioning problem, but I think I will just postfix all interface names with the VST version (for instance for the VST 2.4 version: IVstPlugin24) it was designed for.
Good feedback, thanks!
More please, more!

* Yes, I intent to use C++/CLI to make the jump to .NET. It is clearly the best approach available at this time (although I have to brush up on my C++ again!).
* The Interop framework itself will be part C++ and part C#. Because I'm planning on interfacing with the core VST interface and not the SDK classes, I think the amount of C++ code will be minimal.
* I think its pretty easy to allow a chain-of-responsibility extension point at the low-level message exchange points (both for the host and the plugin).
* Dynamic feature support with interfaces will be hard indeed (unless you go for a QueryInterface type of solution). Any tips/hints on what features might typically be implemented dynamically?
* Evolving interface vs messages? My goal is to provide a structured framework for implementing (managed) VST plugins. If I would keep it down to message level I would only have a unmanaged-managed transition and I would have no chance to remedy the imperfections of the VST interface itself. Of course you have the always-returning interface versioning problem, but I think I will just postfix all interface names with the VST version (for instance for the VST 2.4 version: IVstPlugin24) it was designed for.
Good feedback, thanks!
More please, more!
-
- KVRian
- 791 posts since 8 Mar, 2006 from Australia
Yep shouldn't be too bad, though you're going to need special handling for each message type to "marshal" strings/pointers correctly.obiwanjacobi wrote:* Yes, I intent to use C++/CLI to make the jump to .NET. It is clearly the best approach available at this time (although I have to brush up on my C++ again!).
* The Interop framework itself will be part C++ and part C#. Because I'm planning on interfacing with the core VST interface and not the SDK classes, I think the amount of C++ code will be minimal.
Two main cases 1) loggers/diagnostic tools that just "re-host" another plugin 2) plugin construction kits eg: when implementing tools such as SynthEdit and SynthMaker you don't really know what the plugin designer is building, yet you wouldn't actually generate different code for different plugins - you'd use a fixed interface implementation that dynamically changes capabilities depending on the designed plugin. If you just allow the final declaration of capability to lie with a method on the interface its not a problem.* Dynamic feature support with interfaces will be hard indeed (unless you go for a QueryInterface type of solution). Any tips/hints on what features might typically be implemented dynamically?
Wouldn't .NETs assembly versioning and side by side assemblies resolve all this for you. So you'd have an interop dll for VST 2.4 and when a new VST spec comes out, just build a new interop dll with the interfaces updated?* Evolving interface vs messages? My goal is to provide a structured framework for implementing (managed) VST plugins. If I would keep it down to message level I would only have a unmanaged-managed transition and I would have no chance to remedy the imperfections of the VST interface itself. Of course you have the always-returning interface versioning problem, but I think I will just postfix all interface names with the VST version (for instance for the VST 2.4 version: IVstPlugin24) it was designed for.
No problem. Sounds like a fun project.Good feedback, thanks!
More please, more!
