Controlling multiple modulators



  • The more I play with HISE the more I think you're a genius. Just started playing with the Modulator Connection Wizard, very helpful! I'm working on an instrument with 3 samplers, each has an ADSR, I've put a set of 4 knobs on the container's interface to control the ADSRs of each of the samplers. Currently I'm entering one line for each parameter of each sampler's envelope:

    if(number == sliA) normalPluckedADSR.setAttribute(normalPluckedADSR.Attack, value);
    ```but I wondered is there a better way to do this? is it possible to run a loop through all of the envelopes?
    
    Something like this pseudo code
    

    foreach sampler
    {
    foreach envelopes
    {
    sampler.envelope.attack = attack_knob
    sampler.envelope.decay = decay_knob
    sampler.envelope.sustain = sustain_knob
    sampler.envelope.release = release_knob
    }
    }


  • administrators

    I'd recommend using a switch statement (funnily I changed the module connector to use switch statements yesterday). I had to add switch support to Javascript myself (and I wrote the Module connector before that). Having a switch statement is faster and more readable.

    You could store all modulators in an array and then use a for loop to iterate over them.

    Check out this patch:

    HiseSnippet 1423.3oc6X01aaaCDlJNZaVstXcXaXejveoNnYN1NYsEMXq4kU2k0lWVUV2.JJZoknhIpDoFEURcKx22+j8uX+E1.1ej9OX6ndwRNUMINqcCnMBNFg2wGxm63w6NqcjBGZTjPhLtvtiBoHiKZZOhqFt9PBii13aQFW17178o9hP55BtRJ7QqMJjDEQcQFF0tidZF0mEk77xasFwmvcnEhPnGHXNz6wBXpBoOYk6x786Sbo6xBJM6kVYCGAecguHFnTMyNnPhySI6Q2hnm1Lln8YzChPFcLWrWa4S6N34q1Fdru51O+Gtw0osauy2A+cmNitJH2yQto8nm0es1sQNwRIkqd..GYXZ72vig4scYJgzVQTTXMmcMg6H6ghC3oa8CXQrA9T8ftHafSoh6K7c0Fu9+QqOj46tStWLBgL9fcJ7o0R8oep4lLW1X4E91ONQAt.QYWqwLGG85dFomQI5MaJ8trosijEpJzn41mjI80vtTknY9CSSK3HKRg2mHwDkBNutKWL.+0Xc7B3xaSbc0RZ0rPay4wcWZd70laYqEV.+vu2d6sJg8QV4PinZVERkJFMpuTDnm4QVnWzvBiaFPdVyah60AdlOUfvkBRZpCvZlJJRQCsYOWKtaljXOOlFXSbPTyFVGlQnENJiZXUxJkTeJIh95LyRpA50qyhGwPKo+DszIWq2dlZYN0vpgVy5RpNvCS.kdT3xiCEqDX0PJF1vXeBDaF0njaIOOQWvojjDo8dT0l4SsUyb83tMma4p.16j.1KAXB6rAM.4zrYL8hvLNl.ejRxHPEQgcfgCnXlhJAiws7tRyV0HXWe3XtOeAadDrWdwbGESvwB9VBEcadq4rdgUcqCeEMddUoJKmoOUVkV8Al7Xf0hGGLfJmG3qeLMYdQGvTNCyTLWCq5PLQ85NvYWov0apkknnt1UQUG4TC6xjTGk+HbK0PF31hvdDHjIYAqWO4qwdDcn4pJkjMHVQaUHd0jsKmaKOAndUCpWkfF.AZOcYLvTWA+JJrmPtWFkSTgizY.CfaI3aNG.3vwVbon1IM4MROuwh8oPRIe+RG1PHhdkexXIOIMdIG5tYNDBd.Sgi7EG.Kw.pCIF1PgWBXegHrDqz6xPJwMeIhD3MthKvNGQ.LA2DLdLID3QBCkBhyPbL2GRphGIhwCI6SweCtamItWkeN.diV4bUS9w7N8rJ0jqmKcR+9Xo2O0QM1uqwbXImu1qZAeNzBJbLYYGqSWYm76GaGR4SHwyqrnh6CkklbOnhoUHxIMMYopyB9FblJeFcqnVGJK2JT0al7dWLpoRp4corpa19LWpDwb0c9TbABk3mF2Wxu+aqfNEqPCyRAjGYI90+ZEzqV5EZ.H+HubWA5tpxT.4Clnt6FZSJhoFUtqqonUgNU1pPktuSIcur4N5TRUy2Ypfu5yi2x7MqwqFl21yCRzUP1YM6+ym0trNaT4RoT4Bl1LNMo5VBQ9rjw3eRe2+NTtNc0Q5vZxVq+y27sVusiB18ckDdTnHZhE1lFv1Uv0NjBg+XDsuj9K2WeHWV95BhrRUu7V8AarRL1DUrLIZY0.QLWMQzQsyTe4SdoozQXEcAO6+CMo+l+l2+9DE0NcI2OgeGwGlyQaVPnOMuZeBGunYQaemL+RaOnbd2rJWkyidOHnhHAyl912zNN2+WXlRWr9hF9ci700d+Le88EwJFeuMIPmSOCYXtUbfMjmzgBLgyo9Q52YvL5bcoi6nGmlnj61I+EJjorqdrQlxt4JOE0D97ppIz67hBmWT3c2hB8Nunv4EEd+snv+E6Q.wQJdrS5ueUGK+QIR.6lm7V0qatodLzeV1OYU6aBfzaO1wQ6r+Rv6TMhdSMhEmZDKM0H9poFw0lZDWepQbiiAgtVxpwJQP5UOD5e.kD1C9.
    

    It contains of two sine generators with one envelope each and a switch statement in the control callback. The attack is controlled by directly calling each Modulator and the release is controlled using a loop statement. For your case I'd strongly recommend using the direct method.

    Also, did you check out the global modulator system? It doesn't work for envelope types (way too complicated to explain here), but voice start modulators and time variant modulators can be added once as global modulator and send their modulation value to its receivers which can be placed anywhere. Then you'll need to only control one modulator, which is incredibly useful for stuff like global velocity curves etc.

    http://hise.audio/blog/posts/the-global-modulator-system



  • I was thinking an array would be the way to go. I didn't know switch statements had been implemented. I remember you wrote in the manual about these not being part of JUCE, I'm glad you've added them though, very useful.



  • I noticed a little (possible) bug with the envelope. When I set the release time to 0ms via a control on the interface the actual release knob of the envelope only goes down to 1ms


Log in to reply
 

2
Online

339
Users

1.0k
Topics

7.1k
Posts

Looks like your connection to Forum was lost, please wait while we try to reconnect.