There's a sound made when a tree falls in the forest no matter if anyone is there to hear it.
Take Part 1 (target piano sound you can hear). If you set up the control assignment so that the modwheel is the source and the destination parameter is pitch and you're using a standard unipolar curve with a positive ratio then when the modwheel is rolled all the way "down", there's no pitch offset (the curve output here is 0 since the input controller output/value is 0 and on the far left of the x axis the ramp is at 0 height or curve output).
And if you played piano notes and wiggled the mod wheel - there's no synchronizing device between the modwheel's position and the piano sound or no sound.
If you wanted something to line up a certain way, you would have to take care of that with your modwheel hand. I mean, yeah, if you press a scene button that mutes the Part 1 Piano then moving the modwheel isn't going to change the pitch of silence. If you want some timed based relationship between what's happening at the output of the target Part versus the source envelope-followed Part then you have to handle that with the programming. And the task at hand would be how to shape the source Part's loudness using maybe motion sequence, LFOs, control type arpeggios, AEG, etc. That's on you to shape what the source does so, at the end, the 0-127 envelope follower produces the wanted values over time.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
The envelope follower virtual knobs are "spun" by how loud the Part is that is labeled by the envelope follower (you see Envelope 1 - and that's Part 1's loudness spinning that knob). The louder the Part is, the higher the number gets. Each envelope you can tweak the gain and hysteresis. Hysteresis is a way of smoothing out rapid changes - so if something gets quiet really quickly then louder quickly and there's a lot of hysteresis - then you may not see any change in the value. But with this same high hysteresis and if the Part slowly fades out from loud to soft then the value would go from a high value to a low value.
Ok - I think there is just one point of mystery left for me to understand.
A 'knob' or motion sequence ALWAYS has an output value and does NOT have any 'attack' or 'release' considerations to deal with.
I can understand a 'one-off' like a snare drum hit can sort of be considered as:
1. start from 0 output
2. rise to a value based on the 'attack' time parameter
3. decrease back to 0 based on the 'release' time parameter
But I don't see how that applies if the source sound is NOT a one-off hit but a long lasting violin or bass run of different notes where there is 'noise' and 'volume' that is continuous.
There must be something that triggers a new set of attack/release activity similar to the way a KEY ON triggers a new envelope.
Certainly the one-off stuff can be emulated by sampling the source audio/volume discrete bundles. for example:
1. capture a 25ms period of activity
2. analyze it and use it to alter the current output value and applying the 'attack' and 'release' considerations.
That essentially would create a new 'trigger/evaluation' process every 25ms and is somewhat similar to an arp or sequence tied to the tempo or beat.
The tempo or beat starts a new evaluation.
What starts a new evaluation and applies a new set of attack/release criteria if the follower source NEVER drops to 0 or below a certain threshold?
Must the follower source ALWAYS drop to zero for some period of time in order for the evaluation
to begin anew?
A 'knob' or motion sequence ALWAYS has an output value and does NOT have any 'attack' or 'release' considerations to deal with.
Well, a real physical knob has different rules that are inherent to how the physical world of knobs works. You can't go instantly from 0 to 127 immediately with a knob but you can with an MS Lane (which is a virtual knob for motion sequence). And if your hand is cramped then maybe that will decrease your ability to spin it "accurately" which is kind of like the attack/release tweaking parameters of the envelope follower. Certainly if you put a piece of gooey gum or something on a knob then this could be a lot like the attack/release hysteresis. I mean, we're mixing domains of physical hand-to-knob relationships and sonic-energy(loudness)-to-envelope-follower as the primary driver of the output of each respectively. Each, in their own universe has a slightly different set of other things that may factor in. A knob that's real slippery may be analogous to having high attack/release values for the envelope follower source.
Just to get into MS lanes - they have a ton of things that knobs don't have. But essentially, you're sequencing a set of steps that tell the virtual knob what to do. You do this by using a standard curve or even a user curve to "describe" how the virtual knob will twist and turn over time. MS Lane lets you go between two values and skip the rest which is unique. MS Lanes have a "smoothness" setting that acts similarly to the envelope follower attack/release tweaks. Only it already is one parameter for both directions (rising and falling) whereby the envelope follower lets you tune the rise and fall differently. Again, this is tuning how fast the envelope follower output tracks the raw loudness being followed. Almost lock-step or sluggish.
I can understand a 'one-off' like a snare drum hit can sort of be considered as:
1. start from 0 output
2. rise to a value based on the 'attack' time parameter
3. decrease back to 0 based on the 'release' time parameter
Yes, sounds rise and fall. They get louder and softer depending on lots of things. The sample itself may decay or the AEG may do this or an LFO may do this or motion sequence may do this. The attack in the AEG of the snare drum doesn't have anything (strongly) to do with the "attack" tweaking parameter in the envelope follower. The envelope follower tweaking things are how fast or how tightly coupled the output number is going to be to instantaneous changes in the loudness of the Part being followed.
But I don't see how that applies if the source sound is NOT a one-off hit but a long lasting violin or bass run of different notes where there is 'noise' and 'volume' that is continuous.
Before the bass or before the violin makes any sound - there's silence. Then when there's sound - there's an increase in loudness. That change from silent to not silent is what is being made sluggish or not by the "attack" parameter of the envelope follower. And if the violin starts a note and holds it "forever" at the same volume, then the envelope follower will be some relatively higher number and that same number forever too. And although the start of the sound the envelope follower "saw" a change in the loudness that would apply the "attack" tweak - there would have been no use of the "release" tweak because that would involve the loudness decreasing.
Since I use these primarily as binary signals (on and off) - I usually want the change to be instantaneous so I roll back attack+release tweaks to the lowest values which yields the fastest reaction time to the raw loudness. However, there are reasons why you would want to make either side more sluggish - and you have that power. Again, it's "similar" (but not the same) as the smoothness part of MS Lanes.
And say the violin is super loud at the climax of a piece then still keeps playing but the loudness gets down to a whisper -then the release tweak would come into play and make that reaction more sluggish (or more instantaneous).
There must be something that triggers a new set of attack/release activity similar to the way a KEY ON triggers a new envelope.
For envelope followers there's just loudness. That's it. Loud and soft and in-between. When loudness is increasing, attack (tweak) comes into play. When loudness is decreasing, release (tweak) comes into play. If you're like me then most of the time you try to cancel these out and make the reaction time fast. You can watch your own meters with your own sources (sources that are percussive, or pads, or ...) and see what attack and release do. It's right in front of you. I think there's enough information here and elsewhere to help you put everything together.
Attack and release tweaks don't need any special trigger. It's all about the rate of change of loudness. That doesn't take anything else outside of how loud the Part is over time (the current envelope follower output knob value is the loudness right now-ish).
Must the follower source ALWAYS drop to zero for some period of time in order for the evaluation
to begin anew?
No. There's no threshold. There's rising and falling and staying the same. Staying the same doesn't involve any of the tweaking parameters (except maybe gain - but gain applies to everything - rising/falling too). This is not about an absolute level. The envelope follower tweaks of attack and release aren't exactly like the EG counterparts. Same name but different usage. They are involved when sound is getting louder (attack) or getting softer (release). The impact is to smooth out the changes in the envelope follower's output (virtual knob) number 0-127.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
Attack and release tweaks don't need any special trigger.
They need something to know when they get applied.
It's all about the rate of change of loudness. That doesn't take anything else outside of how loud the Part is over time (right now-ish).
So if the 'loudness' increases by just 1 does a new attack get applied?
Or does it have to increase by some specific amount or ratio?
Or does it have to increase by some rate in a given period of time?
There has to be some rule that determines when to apply attack/release and when to 'let it ride'.
This is from Bad Mister's Envelope Follower article:
In the case of this Envelope Follower we are using the Loudness (Amplitude Envelope) shape of one PART's sound to create an attack-decay-sustain-release shape for another Part to follow. Envelope Follower - the Source PART creates the envelope, the Destination PART follows that shape.
Refer to that 'Source PART creates the envelope. For a normal AEG it is the KEY ON event that triggers the creation of the envelope.
There must be a trigger of some sort that causes the creation of a new 'Source PART' envelope.
If the eval process uses a single number then ANY change of value, even by 1 unit, would cause a new 'attack-decay-sustain-release' shape for another Part to follow' to quote from the article.
Or the value might need to change by 5 or more. Or the value might need to change some given amount in some given period of time.
So there MUST BE an evaluation of some sort that triggers the creation of a new envelope that is the analogue of a KEY ON for a normal envelope - not a doubt in my mind.
But it sounds like this just another one of those things where we are just never going to know what the rules are. I can certainly live with that - but I would rather know what the algorithmic rules are.
Guess this is another horse headed for the glue factory after a severe beating.
I still plan to check out the examples you were good enough to provide earlier. Thanks for that.
It's very difficult to get the envelope follower output meter to match the raw loudness meter (the one on top). So usually, these numbers scale slightly differently but let's just pretend like they can be the same and track each other as identical twins.
If the raw loudness of a part is "100" and it goes up to "101" (if you could see all the ticks of loudness in the graph from 0-127) and held 101 loudness forever then this is an increase and deals with attack. If you had the attack set to 0mS (I don't think it's an option - but as a thought experiment) then at the same time (not a nanosecond later, the same exact time) the raw sound got to 101, the envelope follower would read 101. If you had a big attack hysteresis value - say 24 hrs - then you would have to wait a whole day before you would see the envelope follower change from 100 to 101. It would be 100 for 24 hours after the change happened in the raw signal and the sluggishness parameter (aka attack) for the rise in loudness causes this big impact to the reaction time of the change.
Now - I haven't measured to see that the time of envelope follower reaction to the actual loudness tracks exactly by the number of milliseconds you tell it. It doesn't really matter anyhow. A small number is fast reacting and a big number is slow reacting and you can see how that works by watching the meters dance.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
If the raw loudness of a part is "100" and it goes up to "101" (if you could see all the ticks of loudness in the graph from 0-127) and held 101 loudness forever then this is an increase and deals with attack. If you had the attack set to 0mS (I don't think it's an option - but as a thought experiment) then at the same time (not a nanosecond later, the same exact time) the raw sound got to 101, the envelope follower would read 101.
Aha!
So it sounds like maybe the 'attack' value is how long it waits to see if the change is worth responding to. Then at the end of the attack time if the input value is still changed it applies a change to the follower output.
And the 'release' might be how low it waits on a descending value before it decides to apply the change to the follower output.
Well, right or wrong, at least now I have some things I can try to test for. Thanks again.
If I'm able to correlate anything I'll post it otherwise I think we may be done here.
Envelope follower has a low bandwidth and the hysteresis can't be set to 0 so it's not going to track volume changes that happen in the sub-second range (if you could even generate changes that move this fast).
It's the only device that connects one Part to another Part so there are real world ways to take advantage of this.
Another way I've used envelope follower is to make the sliders of one Part control one or more other Part volume(s). I hardly move sliders around fast enough for the envelope follower reaction time to "ruin" this.
Envelope follower is good as a random number generator for generative music or simulating drift or ...
There's plenty of things that fit the strengths of envelope follower. I've wanted to use it for higher frequency volume changes than it could follow. Had to get the same thing done another way but it doesn't mean, to me, that the system is fatally flawed.
There have been times when I wished I could envelope follow say only a set of elements in a Part (and be allowed to change the output of each element so I could have some elements set to OFF output) so I could use a Part that does make noise I can hear also double to be followed.
Rarely am I following a Part that I can hear. This is because primarily I generate a Part that does something specific to volume in order to achieve a result. And the way my custom Part that's being followed acts is easy to envelope follow.
The entire GUI could be easier. I agree. The interface is somewhat shackled to a history that goes back 25 years or so . This has been good for those who already learned the interface of an equally confusing previous keyboard. However, it creates an unnecessarily large learning curve for new users.
I don't find envelope follower to be any more complicated than other features in terms of menu diving and use. In other words, I don't see envelope follower as uniquely difficult.
Given this, if you've learned to navigate other features (which I do wish were presented in a more elegant way) then using envelope follower should be approachable.
And, by the way, official teasers of the next generation show that much of the 25 year legacy is going to continue. One screen was practically identical to the first generation Montage. Maybe a few minor edits here and there but it looks that the new product will be highly leveraged.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
Think I finally got the gist of it. But first a quick aside.
Unlike ANY other controller - Envelope followers have the power to reach from Part to Part. Not even Part assignable knobs can do this.
Is Side Chain Modulation considered a 'controller'. The 'SIDE CHAIN COMP' example in Bad Mister's article seems somewhat analogous to envelope follower action.
https://www.yamahasynth.com/learn/modx/side-chain-modulation-mastering-modx
A main difference is that one is actually assigned as a controller while the other hooks into the effect for a part or the master effect.
Back to envelope follower.
My tests seem to show that no new 'attack' computation occurs if the current input value is less than the current output value. That happens when the output value is decreasing in the release cycle.
If the output is in the release phase (and decreasing) then the attack range seems to be based on the difference between the current output value (at the time of evaluation) and the current input value.
Any increase in the input value gets analyzed to see if a new envelope should become active.
1. INIT NORMAL (AWM2)
2. copy part 1 to part 2
3. change low key range for part 2 to C4
4. change high key range for part 1 to B3
5. Assign Follower 2 to part 1 with part 1 volume as destination
6. Edit the envelope follower
7. set attack to max (40 ms) and releast to max (680 ms)
8. press C4 (part 2) and hold key down
9. watching the input and output meters while doing the next step
10. use part 2 slider to quickly change the volume from max to around 6 and then to 15-20
If you are quick enough you can get into that 15-20 range while the output value is still larger than than 20. The output had reached a high value and then begins a downward ramp toward zero.
If you can geta to 15-20 while the output is still higher than 20 you can see increasing the input volume has no effect when the output volume (on that decreasing ramp) is still higher than 20.
SUMMARY: the main differences between envelope follower as a controller
and other controllers seem to be:
1. other controllers track synchronously/immediately with input changes. That is, when the input changes (knob is moved) the output value changes simultaneously.
2. envelope follower outuput does NOT track either synchronously/immediately with input changes.
A. If the input rises the output will:
1) rise asynchronously and follow the 'attack' parameter timing value. This rise will only
occur if the new output will be GREATER than the existing output (which may still be falling
due to the follower release parameter timing being applied to a previous change.
2). continue falling smoothly according to the release parameter timing parameter specified
that is being used on the previous input change
B. If the input falls it takes no action at all - the lowering of the input does NOT drive the output
in a downward direction. The only thing that causes the output to decrease is the effect
of the release parameter still being applied to the previous input change.
So a follower can force a delayed (via attack parameter) INCREASE in the output value but does
NOT force a decrease in output value. Since neither attack nor release can be set to 0 there will
always be a delay between input changes and any related output changes.
Other controllers apply both increases and decreases immediately as they occur.
@Andrew - I totally agree with the thrust of most of your comments but a couple could use clarification.
The biggest problem with this feature is that it's VERY sloppy
My tests didn't show any real sloppiness. See the SUMMARY at the end of my last post.
and suffers severe latency issues making it nearly useless and hard to test/examine.
LOL! Since those 'latency issues' are by intentional design (attack and release parameters) I'm
not sure 'suffers' is the right word. Latency is a 'feature', not a bug.
But as you imply - I don't see what the design 'value' was in adding latency to the envelope follower-as-controller. None of the other controllers have it directly - though they can achieve it by using an envelope parameter as a destination. In that case the envelope change applies to the NEXT key action and not the ongoing one.
And you can NOT disable the attack or release. You can set attack to 1ms and release to 10ms but IMO you should always be able to disable something like that if you want to.
So that is a good WHY question - why was latency designed into the envelope follower? Why not track synchronously like the other controllers.
On DAWs, this feature is usually done with a "look ahead" value
LOL! Sorry - but it isn't possible to "look ahead" into the future to predict what input change is about to happen. The only way a DAW could determine that is to actually introduce a DELAY to the entire signal. Similar to the 10 second 'panic button' broadcasters use to detect and filter out objectional language.
so that reduces a lot of the latency, and they're much tighter and less sloppy than this implementation within the Montage/MODX.
I don't know of any way to tell if that is true or not.
The biggest potential issue I see re latency is that the attack/release values are pure and exact clock values and aren't at all related to tempo or beat or any other measure.
The attack value can be from 1ms to 40ms. Seems to me that a 40ms delay will have more of an adverse effect as the tempo gets faster and faster.
and the UI being yet another menu jumping festival of Yamaha-ness.
Although the meters on the 'edit follower' display were helpful in doing my tests and understanding things I don't see how they would be useful in actually setting the attack/release parameters.
What would be useful would be a 'slow motion' button that would let you see/examine the changes at a super slow speed to really see when different things were happening relative to one another.
Either a 'slo mo' or an 'emulation' mode that can operate at slow speeds could be useful.
I can speculate on why you cannot make the attack/release "0 mS" ("exact" tracking of input signal) but I cannot quite rationalize why this wasn't done in a more symmetrical way where at least the minimum times for attack and release envelope following tweaks would be the same value. Ignoring range (makes sense that release would have a larger range, in a way) - I can't think of why release would need to start with a higher value because essentially you have the "same" thing going on here. I'm sure there's a good enough reason, I just can't come up with it. Nor do I have much experience with designing this as much as I've had experience with other parts of a synthesizer.
One reason I speculate you can't set these to 0 is because, for whatever reason, it was important to average the result over the minimum (of attack) time. The reason I dream up (speculate) is that there is a minimum resolution of any controller changing. In the frequency domain due to clocking/processing/etc that with all of these things changing - the "pipe" is only wide enough to allow a certain minimum frequency of change for each. Throttling things down like this significantly relieves the challenging of meeting timing closure for a system.
Weaving in more speculation - I think given the likelihood that MIDI 2.0 will be part of the next generation and the higher bandwidth, in general, of this standard -- that the next generation is going to have to have more horsepower across the board to effectively take advantage of this. And maybe Montage (Classic) didn't get the MIDI 2.0 update because it would struggle with pushing around all of that data without dumbing down the result to be practically no better than MIDI 1.0 already provides. I just think that if MIDI 2.0 is implemented then this drives a certain requirement on the system that was not present before -- and this is of benefit to possibly anything including envelope followers, motion sequence, controller matrix destination count, etc. Guess we'll see soon enough.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
One reason I speculate you can't set these to 0 is because, for whatever reason, it was important to average the result over the minimum (of attack) time.
Not worth burning neurons over but programming-wise it would be trivial to treat zero as OFF and not do any averaging or application. Or add an OFF option somewhere to get synchronous tracking.
Point was that "off" may not work. Nothing is really simple enough without knowing the design. I don't claim to know which is why all I (or anyone else) can do is speculate.
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R
Although I'd be thrilled if everything I owned had infinite capabilities - feature set as a tradeoff for cost - this is the reality I "have" to live with. When I get a high quality magnifying glass (think detective clue type), I can't use it to count protons in atoms. It's got a use and certain things are not going to be suitable.
There are lots of applications for envelope follower where it does a fine job even though the bandwidth isn't in the million+ samples per second range which would give the instantaneous type of response but still limited by the physics of the ability for the audio which is probably far below this exaggerated bandwidth. Instead, the bandwidth is closer to 25 samples per second. Lots of good applications for this.
Again, I stress that it's the only part of the control matrix that allows for you to communicate between two Parts.
Sidechain, which I didn't comment on, is sort of similar but on a smaller scale. It's more of a one trick pony limited to the "hard coded" target and also lives within a structure where you only get a smaller count of options vs. the control matrix which allows for 16 (which I still think is a limitation and hope this has been multiplied 2-3x in the next gen).
Current Yamaha Synthesizers: Montage Classic 7, Motif XF6, S90XS, MO6, EX5R