Global Envelopes - The "filtered" voices problem.
-
So I have a problem with Global envelopes...I'd really like to use them, but..in a multi-voice system they are problematic....here's why (perhaps someone knows how to get around this)
Here's a simple instrument structure that explains the problem....
Right so we have 4 "voices" in containers 1 thru 4... each is using the global envelope......
At the top we have an arpeggiator, which in our case is generating notes on Channel 16.....
Each voice has a script processor (ArpFilter) that is looking at the incoming note channel....
Voice 1 has its ArpFilter set up to ONLY allow notes from Channel 16 into the Sine Wave Generator, all the others have the opposite -they DONT let any note thru that is on Channel 16.....
So we turn the arpeggiator OFF and play a note - Voice 2-4 make a sound and Voice 1 is silent.....all good.
We turn the arp ON and Voices 2-4 still play the incoming note...correct. and Voice 1 now plays arpeggiated versions of these held notes - also correct....
BUT...... Voices 2-4 are having their envelopes triggered for all the arpeggiated notes, even though the "voice" isnt playing them....
The Global Envelope system is "jumping over" my ArpFilters....
My (hack) solution is sadly to treat Global Envelopes as "dummy" envelopes - no voice actually uses them, when the UI changes values in the Dummy Envelope - it has to go round every Voice setting its dedicated envelope to these values.... so we get this:
..it works and thats fine - but I cant help thinking there's a better way..is there?
-
@Lindon said in Global Envelopes - The "filtered" voices problem.:
..it works and thats fine - but I cant help thinking there's a better way..is there?
That's the method I use, but I have an AHDSR controller module that automatically handles setting all the envelopes and I just connect my UI controls to that module.
RhapsodyBoilerplate/modules/AhdsrController.js at main
RhapsodyBoilerplate - Boilerplate code used by Rhapsody.
Codeberg.org (codeberg.org)
-
@d-healey yeah actually implemented in a similar way here, except of course I use multiple global envelopes, and then define a UI approach to dynamically assign one of them to the target I want to use it on - gain envelope, filter envelope etc. so we end up with 6 Global (dummy) envelopes each assignable to one of 30 different "targets" - it gets ugly pretty quickly...hence my post.
-
@Lindon how would you expect this to work? If the sound generators are not being triggered at the same time how should one envelope create a signal for all targets?
-
L Lindon referenced this topic
-
@Christoph-Hart said in Global Envelopes - The "filtered" voices problem.:
@Lindon how would you expect this to work? If the sound generators are not being triggered at the same time how should one envelope create a signal for all targets?
It shouldn't.
I guess Im looking for a "script processors for envelopes" - where I can tell the Global envelope:
"If the note that is triggering you has channel == 16, then send your data to these destinations [some list of receivers]
else
send it to these destination [some other list]"
Probably not a practical idea....but if it were possible then you could set up modulators in all sorts of configs and have them applied to different voices as and when you wanted........
giving you a very powerful modulation system. -
@Lindon the event ID is a much better identifier than the channel.
You somehow need to achieve that all notes (both the ones that you play on the keyboard and the ones that are generated by the arpeggiator are fed into the global envelope container, then it will create an envelope signal for all events that can be picked up by whatever sound generator uses one of the event IDs to play its voices.
-
@Christoph-Hart er... I think thats sort of what I'm doing now (using the more gross event attribute of Channel) I don't see how envelope receptors(Global Envelope Modulator 1-4 in the first example) have access to event IDs... and if they dont they are just going to act on any note event arriving - which is our problem....
replacing Channel filtering with EventID filtering doesnt change the problem - unless Im mis-understanding the solution here...
-
@Lindon actually looking at my real project and the example I posted first there is a diference...
-perhaps the version I showed in the first post would work!! but doesnt work without the container....
-
@Lindon well no, load this snippet and hold a chord, the synth plays the chord notes and then, if we hold for a few seconds we get the envelope retriggering because of the arp notes(which we are ignoring in the synth).
For some reason it seems to sort of work in single note playing... go figure..
HiseSnippet 1755.3oc6Zs0TaaDEVJlMIPR.RBcR5sYzC8AnWXPFBAZmLXtXBTvAWDgj2RWjN1dGj2UUZEMLc5Lc5erleB8s9Zduuj+Asq1UxVBaLBGRBjD+j04rmy9sm8rmKqTUelMDDv70zGZmC8.M8qirNjxarbCLgps9JZ5CipfC3fughzRG5gCB.GMc8BOLhf9fCnI+8pEVB6ho1PaRZZ6xH1vljlDdapUKsAw0cUrCrCoYpQOSo0sYzkYtrPAdJflRyCauOtN7HbzvtDRaMbPCM8uFUr1d1Eqc+omybdy4u+LyaZdu41aloJZ6bu4md5Ym1oVw4vyNmPnKW1gvY9VbLGBzzGXIlygVMX+JUMA6RBH64BQOXpYIlYE4UYtNQKwn+qsbChqS0DCUflPoUaa1JnLaigpPbHsn217MpjgQaIRa.0uTufmYZ3MU9gmdmv6FnE88f50IXwrEuslhhYVTUHKpJb7nJsQqSjnsLixAJWfoaG8WelqXnbIhFFYY6S73KEx4LpFwIhjBEwjN.6FlwWRKG53Fnsg.fmUEH8dJtkKwA7khOB5QgMs3fWLsVJXfbpfqghjVhgSwBHkBFUp.q8Ic.A8bZBDZf4y2.N7zaHytP7.vYCJauipf6VpCELZrBVl0bO1RrmKUwsPVvuDBhHBsHmuESJXbCzV1b7Av1XZc3zueNHxpQXsZtP+4McMTYJV3puCANNnOfR3akYtqJhaIUvXBSPSxNLJjhQKM8eheNXNVS+yQlyNY2+cJlqcAWlMgeXtlqZeyRKN4jyuwJSN4zgUUOm645VnMAZcdi7MS6GMS69ihY5orppm0xmKzMQhHoTJ3ZAtfcTrqd6A0UkbGzVgbuP9wnpDWByR4ESUpVVDazOQgswzkxMlFIRIkoNcnhQyoq4kQqIxBzE25TA+GXmX.Tg4D5FEnOcdonr2wLHrrI1WOJrcfvSJc18W6jUlcKEQNg6MQUIb6FcGuWpK3Ujy4MMdakasbsZBOp1fc.zpO8rMO+IAkqpfxmgdnKaOraaCnvQRfJPky+KiYazhuQqAX1iJ6967VYmWtqr6n0XLP9pwn2VD8AN2TX1qiu9s6XaJ3L8zoY+UJ4nJHeEzhqsh01wmJk+2nL8.QpGOHqSTEFk40fQI1o8a1F39j50Etjo6bf3wbw9G6paQNWjiY4P+CR7p9i+8md4Bq.13CSSU9SM3VT94+rjhxlf.koGnLBZpmkpqEgW3WxJLfm4jvruXaQ1CbPFe6x1LwNEzqci9tDZcTNcZDU3KWjFxSdmuClObBVU6HmuA60QR2hKB10QPwNrWHLrCihOKcQvz1y5OJ7gY8GayB4DZ8JXQ.8mKhTE05rHAuncOUQsAIkDG+7TIctYATmoRZUHloYRM8QLMSX1kZb53BptNJWEw7p21Ewzu2tD5cPQLmhZrz67DyMiaOoMGUYLJpsQW1sGEWM8+AYTKjZGcnxfQeDiCaQGehg9sgFjTa7JBAw0gIqCIcaM9DFO3AFlyNwPCNXBWRcJyGJe.P4iy8CgI9gg98g5Pq0poT6Q3E2rkK32U1QNA98RvwogM2C7+VCYuXsFnv5j07ixm42VcmYoFHitNkv2xCnG6QwVWzl1iWeknduEF3XZhw4A9bRDDzWANP3vq10FTjXKXeNy6i8L9AYOiijId5C8YgdRjLlh.DPB.eCI82xwUUW51pURqwkw99DvecpC77TS9e0ZeuCNOlRBDcfHgxhMYgTdZPGycEfGRy.8XFVd9.1IsDQn2BDP0QpxfL94E5qy5YONkZ7mPJhq7dQetu9gSJjO3dBYwFLAiVjldtPRyrwwPVApgCc4sn1mc31i1ZaSYrRczd4WUZSQkMX+2bcXpmysq6ltCSi2OxBT3C9r.mTquQgGi1rO22ktJf84DndGETuF5I3C.Y5TIJ+D4y0X9MMdHH5Woy285a7KdU85z1wGSC7XAfYZMm7tpBxP8HRTrqRTL68nE40X1IoLiJxTrpvTjZbWsTBwhoIVESynLwyYzTERpD+ubAU4CpT0aEXKLLx25cp8+pgtAvSHN7FloErM4hoIuF12QrGlIF+Y16H+bzGSv61b4m8WXc7WzxmFec5IYvagdIv+hjKaOgc6ac+juM6WsPWx0qo0006iCfcvxETTuGGHZISoWIQYOaQegKhl1nfrASM8uqWutlu+n279YVAAeLw5agSKhPVWbJg5NHQXzhFxsai2862uMt2wONG4eNZhs8YOyVcaXQAgupjhX+iJ+v8FDUI5YCyN+ZEZJRm8La6rppCAK1uBNc+J3L8qf2qeEb19Uv62uBN2IKXT0FKFxYMUm2EUZUsrJUktpHK4Qes+GDHETP
-
@Lindon would a script envelope help?
-
@d-healey said in Global Envelopes - The "filtered" voices problem.:
@Lindon would a script envelope help?
I looked at those recently - I cant see how it helps, unless I misuse/understand these then they are fine for defining a "shape" for want of a better word - but I cant see how I can direct its output to a named destination...
-
@Lindon said in Global Envelopes - The "filtered" voices problem.:
direct its output to a named destination
You want to route the output of the envelope to somewhere else? Doesn't it just flow up the chain to the master?
-
@d-healey said in Global Envelopes - The "filtered" voices problem.:
@Lindon said in Global Envelopes - The "filtered" voices problem.:
direct its output to a named destination
You want to route the output of the envelope to somewhere else? Doesn't it just flow up the chain to the master?
- not a Global modulation Envelope no...