Midi->Poly with voice management wont retrigger ADSR
Archive · 200730 old posts
From the original SynthMaker forum (2004–2014), with its members’ names and dates.
matti ·
Midi->Poly with voice management wont retrigger ADSR. This is a very annoying little bug. The normal Modi->Poly without voice management works just fine and retriggers the ADSR's nicely. But with that there's no max voice count available. This prevents from doing good polysynths.. evolving pads are not fun when they might chunk out 64+ voices and bring the cpu to halt.
You can test this by using a long attack and a long release. Press the same key repeatedly and notice how the volume rises and the attack phase dissapears.
I hope it's fixable.
philter5 ·
i noticed this bug too,just some minutes ago while testing my new synth.
stefan ·
In the example synth it works fine here. Have you checked "Retrigger New" in the Midi To Poly module?
philter5 ·
no, i used the other m to p module from the library where you can´t switch this function on. or only in another way? when i add the midi to poly component that you are talking about all i get is silence... 🙁
stefan ·
I think it's best if you show your schematic. If you don't want to post it here, feel free to mail it to me.
Hard to know what goes wrong otherwise.
Cheers!
infuzion ·
I've noticed it before?:
[old link]
The file in the WIKI has a A/B comparison between SM's ADSR & oddson's/mine.
I think it's the ADSR that is not acting the way Matti is expecting: starting at the start of the A, rather restarting about D. Some synths' env start at A, some at D.
stefan ·
Ah!
Well, it starts from A, it's just that it fades from the current level, not from zero, to avoid clicks (good for for instance pads, not so good for sounds more percussion-alike). So that if the release has already faded to for instance 0.2, the attack will start fading up from 0.2 instead of first abruptly dropping to 0.0 and fading from there.
Matti: would using one of the custom envs lying around work for you?
matti ·
stefan wrote: In the example synth it works fine here. Have you checked "Retrigger New" in the Midi To Poly module?
Actually it doesn't. Listen carefully. The first preset "Tekno Honk" is a good example. Set Attack and Release to high values. Press a note repeatedly and listen. The ADSR won't retrigger. "Retrigger New" or "Retrigger Stolen" have no effect on this.
stefan ·
matti wrote:
stefan wrote: In the example synth it works fine here. Have you checked "Retrigger New" in the Midi To Poly module?
Actually it doesn't. Listen carefully. The first preset "Tekno Honk" is a good example. Set Attack and Release to high values. Press a note repeatedly and listen. The ADSR won't retrigger. "Retrigger New" or "Retrigger Stolen" have no effect on this.
Yes, they do retrigger, but the attack starts from the last value out from the previous voice's ADSR instead of from zero to avoid clicks. The attack phase is still as long etc (which might end up silly if you retrigger the voice when the ADSR is at 1... 🙂).
There are however custom envelopes made by other users (look at infuzions post) that retrigger from zero afaik, could you use these?
matti ·
stefan wrote: Ah!
Well, it starts from A, it's just that it fades from the current level, not from zero, to avoid clicks (good for for instance pads, not so good for sounds more percussion-alike). So that if the release has already faded to for instance 0.2, the attack will start fading up from 0.2 instead of first abruptly dropping to 0.0 and fading from there.
Technically speaking that might sound better but it doesn't work in real musical situations(like pads, strings, anything with long release and attack > 0). It doesn't matter if one voice cuts off to 0.0 if it's one of the 16 voices that are playing. "Voice stealing" is rather normal behaviour of synths and the side effects can be avoided by increasing the voice limit when needed. Anyways, is there a bug with the "Retrigger New" input on the Midi->Poly primitive because it doesn't seem to do anything?
stefan wrote: Matti: would using one of the custom envs lying around work for you?
I'm not sure, i have to check them out. I still think it's worth to fix the SM ADSR if it's possible, because many people will bump in to this sooner or later. With fix i mean to have the option of what retriggering behaviour to choose 🙂
matti ·
infuzion wrote: I've noticed it before?:
[old link]
The file in the WIKI has a A/B comparison between SM's ADSR & oddson's/mine.
Looks nice. I might use this. Thanks 🙂
matti ·
matti wrote:
infuzion wrote: I've noticed it before?:
[old link]
The file in the WIKI has a A/B comparison between SM's ADSR & oddson's/mine.
Looks nice. I might use this. Thanks 🙂
Ah it looked nice, but it doesn't work. First of all it never stops. Even though the volume does fade to 0 it keeps processing and wont stop until i reset the schematic in some way, or until another voice "steals it". Because of this the Attack and Release won't update when i turn a knob.
So i guess the best way to go currently is the Midi->Poly without a voice limit.
stefan ·
matti wrote:
stefan wrote: Ah!
Well, it starts from A, it's just that it fades from the current level, not from zero, to avoid clicks (good for for instance pads, not so good for sounds more percussion-alike). So that if the release has already faded to for instance 0.2, the attack will start fading up from 0.2 instead of first abruptly dropping to 0.0 and fading from there.
Technically speaking that might sound better but it doesn't work in real musical situations(like pads, strings, anything with long release and attack > 0). It doesn't matter if one voice cuts off to 0.0 if it's one of the 16 voices that are playing. "Voice stealing" is rather normal behaviour of synths and the side effects can be avoided by increasing the voice limit when needed. Anyways, is there a bug with the "Retrigger New" input on the Midi->Poly primitive because it doesn't seem to do anything?
If the sounds are fairly low on harmonics (heavily low pass filtered, triangle waves, sines etc), the instantious jump to 0.0 will cause an ugly click even if you're using 16 voices. I find that it is exactly when you are using long attacks and releases that this behaviour is the preferred, and I thought it was fairly common? Straight off "clicking" voice stealing seems almost useless, no?
Hm, the Midi To Poly primitive doesn't have any Retrigger New input, do you mean the Midi To Poly module? If so, that one works like I have described in this thread, at least in the example synth for me. With long attacks / decays / releases you can end up in a situation where the effect of the re-triggering isn't easily heard though.
I take it the sensible thing to do here is to put "add option for re-triggering stock ADSR's from zero" to the todo-list? 🙂
FWIW, making such an ADSR isn't that hard. The envelopes in the wiki maybe isn't using the envelope control component and needs updating so that they'll release the process after their release stage?
infuzion ·
stefan wrote:
stefan wrote: Well, it starts from A, it's just that it fades from the current level, not from zero, to avoid clicks
I take it the sensible thing to do here is to put "add option for re-triggering stock ADSR's from zero" to the todo-list? 🙂
FWIW, making such an ADSR isn't that hard. The envelopes in the wiki maybe isn't using the envelope control component and needs updating so that they'll release the process after their release stage?
Yes, there's a reason why I put retrigger ADSR in the Suggestions 😉 IMHO, if one is really worried about the clicks (which I hardly hear at all), they can add a bit of smoothing right after the retrigger.
Yea, sorry, I've noticed the bug in the coded ADSR before, & just now noticed why.
fixed
cheers
matti ·
infuzion wrote:
stefan wrote: Well, it starts from A, it's just that it fades from the current level, not from zero, to avoid clicks
Yea, sorry, I've noticed the bug in the coded ADSR before, & just now noticed why.
fixed
cheers
It works better now. I guess the fundamental problem behind this all is not retriggering of the ADSR but more like retriggering the notes, or the voices. A voice is retriggered everytime -each- note is pressed. Imagine playing two chords after each other which contain same notes: C, D#, G -> D#, G, A#. In the SM ADSR the notes get retriggered and retain their loudness on D# and G, but C and A# are going thru their envelope curves normally -> they are quiet compared to D# and G. In the "infuzion/oddson" ADSR this chord progression cuts out the D# and G notes suddenly, but without any noticable "clicks". This is the way i feel "normal voice stealing" works and should work, but the D# and G notes would have to get new voices when they retrigger. When tapping the keys the problem is even more noticable(ever seen jazz keyboardists play?). The "Midi to Poly" primitive works exactly like i wan't, so it't not exactly a new feature, but there's no voice management. (The problem only occurs with the Midi to Poly Module, which has "Midi to Voices" and "Voices to Poly" primitives inside it).
I'm sorry to nag about this, i know it could be tricky to redo the voice management and it seems that not many people are complaining about it.
Oh btw. Is there any way to know how many voices are playing?
Would be a nice feature.
infuzion ·
matti wrote: In the "infuzion/oddson" ADSR this chord progression cuts out the D# and G notes suddenly, but without any noticable "clicks".
I'm sorry to nag about this, i know it could be tricky to redo the voice management and it seems that not many people are complaining about it.
I would like the option for the behavior we expect also, but I don't think it's a priority, since oddson & I have it "fixed" in our version. It would be helpful for newbies though. So since we can do it, I'd prefer to have the SM team add things we can't, like Middle mousebutton & OSX support 😉
I surveyed a few soft & hard synths, & about half restart the env from the start of A, and the rest do it about SM's way.
Oh btw. Is there any way to know how many voices are playing?
Place a Poly Readout at the last output of Voices to Poly (Trigger Counter), & you'll get what you want.
matti ·
infuzion wrote: Place a Poly Readout at the last output of Voices to Poly (Trigger Counter), & you'll get what you want.
Ah yes, brilliant. I didn't remember the poly readout adds all poly signals together. This goes straight to the synth im building. Thanks 🙂
infuzion wrote: I surveyed a few soft & hard synths, & about half restart the env from the start of A, and the rest do it about SM's way.
I've actually never used any softsynths, so i wouldn't know about them, intresting to hear. All my hardware synths restart at 0, except a synth from E-MU which i hardly ever use because of that.
Anyways, i think i can manage with the current SM behaviour. Let's hope it get's updated later 🙂
matti ·
Also one more thing about the voice management..
The "voice stealing" shouldn't happen on sustained notes -> the ones you are holding down on your keyboard. Currently it's just cutting out everything according to the order of "note on"-commands.
stefan ·
matti wrote: Also one more thing about the voice management..
The "voice stealing" shouldn't happen on sustained notes -> the ones you are holding down on your keyboard. Currently it's just cutting out everything according to the order of "note on"-commands.
You mean that if all voices are taken by held notes, new note on's should be ignored?
I think that kind of behaviour is fairly uncommon so it should probably be an option in that case.
matti ·
stefan wrote: You mean that if all voices are taken by held notes, new note on's should be ignored?
No. I mean that if for example all 8 voices are taken by 1 sustained note and 7 released notes that are fading away the sustained note shouldn't be the one that gets cut out even if it's the oldest note.
This would allow playing voices with long release values two handedly.
stefan ·
matti wrote:
stefan wrote: You mean that if all voices are taken by held notes, new note on's should be ignored?
No. I mean that if for example all 8 voices are taken by 1 sustained note and 7 released notes that are fading away the sustained note shouldn't be the one that gets cut out even if it's the oldest note.
This would allow playing voices with long release values two handedly.
Ah I see. That is indeed a good suggestion.
AngularMomentum ·
matti wrote: I'm sorry to nag about this, i know it could be tricky to redo the voice management and it seems that not many people are complaining about it.
I noticed this problem also before, and working on a Karbass update yesterday I noticed this again, and also can't get a working retrigger out of the ADSR, I also had people mailing me that Karbass is a nice synth, but useless because of the retrigger issue,...also what I do not like about the standard SM ADSR module, and I have mentioned this before, is that it doesn't update the ADSR float inputs until it registers a keypress...for instance in the Synthedit ADSR it updates immediatly, making it perfect for filter modulation and automation. I think the voice management is an essential feature and should be looked at, fixed or made better ASAP as it is essential making releasable synths. I really think this should have priorety numero uno (imho off course)....I read somewhere on the forum, that there was a gated ADSR coming up, I hope this will solve these problems once and for all...it's really frustrating as I want to release SM synths real bad. Excuse me for my rant please...
stefan ·
AngularMomentum wrote: I read somewhere on the forum, that there was a gated ADSR coming up, I hope this will solve these problems once and for all...it's really frustrating as I want to release SM synths real bad.
Just a FYI: those have been around for some time now. They were introduced in 0.9.6b, which was released back in September.
AngularMomentum ·
Thanks for that....I just tried those, and also I can't get a working retrigger out of those...only if I disable the hold of the ADSR I get a working retrigger.
stefan ·
AngularMomentum wrote: Thanks for that....I just tried those, and also I can't get a working retrigger out of those...only if I disable the hold of the ADSR I get a working retrigger.
Working retrigger? you mean a trigger signal to use when a voice starts?
AngularMomentum ·
Retrigger as in, if I enable retrigger the ADSR restarts no matter what instead of playing on. Just check Analog Warfare for instance and you'll see what I expect from the retrigger, also you will notice that moving the ADSR sliders the ADSR will update instantly.
stefan ·
AngularMomentum wrote: Retrigger as in, if I enable retrigger the ADSR restarts no matter what instead of playing on. Just check Analog Warfare for instance and you'll see what I expect from the retrigger, also you will notice that moving the ADSR sliders the ADSR will update instantly.
So you mean just like we've discussed here in this thread, that it should start from zero and not from the last level out?
I agree about the settings being updated on the fly, we could probably add an ADSR version that does that too.
But meanwhile, it's not that hard for someone experienced in the code module to make one, and maybe even the ones on the wiki works like that?
AngularMomentum ·
Yeah, I read Matti's post and wanted to back him up as he thought he was nagging and not many people complaining...
IMHO an ADSR should always start from zero when retrigger is on, specially in monophonic setups (to me) this is essential...I remember releasing the Karbass schematic with the ADSR's hold to false and I think it was you, adviced to set it true...I did that to make the retrigger reset as it shoud in a monophonic bass synth...I couldn't find any other way to my knowledge to make it work...
I am not an experienced person when it comes to coding and stuff, and have not much time to follow every developent in the foum and WIKI, I just want, and expect, to have this sort of (to me essential) stuff working right out of the box.
infuzion ·
AngularMomentum wrote:
matti wrote: I'm sorry to nag about this, i know it could be tricky to redo the voice management and it seems that not many people are complaining about it.
I noticed this problem also before
They say for every person who speaks up, there's an 100 who feel the same way.
AngularMomentum wrote: ...also what I do not like about the standard SM ADSR module, and I have mentioned this before, is that it doesn't update the ADSR float inputs until it registers a keypress...for instance in the Synthedit ADSR it updates immediatly
In the oddson,infuzion Code ADSR, the Sustain will change, but other variables won't. You can change the slopes as it is playing by moving all the Stage0 code into Stage1. With a bit of a jump in CPU though.
MichaelBenjamin ·
+1 for improving the midi2voices part
Wrote something here? To have a post removed or your name hidden, write to [email protected].