> > I'm questioning whether > > having a simpler query based system may be easier. I don't like the idea > > that you have to instantiate to query, though. > > Many plug-in standards require instanciation before fetching > properties. PTAF must be able to make good wrappers for existing > plug-ins, industry requires it.
Yeah. Here is an open question: Should the wrapped plugin be a control at all? David mentioned once the difference between 'Controls' and 'Parameters'. I don't like having different control types that due basically the same thing. BUT (you knew that was coming): the wrapped plugin is kind of a parameter, more than a control. Changing the parameter can change the ENTIRE metadata of the plugin. Maybe we should formalize that? > Anyway I would like to minimize the number of functions. > Functions are handy when the calling conventions > of both parts are compatible. If the language you use > doesn't support this convention natively, all functions > have to be wrapped, which is a real pain. If you have to wrap into different languages, you have to wrap enums, too. There is no way to reduce the total number of things wrapped. > More, there are still issues with existing plug-ins, reporting > wrongly if they support some opcode or not (talk to this issue > to Plogue people :). Bugs are bugs, whether they are a NULL pointer or a false-positive. > > How about defining buffer alignment as "what works good for whatever > > extensions that are available on this hardware"...? > > Good, but it requires the host to be updated when new hardware > is released. We can add a host property indicating the current > alignment so the plug-in can check it before continuing. I've thought more about it, and the ONLY place I can see buffer alignment coming into the API is that a plugin may request a minimum alignment, and that REALLY seems almost useless. It should perhaps be an option for the user to set in the host, but not part of the plugin API. The plugin can detect the alignment of a buffer by examining the buffer pointer. NO further mention of it is even needed. > > you'll get a lot of arguments about that on this list - linux people tend > > to have a 486 or pentium stashed somewhere. :) > > Professional musicians and studios have recent hardware, at By necessity, not choice. Fatter OS and software requirements drive that. I don't want to make that part of the XAP requirements, if possible. Sometimes we spend too much time prematurely optimizing here. I try to catch that, when I can, though I can be guilty of it, too. > > Right, but MIDI is integers, and the range defines the resolution. > > With floats, why have 2.0 if you can have 1.0...? > > To make 1.0 the middle, default position. > > > ick - if there is a balanced (or even unbalanced) spectrum of values, center > > it at 0, please :) > > No, it makes sense for true bipolar data, but here 0 or close > to 0 values have their meaning for parameters like velocity. > It's not exactly like the volume. ok, so make it 0 to 1.0 with 0.5 the middle - 0-2 is just ick... ;) > > The spec should not dictate ABI, either. The ABI is an articat of the > > platform. If my platform uses 32 registers to pass C function arguments, it > > is already binary imcompatible with your PC :) > > The only way to guarantee real portability through platforms > and programming languages is to describe the API at the byte > level. This include calling convention. IMHO We can assume > that every target system has a stack, and can pass parameters > on it. This is baloney, IMHO. If you want to make plugins that are binary compatible ACROSS PLATFORMS, then this matters. Within a platform, ABI does not change (or, it shouldn't - don't use C++ as an example :) Assume the spec dictates stack-based arguments for functions. Now assume I have a system (it IS happening) where the ABI dictates that up to 128 arguments are stored in registers for functions. If I want to build a XAP host and plugins on this platform I need to specifically add code to them to violate the platform native conventions. The only thing that needs to be byte-level specified is fields whose width matters (integers, flags, etc) and communication protocols. I sure as hell am not dictating that a pointer is 4 or 8 bytes, or that function calls must be NEAR jumps on x86 or any other such thing. Until we have fully-cross platform plugins, we don't need this. At all. > > I don't like having to call normalize functions for every > > translation, though. Can the translation overhead be minimized? > > It's not a big overhead if done efficiently. VST works this > way for years, and people don't complain about this side at > all. Host just needs to store and pass normalized parameter, > so overhead is not here. It makes even things way simpler > because data is alawys [0;1]/float, which wouldn't be the > case with natural or multi-type parameter handling. I'm still on the fence about this. (sorry for the latentcy - real work this week :) Tim