Applying AHDSR Envelope to Customized FX Effect

  • Hello, @Christoph-Hart!
    I am going to make a customized FX effect binary module and load it dynamically.
    And here I have faced some problems.
    I want to apply AHDSR envelope to the parameter of my new effect, for example cutoff of LPF.
    However, I can't be sure how I can add modulators and link them to parse values to loaded binary module.
    Please let me get some simple example for it.

  • This is not easy because the current C++ to Javascript API doesn't work on voice level (and performance starts to become an issue there). However I could add support for custom filter algorithms in the default filter module as I can imagine that people want to make their own filters. Would that be ok?

  • I want to add following filter module, where ADSR envelope should be applied for filter parameters: cutoff, resonance, ...


    And moreover, I need to apply LFO modulation to cutoff parameter value.
    I have C++ codes for it and I hope to get how I can do those things.

  • If you don't have special algorithms for your filter, it should be sufficient to use the filters (and add missing algorithms) in HISE as they offer modulation of the cutoff frequency with all possible modulators on voice level. What filters do you need besides the all pass?

  • Low pass, High pass, Band Pass, Notch, Allpass, Peak, Hybrid are just what I want.
    And the most important thing is to know how I can connect AHDSR envelope or LFO modulation to filter/effect parameters.
    It may cause some issues because of managing parameters between threads. So I need to be serious to do that.

  • Have a look at the polyphonic filter. Most of the filter types are there and can be automated with LFO. Mutlithreading is no problem here because modulators are rendered on the audio thread.

  • Yeah, I can find some filters in polyphonic filter. But there are few parameters that I can control. Is it possible to add parameters or change algorithms of such filters?
    And you are saying modulators are rendered on the audio thread, so may I set parameter values in "processBlock" function of customized Script Fx?

  • What other parameters do you need? I wanted to improve the filters for a long time anyway so if you have some ideas, let me know.

    You can call setParameter() from any thread, it tries to be as lock free as possible (using atomics for single values etc). But I am not sure why you want to set the parameter in the processBlock function, if you use the filters from HISE, you don't need to touch the script FX stuff.

  • This is an example patch with an envelope, velocity and LFO modulating the cutoff frequency of a state variable lowpass filter:

    HiseSnippet 1061.3oc6X8zbaTCEWqczzTZZfRyvzi9.bhgL1tAZ4T2Dm3VO0twM1DnmZUzJGqoZkLZ05V2OAbiS74fY3KPyG.NvL7EfOBbhqfz9GuZMtIdYRZc5fO3Ye+jdR+z68z6IotRAlDDHj.mq0exHBvYMXuIb0vFCQTNn0t.m0gcPAJhrRLzNSFgBBHd.Gmx22.3b0U.Q+9y6sChg3XRFD.bnfhIso9TUF5ybeHkwZh7H8o9V8dK2VXAugfIB07oLrJXDB+bzwjGgLcqDDLlRdQ.voJ7102T97ZG8ps2bleO7UM1byACxiCvgRIgqNTqNvA5725eNv87nJgrmBoH5wbkcDdS5MT7Bd7TeHMfdDiXDpA5o4TLbSAyyr3MeCZLjx75lZBC.5wtalAsbrAcCXGpGcJdlg8ihZnRlF1lVmRmF8pYSupykd0lC8.VrakX1oIgvKjgT4Ylwylz.Uj2o2hqH7.pZhsm+cJcuArKUgGNe9VZN7U6ntn4ahy+5v8FLffUYjcEXyu6sqm9FwT4ZvuEMlDs4NhHaDIOPH8qbeBmHM1zSY28uc9u6derRyf9RDOXjHfTydjmos51ssKQExm18mMXve85Xnb8xr5ZpWcVC6ptof0sA6h3Vc5ImnksZ+ItcnuLS7OtmS4E1gYm4H+VJq9++oQdioQJuXl14XAcr33UR4XOp+HFYO9XBSnQhycrKY.JjolhdljbakRWVJCYC2CHLBJHKV+G9c21TNAI0qcxE+56z7A2BFS2JlMiUd+Hkd42iRoWfyVX6xWMlKeLrqfMYzPAmhaRY5SoEQnaZAWIA+MmYG.ZJIeeHgiSsmm7q+7qcercvP9.4a493PD6Lr++2isKsfAIeBbJwunhrKf6orEqWKl0WAt8C1s2AIICi9tRQyyzHTNlju5GFM4egNSRoe5WbiQZSzSmcGefdUjI+otQC2TfSjt8BCTyDeLa9Mcs7yOuMbA81W2NS1Rd5q0S4Zr4e4lrqAihAtLXW+PXRz4kBC65vjMNKKl1jq3Cgsateh8T+UkoT+ro3rUJhN+r4r9sxRX39ito2rHd9xTuM4X87Xizm3ORnuTB1NeSOegPMjxON+MH1vsg16K7SGcfymAqu0LO.v380+M3yMe90MhjeGTY5lQ10oVPiEdIOVMlw4pmtDv3jSt+AvC00LwlYO9lqohEIz8aBH8QQrIKPqktXrTQ7lo9J8HBK+IdNGOdyheDXywzt7bjcy8Pe4R.cOPDpzoN5fTRy81gOJzumHThIZpx4DVf4E.KALpFIW0HGk0gv8pl97fIMVyH6jzXszFeqLG9HrT7TrfqjBlI4ypQH50MO54PuJriQtRMvXDKLwJ4S8nOEiM2I4KzVm4qQ8BqwsKrFaUXM9xBqwWUXMtSg03tmhFl2cY6PcAo33c.3evEeF.K

  • Thanks, I will have a look.

Log in to reply