Bipolar LFO's
-
I hear you guys, however the modulation system in HISE is so fundamental that I can't go around and change the behaviour of things without breaking every single project made with HISE and any addition I will do has to be with the minimum amount of overhead.
To be honest when I designed the modulation system, I tried to mimic the way KONTAKT is doing it's modulation as close as possible to make the transition more smooth (LOL), but I agree that while this modulation system works well for sample libraries, it's not as versatile as you need it to be for proper synth design.
I might have a solution that allows total flexibility and this is to just add a small SNEX snippet that processes the modulation signal as you need it to be that can be inserted to any modulator. In the end, every single modulator creates a signal between 0 and 1, and HISE tries to convert this range into a "sensible" range depending on the context with the intensity being applied correctly.
This code mimics the conventional HISE (gain) modulation way:
/* the modSignal is a float array, the intensity the value from the slider. */ void process(block modSignal, float intensity) { for(auto& sample: modSignal) sample = (1.0f - intensity) + intensity * sample; }
So in order to get a truly bipolar modulation for the LFO, all you need to do is to change this
sample = (1.0f - intensity) + intensity * sample;
to
sample = 1.0f + (sample - 0.5f) * intensity;
-
@Christoph-Hart said in Bipolar LFO's:
his code mimics the conventional HISE (gain) modulation way:
Not entirely sure how to apply this , do I need to use a scriptnode modulator and use this as a SNEX/Jit or can I somehow place a SNEX snippet into the normal lfo ?
@Lunacy-Audio Do you understand how to use this ?
@orange . thoughts ? -
@lalalandsynth Was going to ask you :face_with_tears_of_joy:
@Christoph-Hart Could you possibly upload a simple snippet? Would be greatly appreciated!
Thanks!
-
@orange . thoughts ?
I haven't used that yet.
-
It's not implemented yet, so a snippet would make no sense, but the idea is to be able to click on the modulation bar (maybe a context menu on the intensity slider) which opens a small popup where you can edit this code.
-
Did this ever get implemented? This would be super helpful.
-
ycdiws (you can do it with scriptnode) :)
-
Is there an example I could look at of how to do this with scriptnode?
Is this something that could be easily changed in the Hise source code for those who want it?
Thanks!
-
There are some scriptnode LFO examples in this thread which might help you get started.
-
I will check out those examples but I'm not sure that will help me.
I think the issue is not with the LFO but how the modulator target behaves.Now it goes from 0 to the cutoff amount rather than plus or minus around the filter cutoff amount.
I see how I could create a filter in scriptnode with LFOs to modulate the cutoff amount in the way that I want but now how I would integrate that into the rest of the instrument. Especially since if you want a filter to respond to voice events like polyphonic envelopes they need to be attached to a sampler/synth module.
-
Do you recommend I build a filter as a polyphonic scriptFX that includes a poly adsr and lfo all in one scriptFX? Is there a way yet to route global modulators into a scriptFX?
I am having some success with mono envelopes in scriptnode but haven't had much luck with poly envelopes or the mod chain in general.
-
regarding ycditwsn, I have rebuilt the kind of modulation system I want for filter's in scriptnode but I don't see how this approach helps me in a larger project. I have 3 samplers and a sine wav generator. Each sampler and the sine wav generator get a hpf and lpf filter, being modulated by three global lfos, MPE envelopes, and an AHDSR envelope.
This all seems like a lot of trouble to go through just to change the modulation from starting at 0 rather than the cutoff amount. As it is now the poly filter is giving me pops and clicks when modulated. My best guess is the pops and clicks come from the filter returning to zero rather than the cutoff amount when I release a key.
Is there a way to pass a global modulator as a value into scriptnode? This would solve some of my problems but wouldn't address using mpe, or other poly envelopes as a modulator within scriptnode.