So, each automatable model has a "step size" property, which is used for
determining the accuracy of the knobs. A step size of 0.1 causes the
knob values to move in 0.1 increments, a step size of 1 causes the knob
to only move between integer values, and so on.

This is of course good for user convenience, because it's easier to
adjust to a specific value when the knob values are constrained to
reasonable steps. There's just a problem with this: it also affects
automations and controllers, which is particularly bad for volume controls.

With volume controls, we don't even benefit from sample-exactness,
because the volume will still be moving in those 0.1% or 1.0% steps,
which causes very noticeable quantization artifacts and noise in the
resulting signal. So even if we make the volume control sample-exact, it
will still have quantization caused by the step size of the model.

You can see this easily in fast volume slides - automate a volume knob
and add an automation pattern that goes from 0 to 100% in one bar. The
crackles you hear are caused by quantization, the volume not going up
smoothly but instead in steps. Part of the problem is no
sample-exactness in playback, but part is because the step size prevents
gradual change so that even with sample-exactness the problem still
exists. Solving this would make peak/LFO controllers much more useful
and flexible, as you could connect them to volume knobs on instrument
tracks without quality loss.

So I've come up with some ideas on solving this dilemma.

1. Interpolate all volume controls (and others where similar issues
exist) - so that volume transitions would always be smooth and not
sudden: when the volume is changed, it slides from oldvalue to newvalue
in the time of one period. The problem is, the behaviour and quality of
the controls will still be dependent on period size ("buffer size" in
settings). Regardless, this could still be a good idea to do because we
don't always get sample-exact data, and this way we could smooth the
changes in automations as well.

2. Make the step size only affect the knobs, and possibly the automation
grid, but allow the actual values of the model to also go between steps.
Maybe make this behaviour configurable per-model, add a flag or
something that determines how step size is used. A boolean member could
be named "strictStepSize" or something, and it determines whether the
step size applies only on the knob or will it be "strictly" applied to
the values of the model.

3. Add a second "step size" property, so that there's two of them: one
that gets used by the widget (knob), and one that actually determines
the internal step size of the model.

Sidenote: For sample-exactness, I think the model should also offer a
second way of fetching sample-exact values - not just per-frame, which
is wasteful in CPU cycles, but a way to fetch an entire period of values
at once as an array or QVector.  This way we could implement
sample-exact controls more effectively and also have it as a playback
option, not just in export.

------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos.
Get unparalleled scalability from the best Selenium testing platform available
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
LMMS-devel mailing list
LMMS-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lmms-devel

Reply via email to