On 10.03.2022 18:28, Ichthyostega wrote:
On Wed, 9 Mar 2022 01:13:14 +0100
Ichthyostega <p...@ichthyostega.de> wrote:

  - rebuilding the wavetable can change pretty much any parameters, including     number of tables, tablesize and base frequencies. Thus it is not possible
    just to calculate both interpolations in parallel.

Am 09.03.22 um 17:48 schrieb Will Godfrey:
I was under the impression that only four controls
actually change the wavetable size:
    base
    smp/oct
    no. oct
    Sample Size

It seems to me, unlike all the other controls, these only affect the *quality* of reproduction, not the actual sound type.

Blocking those would basically mean not to perform a crossfade when those
layout parameters change. That would allow to optimise the computation of
the crossfade itself, but only if we intermingle the crossfade with the
inner loop computation, so that the computation of the step fraction
can be shared. I am not sure if this doesn't even make the non-crossfade
calculation more expensive, since it then would have to check in every
inner loop instance, if there are two or four samples to mix.

This makes me think into another direction: Maybe just the innards of
the PADnote are too cohesive? We could think of the wavetable interpolation
(which executes the innermost loop) as a distinct component. Then the note
would usually have one such wavetable interpolator, and for the duration
of the crossfade, we'd just switch that to a crossfading interpolator,
which delegates to two basic interpolators. This way, we would solve
that problem within PADnote, while basically retaining the computation
path for the standard case (with the sole change of invoking the
interpolation for one buffer content through a virtual function)

Although I'm not deeply involved in this thought process, I can just mention that Yoshimi is using several distinct variants of the wavetable interpolators in ADnote, depending on whether modulation is involved, what kind it is, and whether the voice is imported into another voice. So doing it that way fits neatly into the existing pattern. It's chosen by conditionals and direct calling though, not virtual functions, but the principle is the same.

--
Kristian


_______________________________________________
Yoshimi-devel mailing list
Yoshimi-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/yoshimi-devel

Reply via email to