Or do we just
normalize 'generic' outputs?
Well, what is a "generic output", really? Looks like just another unit
+ range combo to me, and all it means is it's *supposed* to map to
all sorts of inputs. Problem is that it's still not obvious how do
actually get it right.
A generic output is a plugin which wants to emit control data, but it
doesn't know what it is connected to - might be pitchbend, might be
oscillator shape, might be pan. Generic outputs should emit normalized data
0.0-1.0. To connect it to anything useful, you need to scale it by the
targets true range.
It seems more obvious to me, though, that controls DO need to do bounds
checking for their inputs, or the host needs to do snoop-and-fixup for every
control.
So the way I
see saving the state of a plugin:
For each control
save snooped control data to output (maybe XML)
endfor
if (plug->get_extra_state)
d = plug->get_extra_state()
save d as if it were a raw control
endif
Well, that eliminates the need for the in/out pair, which *is* a
special case after all.
right, we only need to 'read' data we didn't write.
However, how do you actually transfer the raw data
through that call?
It's just not about a function call, but also about the data
transferred. We'll need an RT safe solution for the controls. What to
do here? Just assume that it's not RT safe? (Which means you can't
save states without taking plugins out of the net, or requiring that
they're thread safe WRT this call...)
I'd assume this is NOT RT safe. Don't save a preset while your track is
running :)
Tim