What I'm saying is basically that it's not a
goal in itself to create
 our own "standard" here. If we can get along with the GMPI group and
 something useful gets out of it, things will be better for everyone.
 What this would mean to XAP as such is uncertain, of course - but I
 think we will have *very* little influence on what will become The
 Audio Plugin API, unless we participate in the GMPI effort. 
True enough, though if we finish first, we have a grounds to push XAP as a
good starting point :)
   1) none - host
can autogenerate from hints 
 This part is mostly done, right? (Well, we don't have a real host yet,
 so we obviously don't have an implementation.) 
 
yep
   2) layout -
plugin provides XML or something suggesting it's UI,
 host draws it 
 Basically like 1), but with some extra info, right? 
 
yep - an XML schema even exists.
  > 3) graphics+layout - plugin provides XML or
something as well as
 > graphics - host is responsible for animating according to plugin
 > spec 
  Well, unless we can just whip something almost that
good up in no
 time, from existing, highly portable and suitably licensed stuff.
 Maybe if libvstgui is released under the LGPL, and we hack a binding
 for some nice and easy to learn language...? 
That's more or less what I was thinking - not too fancy, just something to
blit simple bitmaps - a background + a 16-state knob overlay.
   4) total -
plugin provides binary UI code (possibly bytecode
 or lib calls) 
 Byte code? Pretty close to what I suggested for 3. And the same
 issues, of course. The native code version is probably simpler, but
 obviously, not nearly as flexible. 
 
libVSTGui was what I was trying to say without saying it :)
  And I still agree. There won't be as many hosts as
plugins, and we can
 hack a simplified host SDK, if people think our requirements on the  
Agreed again
  Right, but that solves only part of the problem. You
have to be able
 to deal with "weird characters" in plain strings as well, including
 paths and file names. 
ok, I'll buy that
  That is, if anyone's in doubt, I'm back at my
old position; we should
 at least have an adding version. 
I'm there, too
   I'm
leaning more towards the idea that if a plugin can do in-place
 processing, it may be asked to, but it should have the ability to
 specifiy for itself. 
 Yeah. Just a hint that can be ignored, if "in-place broken" is
 assumed. 
 
yes - in-place-safe is a hint.  Assume broken by default.
  If you think of it this way: SET gets an extra
argument 'duration'
 that you would "normally" set to 0. *If* you use another value, the
 event effectively becomes a RAMP event.
 Or as I've previously expressed it; define RAMP with a zero duration
 to be a SET operation. Slight special case, but if you actually try
 Now, whether we should call that single event RAMP or SET is open. I
 would suggest CONTROL instead, as that's less specific and thus, less
 missleading. Besides, it has the advantage of appearing to be related
 to controls - which is very true. :-) 
Good enough for me.
   I rather like
normalized values.  I've been contemplating this
 problem, myself.  I don't like having to call normalize functions
 for every translation, though.  Can the translation overhead be
 minimized? 
 Consider this:
        * Controls that are meant to be connected generally
          have the same units and the same ranges. 
 
What about generic controller plugins?  A generic envelope controller or
LFO.  Normalized values just work (assuming we can define normalized - it's
not easy :)  Or we can just say that things like that output normalized
data, and have to be passed through some sort of scalar.
   I actually
have this in my own notes for XAP - an optional way for
 the plugin to save 'extra stuff' with a preset or document. 
 How about combining a few "old" features here:
        * An output must initialize the connected input
          as soon as audio processing continues. 
 
  Now, give one or more row data control outputs a
suitable type hint,
 such as "INSTANCE_STATE", so hosts can just connect them, call
 process() for 0 frames and store the data somewhere. No extra calls  
hmm, so to save a preset you'd have to connect the INTERNAL_CRAP control to
something and process(0)?  I don't know.  Just saying
plug->save_extra_state(raw_data *r); seems cleaner, to me.  I am also
contemplating saying that controls need to be readable, just because it irks
me that they're not.
Tim