Slightly late to the party. Nice feature proposal!

It's somewhat related to my own desire to one day make LFOs and envelopes much more general. Something like: You make an envelope, and then "attach it" to controls, possibly even multiple controls. This is how most commercial synths do it, and it's quite nice to be able to have one curve control multiple things. Makes it really easy to change it and hear the difference across all the controls simultaneously. This would not fundamentally change what you can do with Yoshimi, it would just make it a lot easier, especially for certain tasks involving multiple controls.

But alas, I have deemed this too ambitious for the time I have to spend on Yoshimi these days, at least for now. I wanted to mention it however, since it relates to your suggestion, and it could perhaps influence some decisions.

Other than that I don't really have anything to add to the core technical discussion. I think you guys covered it already.

But I have one "side question": Does you suggestion relate at all to crossfades between kit items? We had a discussion there a while back about how the cross fades are happening by fading velocity up and down for the two crossfaded parts, but it should really be fading the volume. I've been meaning to look at fixing this, but it's not entirely trivial and I got a bit side tracked from that project.

--
Kristian

On 01.01.2025 22:29, ichthyo wrote:

Hello Yoshimi-devs,

First things first: a happy new year to everybody!
<sarcasm>
 Some people around the world are engaged with determination to make this new  year a big mess.... so let's hope matters go south in mostly unexpected ways!
</sarcasm>

After we've somehow managed to close out the last round of internal changes
(seemingly without major problems up to now...), I was wondering if it's the
time to pick up on one topic which I have on my mind since quite some time.

On 31.12.24 19:44, Will Godfrey wrote:
I'd like to be able to make another minor point release in February,
so it would be good to have a significant development to hang it on.
Ideas, most welcome!


My most important wish is to let us proceed in a considerate way.
The time and capacity I'm able to put in *is limited*, for sure, because I have to focus on my main project (Lumiera). So, while I'm proposing something bold, I'd like to ask to break it down into several small increments, and -- above all -- to avoid those "*big bang*" changes. I mean, if that's possible at all, since we've all made the experience that often matters can escalate to a much wider
scope in the Yoshimi code base, than was initially expected. :-/


In a nutshell: I'd like to pick up that topic of *balancing the presence* of an
instrument or the closely related global parameter links like *crossfades*.

See the threads "Note-Weight-Adjustment" and "Crossfade" from last summer.


My proposal is to proceed in several steps:

(1) have a up-front discussion about *what* we want to achieve;
     take the necessary time to define the scope of where we're headed.

(2) do a technical prototype to bring in the foundational changes into the
    engine. Make performance measurements to see if our guesses were right.
     Recall from the mentioned discussion that we assume that it should be
    possible to bring the base extension into the engine without a measurable
     impact on performance (at least in disabled state)

(3) then merge that change into mainline, test it and bring it into widespread     use in some minor release, so that we have to option to back out or search
     for a better approach before anyone starts to use the new feature in
     creative ways.

(4) only then build the GUI part and gradually make the feature visible for
     the users. Consider how it relates to existing features like Crossfade
     and Velocity sensing. Mark it as "experimental" first and try to get
     feedback from the users.



Following this outline, we'd be currently engaged into (1), and we'd be able
to change course and reshape the direction up into point (3), in case it
turns out to be to much for us to handle....


To make the first step: here is how I see this possible bold new feature:

* The point of operation is in the "note on" code. In each Part, right now
  there is basically a similar piece of code, which takes the raw parameters,   does some fusion on them and computes the parameter values effective for this   note, i.e. the effective frequency, gain, filter cut-off or vowel position.

* the core idea is to allow for a /very small number/ of additional control
   parameters to be transported into this code. Right now it is only driven
   by the note (midi) value, the velocity and the volume. So the idea is
   to extend that and allow -- say maybe two or three additional controller
   values as input. Which ones these are would be a matter of instrument?
  patch? or global instance? (do be discussed!) setup. The prominent example   would be a channel pressure, or a per-key aftertouch. This immediately shows   that we'd have to re-evaluate this piece of code while playing a note under
   some circumstances; and we should carefully plan how to do that.

* and then, at the heart of the feature would be *optional cross-links*
   between those parameters. For performance reasons, these would obviously
   be implemented as Look-up-Table (LUT), with a suitable interpolation.
   These would implement a *function* of the input parameter and produce
   a *factor* applied to some output parameter. Lots of fine points to
   consider here, but overall doable and within our abilities and close
   to what the existing code already does right now.
  - Volume could be adjusted as function of MIDI note (my primary use case!)
   - Volume could be adjusted as function of channel pressure
   - Frequency could be adjusted as function of velocity
   - Cut-off could be adjusted as function of aftertouch
   ...

* Needless to say: this is a very advanced feature and will just confuse
  most users. Yet people familiar with the fine points of sound design will   understand it intuitively, because, in a way, its obvious you want to do that.

* So there would be a full-control GUI in each Part. It's hidden behind a button   and will bring up a matrix of knobs or graph widgets. For example, the input
   could be in the columns (note, volume, velocity, ctrl-1, ctrl-2). And in
  the rows, there would be the target parameters (frequency, gain, filter-freq,   filter-q, what else...?). Each "point" in that correlation matrix would either   be disabled, or a simple knob similar to velocity-sensing, or a graph widget
   with a bezier-curve, similar to the gamma or colour channels in Gimp.
   (Yes, I know, its messy to build such a beast, but it is well doable)

* we have already some controls which effectively so something similar. They   can be seamlessly translated into the new machinery. Notably, the velocity-
   sensing is already a function of volume based on velocity or filter gain
   based on velocity. I'd leave the familiar controls in place and just map
   them down into the new feature.
  Likewise, all existing cross-fades can seamlessly be translated into such
   a cross-correlation of parameters. Because they are just a function of
   velocity (or volume!) based on MIDI note value. But then an advanced
   user could go in and adjust and tweak the transition curve. Yikes!!

What I'm proposing is bold, for sure. But IMHO it is not too bold: it is a
generalisation of what we're doing already in some aspects; it would make
handling those cases more symmetric. And what's more important, I expect
that such a feature will unleash a lot of further possibilities present
in Yoshimi's system of layered parts, because it's a generic component
we'll build once and can then integrate into each part.

Its also a lot of work, but -- as I've said in the introduction -- the
proposal would be to proceed in small steps. Moreover, such a feature is
certainly a bold bet that the zombie apocalypse would not happen right now
and we'll all might have some further time left to build interesting stuff.

-- Hermann





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


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

Reply via email to