furnace icon indicating copy to clipboard operation
furnace copied to clipboard

ADSR/LFO macro modes (besides the current sequence one)

Open tildearrow opened this issue 3 years ago • 2 comments
trafficstars

Add ADSR macro mode in where the values are generated by an ADSR envelope with the following parameters:

  • Level
  • Delay
  • Attack
  • Hold
  • Decay
  • Sustain
  • Hold 2
  • Decay 2
  • Release

Add LFO macro mode with the following parameters:

  • Bottom level
  • Top level
  • Speed
  • Waveform (sine, triangle, saw or square)
  • Loop
  • Global?

tildearrow avatar Jun 06 '22 19:06 tildearrow

A suggestion: maybe make the LFO and ADSR modes non-mutually-exclusive.

Something like two simultaneous option categories:

ADSR
* Delay
* Level
* Attack
* Hold
* Decay
* Sustain
* Hold 2
* Decay 2
* Release
* Inverted (((another idea; see explanation below)))
* Loop (((to get closer to a general-purpose SSG-EG)))

LFO
* Delay (((delays on an LFO are also useful)))
* Bottom level
* Top level
* Speed
* Waveform (sine, triangle, saw or square)
* Loop
* Global? (((I don't know what this means so I can't comment on it)))

The math for combining the ADSR and the LFO is probably doing something similar to multiplying/averaging the values but don't quote me on that

An explanation for Inverted (boolean): if it's true, the envelope works "upside down", with the attack going from top to bottom, and the decay going from bottom to top.

image

And, just for confirmation: when processing this into macro values, the amount of values per second is the same as the tick rate, right? It would be cool to add, on the top of the graphical representation of the LFO/Envelope (white), a series of rectangles (yellow) to show the values that will be set, depending on the tick rate (the higher the tick rate, the thinner the rectangles).

image

yohannd1 avatar Aug 13 '22 23:08 yohannd1

And another idea (and I don't even think it's very good but I still wanna write about it, sorry not sorry): instead of having multiple holds and decays on the envelope, structure it as a series of points, kinda like a feature ZynAddSubFX has (I don't know how that would look in furnace's UI, though).

For example: this insane graph here could be represented as something like (with the letters being the height of each point):

image

Initial Value: A

[Point 1]
Time from last: 0.2s
Value: B

[Point 2]
Time from last: 1s
Value: C

[Point 3]
Time from last: 0.2s
Value: D

[Point 4]
Time from last: 0.2s
Value: E
Loop back to: Point 3

[Point 5] (((since it's after the loop point it's assumed to go here after release)))
Value: [Release]
Time to end: 0.5s

By the way: the "loop back to" could also maybe be Point 4 itself and, in that case, it'd be a sustain point.

This isn't a very valuable idea, since complex envelopes are pretty rare and combining an LFO with an Envelope already helps a lot with that, but here's it in case it ever becomes relevant.

yohannd1 avatar Aug 14 '22 00:08 yohannd1

Implemented.

Will not implement ADSR+LFO yet, taking possibility of hardware playback into consideration (don't want to add too much complexity since one mult is slow already).

tildearrow avatar Oct 07 '22 21:10 tildearrow