New ADSR envelope widget

Hi @zynthianers!

I just pushed into the vangelis branch (development) a nice feature that i wanted to add from a long time ago:

I hope it’s the first of many graphical improvements to the zynthian-ui. I will try keeping the graphical austerity while adding some visual feedback where it’s more needed.

It’s working nicely in several synth engines. I tested with these:

  • OBXd
  • Helm
  • JX10
  • NoizeMaker
  • Triceratops

Currently this widget has some limitations:

  • We need all the envelope parameters ordered and grouped in one or several consecutive control screens. They can’t be mixed or unsorted. It would be confusing to manage.

  • We only support ADSR, not AHDSR, etc. although this will be improved very soon

For these reasons, it’s not working with these engines, among others:

  • Mimid
  • synthv1
  • etc.

We hope to improve it very soon!

Regards.

15 Likes

Hi :slight_smile:

This new graphical feature is definitely elegant and informative, from the viewpoint of the sound synthesis model. I agree that, overall, the graphical layout of the Zynthian interface should keep on leaning towards a certain ascetic minimalism, so it will be interesting to see how the implementation of further visual feedback will be possibly able to represent other parameters of the synthesiser engines. What we can already see is just brilliant!

It’ll all be good until we get a Korg Poly 800 or CZ1000 emulator. :sweat_smile:

3 Likes

I just played with the envelope in JX10 and man, this is brillant! :heart: It greatly improves the sound design process. It becomes very clear and evident how the sound is being processed. I absolutely love it!

One observation: the release time quite intuitively increases with clockwise rotation of the encoder but this results in the start of release curve moving to the left which kinda feels less intuitive. Of course the implementation seems right - just something to consider and be aware of when using it.

@jofemodo, you are a legend.

[Edit] An enhancement may be to allow dragging of nodes with touch/mouse. I just looked at it on my VNC viewer and immediatly tried to grab a node with the mouse. Even brilliant ideas have room for improvement!!! :wink:

3 Likes

English suck-up dog!!! :rofl:
You are the legend here, mate! I’m just a young student wanting to learn from all of you!!

Love!

4 Likes

Ohhh! This is a perfect task for a touch-interface lover!! :rofl:

2 Likes

Feature request is captured.

I should have learned a long time ago that suggesting enhancements invariably leads to more work for the one who made the suggestion… :speak_no_evil:

3 Likes

Stop complaining. Tea breaks over and back on your head…

Well, this is normal compared to other similar implementations of ADSR interfaces - perhaps a number could be displayed also, which shows the approximate overall time, but this is depending from the implementation of the lv2 code.

Regards

… and yes … you are legend. :wink:

Touch (and mouse) drag now implemented in Vangelis branch. :sunglasses:

5 Likes

Yeahhhh! It works like a charm @riban!
You will have more fun for implementing the mimid’s AHDSSR touch control :sweat_smile:

Cheers!

1 Like

Would it be useful to place a small copy of these ADSR displays in the Preset list page…?
Next to each preset name…?

2 Likes

No! I don’t see that adding an image of just one of many control parameters makes any sense. And we don’t currently have a way to implement it.

I had a look at the engines enabled by default and observed the following envelope curves:

  • amsynth: ADSR
  • Calf Monosynth/Wavetable: ADSFR
  • Dexed: Rate 1-4, Level 1-4
  • Helm: ADSR
  • MDA DX10: ADR
  • MDA JX10: ADSR
  • MiMi-d: AHDSFR
  • MiniOPL3: ADSR
  • Noize Mak3r: ADSR
  • Obxd: ADSR
  • Odin2: ADSRLoop
  • padthv1: ADSR
  • String Machine: AHDSR
  • synthv1: ADSR
  • Tricerotops: ADSR
  • Vex: ADSR
  • LinuxSampler: AR
  • Sfizz: AR
  • LinuxSampler: ADSR
  • Fluidsynth: AR
  • MDA ePiano: DR
  • SO-kl5 Piano Synth: AS
  • Calf Organ: ADSR
  • Fabla: ADSR

I am working on a modification to the envelope gui which uses parameters in the ttl (or hardcoded into the non-LV2 engines). Each envelope control has one of the LV2 EnvelopeControls Port Group elements:

  • delay
  • attack
  • hold
  • decay
  • sustain
  • fade*
  • release

*fade is not actually in the LV2 spec but is used by a couple of Calf synths and I think behaves similar to the MiMi-d sustain time parameter so I will lobby to have it added to the official spec,

The new code does not use heuristics to detect envelope. All envelope controls must be tagged with one of the EnvelopeControls PG elements and all must be in the same Port Group to act on the same processing module, e.g. Filter Envelope.

This development is in the touch_envelope dev branch and should work for any engines that have these tags in their ttl. Currently only zynsampler is changed in the repo and I have tested against obxd and MiMi-d (dev version from github) using these ttl files:

MiMi-d_dsp.ttl (54.0 KB)
Obxd.ttl (30.9 KB)

With the right config most (hopefully all) envelopes with one or more DAHDSFR parameters should work. I am yet to look at the more generic / flexible envelopes used by Dexed which has four stages of rate+level.

I removed the heuristic detection because it is likely to fail but it does mean that we need to curate and modify the ttl files. I will look to see if this can be done in an extensible way…

5 Likes

Really cool! :heart_eyes:

Per operator? You mean 1-6?

There is also a global Pitch Rate/Level for a voice…

1 Like

There are 4 rate+level envelope stages for each operator. You can use these to create traditional ADSR curves or more complex curves. The Casio VZ-1 (and I think CZ range) had 8 of these so you could create complex envelopes, placing the release trigger at any stage so you could have the signal swell a few times, even after releasing the key. I don’t know where the release trigger is in Dexed.

[Edit] It seems the last (4th) rate is triggered by key release.

1 Like

I have make a feature request against the LV2 project to add “fade” to the envelope options. I also asked whether we could describe arbitrary quantity of level+time stages. I haven’t considered the latter yet.

I’m probably amongst the greatest geniusses of all time. I updated to vangelis, but there is no ADSR envelope thing popping up anywhere. Please tell me. How does this work?

  • Add an engine that has an envelope, e.g. MiMi-d.
  • Go to the control view, e.g. short SELECT from mixer view
  • Select a page with envelope parameters, e.g. DOWN ARROW to “Filter Env#1”

You should see the envelope widget.

no magic here.
There also is no Filter Env#1, but just a Filter Env parameter page. Do I have to add a development branch or something? I am in Vangelis.

I am not as confident as you about this! Does your webconf show this?
image
Did you update and restart?

[Edit] Actually, I may have given you a poor example. This only works on a dev version of MiMi-d which is not yet in Vangelis. Try with amsynth.