HISE Logo Forum
    • Categories
    • Register
    • Login

    Scripnode 101

    Scheduled Pinned Locked Moved General Questions
    157 Posts 13 Posters 14.4k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Matt_SFM
      Matt_SF
      last edited by Matt_SF

      You can read everything in the documentation here : https://docs.hise.audio/scriptnode/101/gain_example.html

      Graph Shortcuts :
      Shift + Click : Enter value
      Ctrl + Click : Fine-tune value
      Double click (on target) : Disconnect source
      Alt/Option + Click : Show range editor on Hover
      N : create node
      C : Show/Hide cables
      P : Open Properties
      Q : Bypass node
      F : Fold/Unfold node

      Range Editor Shortcuts
      Shift + Click : Enter value
      Ctrl + Click : Change value by increments
      Double click : Exit range editor

      I thought about starting a thread for Scriptnode newcommers. I didn't find time to dig into how to contribute to the documentation yet, so this topic would be a "Get started with scriptnode" starting point. I'm not an expert, so please correct me if I'm saying dumb things.
      Feel free to contribute to this thread !

      HISE version : latest develop branch.

      First thing first : create a DSP network :

      bf41c6ff-4e8d-41e5-b12a-cfe9e435218c-image.png
      Create a scriptFx module

      This popup will show :

      04f59041-07ad-42b8-a82f-6599eb9f20a0-image.png
      Create a DSP network

      Congrats ! You've finally created a DSP network and entered the scriptnode graph editor :

      78a4d524-7dd0-4ea5-8d52-502ba2019dad-image.png

      Develop branch
      Win10 & VS17 / Ventura & Xcode 14. 3

      1 Reply Last reply Reply Quote 8
      • Matt_SFM
        Matt_SF
        last edited by Matt_SF

        Let's build a "Hello world" Gain Knob :

        Once the DSP network created, click into the graph. You'll get this popup showing :

        c5319edc-0f60-4bcb-bbfe-426e0fb0aec6-image.png
        Here you have access to all available nodes

        Type in the search bar : "gain" and click on the gain node to add it to the graph :

        6491d540-d9a7-41ac-b786-52faf358a6eb-image.png

        Here we go :

        3e26bf30-a176-4d1d-a1cf-b56f401ba021-image.png

        Done. But let's make this gain knob available in the script editor so you can manipulate it.

        Open the parameter control bar by clicking on the little upper knob, then click the "plus" icon to add a control, and name it "Gain" :

        16d2fcc8-5edb-4073-8f6e-10506572f099-image.png
        022cbe1d-511a-4caf-ad00-fc768c719ab5-image.png

        Note : When you add a parameter like this, its range is always 0...1.

        Although it's possible to leave the knob's range as it is, the logical thing to do here it to modify the range of the knob.
        Right-click on it to access its setup :

        75952ae9-e1ad-4351-b1f5-c2408bec8227-image.png

        And change the min/max values like this, and click outside the box to close it.:

        b350df1f-e2b9-44d7-96b1-721545bb37e5-image.png
        NOTE : You can access the setup of every node and parameters by right-clicking on it.

        Now click on the target icon to acces the "connect" mode...

        d12fe4d8-7b1f-4142-a3dd-1e005a44060a-image.png

        ... and click'n'drag a cable from the control to the parameter you want to manipulate (here the gain parameter) :

        af8a1af0-4c37-43cb-bb67-799e42869484-image.png

        Then click again on the target icon to exit the "connect" mode.

        Now, how to manipulate the gain via script ? :

        In the script editor, create a generic script reference of the ScriptFX module :

        const var ScriptFX1 = Synth.getEffect("Script FX1");
        

        Create a slider in the interface editor, and don't forget to make its min/max values the same as the network's parameter (here : -100...0, since it's a gain knob) :

        e340173c-549d-4690-9e0e-d67130cafc5c-image.png
        And create a custom callback for this slider.

        Now you can access the network's parameter like any other in HISE :

        inline function onknobGainControl(component, value)
        {
        	ScriptFX1.setAttribute(ScriptFX1.Gain, value);
        };
        
        Content.getComponent("knobGain").setControlCallback(onknobGainControl);
        

        Here I did it by script to show how it works but you can also do it within the Interface editor.

        Voila ! You got yourself a nice little gain knob made with scriptnode. You can now start noodling around. :D

        HiseSnippet 1567.3oc2X8zbaTCEWqc1PiaggBsCbbmLbvclRFaSKvLcXhSbhKdnNwSbHs8TQYW4XMVqzN6JmDCSuyMNCm3NW3J2xGAlgu.7QfuAvSR6lUqiapw8OLTex58O8SO8zO8z1KV3SRRDwHmU1eRDA4bM29S3xgsFhobTmsPNuiaWbhjD6YDs4jHbRBI.43T99JANqrDR+6uVeSLCy8I4hPnCDTexCngTYtzdM+JJi0FGP1mFZY8cZ1wWvaIXhw.dJ6VCEg8GgOhrCVYVIWjyxaGPkh39RrjjfbVZSQvj9CEmvM1e.MgdHinFTG0GBjQbaAKPgX0+QsFRYA8xV2IHjiau7rPYSV3FtcoAzykmmMdWsBubOryGNkJBuxEfW8mE7lAjbrfzRFHcc299wzHYtFEdtpaGNr4L.CocanXrEU5WbbaI.K3x0BwiHsigAm6Q0F2s1s8pe2Z25dUp.o9Do2w3XOiuseTcuuvSWLr1QD41CFP7kUW0nzCztpxqJTNixIdCFy8kTA2SvGwEGppLTyarfU0WDFI3.BtMDc1Xxsp7cUV474XsDhbCoLld3XIoZtXUDxb3dUdJLUYqC.LsxBY0UylsUukJRoyYKLicHT6T8BnAhkET2QHI6xqpQTkmVwaZUCFLScowhQhmoZUUc7k4XU93vCIw14CkgvVcw5mkmu5GeShwxPAuCmJ2MhjNN+.P8YTsgRyrp5tTDBlJ0UcuSZUWeFMfDinPPp3lkSQZ7aebG80c1BKwYQBBJLQQjXIUsdb1hbLPGXpmWwcKRxHoHRaa59ID84YdOMeN2s4j7AcZFJBRisO8PBCEZyP83yBwmZCWfWKpO8a0Kge5GU+9s0SFOX.Erx00KXSv+f.FomHgp1By8swYnKdDEHGDAiYXYQFCEjSUnhg8wT0QQND6I1znSSirzytLn1LY4l4l7bB2q61iJ8GNa7VZF3E1qeUi2TR4210PBkC1kba+nKkAdo46Dzy4BhYvFWwMipRCjq4lyKNKdXmu2MmGHJlDgiI6K5wvSplfCiXj8.7dauCYB+QpBxKRdDYfvlJKp5ODy4DVxhvwr7Ko6nP6IFKo7i5hAxa04kcFG1Gt41mzJEcfLmRJ5Ey3Zpwp5k9DdfdveC+RUVWM1IUY8Lk4LSncHxSDwizaGo+G1LL49DcR9ICNsNZCFSbhhNglV8B6AZY8DrIQCEbpuRjwhLjtQnXrh6w.WmR6nIQVtM1GRTS5gkCUmKTzrPgGIdM+yK.uh6QveaeJR4RVmKlUILEgZFMnukBUDPttGNFZoAtEVQJVxorEIooZSMBNiUxr95jbfRqOlgNvv3B.UMilrgFstJSWVCGTAfeU.3wj0zJleT5TxFSHK.C0CmOB47Vco7CJdKviOqK9zCl9lg9VTsvveVQ01eD4DCVSkd1Q+5MaZVHZd9KDkMFKEgPgqlLBYgikuHNPnKfil+Py4BGey6u0erto8p9gBgbHTmOMXtSymy7+xHObM28HPaMlnbgXUbawwFNVIwEDYFYSiL8ETS4Jbik51dNQSAkjd4e5PnDQU00I37pyygoQ1KBFujr21mBzrIIZD.01nMEhQgXMAxB0jh88Q2zn7ptODeLQ2grlL3l5wCDwgd2m.7DpKVqeIOX52m2GLEM2OXZWeI.g8iw7jHQBotcjmRWCacaQji4EM2HpfUpkWaX4YY2UZlIrgsvdXdgfAiKDotTq9v9y02lig6b5SfUSvtI9vhEOUIWuwrDxCoAxg0scLWbCaweINN.1W7KzkR4Ep0fhMuYY+L5SX4WUOj70ZGfu3MrVd9f6yoSqUxvXeppCos4GSXvwTMFeO3b4.7XlLSZwyYcEbQ1k84U.6QfNUN5HRgBqYtffGjBudLWxMZtGgQvIVm89nlO.5E.G207fiEIW7u+a.Ly8qOz0.WOE4f2aFOzn7aPOz3UwITf+7+O6zefKvo2vSuc68e+98qi2s75XNBw9whm3adtmhv3JZIv5lq+doq31UM1qd1mow0s1Z0TeQC5S78U0zeLjelsOMV.e9jEvm6r.9b2EvmOcA74yV.e97K0G0M9oufQU+CB5sstSTGGSGP5iBn+A.tUO2.
        

        To be continued...

        Develop branch
        Win10 & VS17 / Ventura & Xcode 14. 3

        1 Reply Last reply Reply Quote 5
        • Matt_SFM
          Matt_SF
          last edited by Matt_SF

          Let's go a bit further and create a L/R balance knob. This example is only here to demonstrate the L/R signal manipulation. Althoug it will be usable, a proper L/R balance control would need a bit more work than that :) .

          How to split the L/R channels ?

          Let's start a new network and add a container.multi node and rename it "ChanneSplit" :

          9ef061bd-35d8-4eb1-91fc-40a35dbf3a41-image.png

          (Reminder : to rename nodes : right click on the title bar)

          Now, add a gain node and duplicate it with Ctrl/Cmd + D :

          a2ab24ce-2fc1-4f15-95e5-5a413b7caab8-image.png

          See the cables which connect every nodes ? this is your signal flow. Follow it and you'll never be lost :D

          e83f0611-a612-43d1-b5c3-d2baead6c0a8-image.png

          Now we'll add aparameter control, and set its range to -1...1 :

          57cba45b-6aba-49f3-a073-e8376a80a4e5-image.png

          Connect the Balance control to the 2 gain parameters :

          f73dade8-397c-4c3b-a935-22b1ee80edb7-image.png

          But in order for this to work, we have to modify the range of one of the gain parameters since we want the Balance control to handle both the L/R levels.
          Lets give the gain nodes a proper name and invert the rightChannel's gain values - node values AND connection values - from (-100...0) to (0...-100) :

          9cff57a3-f1ee-43cb-9fb7-5292ede06724-image.png

          And voila again. Now you know how to split the left and right channels.

          HiseSnippet 1611.3oc6X8zbaTCEWqc1Pi6eFJzNvwcxvA2YJYhCo.yzgIN+s3g5DOwgT3TQYWYaMVqzN6JmDWldiCbiy8FeD3BG3T6GAlgu.v2f9M.dRZsWs1tAGSZZOfOY8jz68Su+7SuUMhE9jjDQLxYgC5GQPNWysYetrylcvTNp1VHma3VGmHIwdFQazOBmjPBPNNEefRfyBygz+d4ZafYXtOISDBcnf5SdHMjJyj1n5WQYrcvAjCngVqd0p07E7MELQO.OEcWFEg86haS1EqVVAWjy7aGPkh3lRrjjfblaCQP+lcDmvMq+PZB8HFQMnBpInHi3cDr.EhURQa1gxBZL3bmfPNtMx7BEMdga4VmFPGJOya7t5I7x1gs+voPd3ULG7pXCuksf2DfjiEjly.oa51zOlFIylQgmq5ViCAmVXvsaCEyZQE9UG2MEvJ3xkBwcI6DCCFtixqbukuqWk6s7cteoRfqOQ5cLN1KMLtyodegmNYXo1D41sZQ7kkWb3jKp1DkynbhWqdbeIUv8D7tbwQoqQY3XAqruHLRvAHbWP8rdj6T56KsvP8rTBQttTFSOpmjTNSb5+Frm6W5of8FbV..s4.sVdQKat3cT5K0xahYrifTnxSBVfFsf8tBIYOdYMzJ8zRdiNUqVSbtTcwHwSbZU9c7Yswx7dgGQhscLpEBA87YRtu5LI6Dcei6wZgBdMNUtWDg+pR+Qo9TUVWJpfkJ04b2HMmqIiFPhQTH055tVtRjF1oUvU+qm7COG8001BKwCTFnWvVQjXIUcLb1hbLvGXRnWvcKRRWoHRu1zfIThOkl9zLhicq1OaPspg4XkddHMHfQZHRnJeuM4DZ7pLn9VDzigk4K5ULcoSnzgcklpZhC5tuMS3nLAyMcLAmMQ0zB2a51fJ86LY7VXB3EhVutwaJu50cM7HYfcN2c9lyjD8bCkokPsTZFFXeCS5PtmIwj57itY0uQwjHbL4.QCFte4DbXDirO.265cDS32sI8IjwK5iLHXC0JJ62Ay4DVxrvML+TeKSky7VFz9hdRJuccLv9BkSt61KrIb2KPQlhNPlSAEEgY7xpwpzklDdfdveC+RmrhZrS5jUFLYF6BZWh7DQbWczH8+PrP45ulah1I+3VmVAsNiINQwGPSSdgXfVVCAqeTGAm5qDYVw.jtdnnmh7v.WmB6JB.Gv76f8AGU+FXYGUYghdDx6HwK4OL+yNrq10f1OLGTvJgZVIn4ibIEf6tANF5KAtJUQrUvonEQmIeSMBpxJXNh0RNTMqOlgNzvZBXUYQiCQCXW0Rutq4P0LhAcM8JOBg8XR54.x4A3PKWHmkYjVxTWZdKeUvxwjkZqbamCaVHmMs7XPN4vQHm2oNken0UIvuu8E0wmNhLH2RRhTUWox94m8reaslcImXvZpzWz9WtcU04YdMuMZLsrdOoHDJdz7gHKbL+33.gFCGU+opSEN9t2eq+XMSNVyPgP1Ap0FELqV8ew9WD9gq4tOA5JxnkwzExJC3Ftwz1cdKIEXBtdvc7+o.uFRArCK4iQN1XSooEFPXhFGou74iizWt1HH0f9QQpdkiALcWjbh9lQMaU1PHkQkEVKXTdqg.VMUZ7+h2ot8oPS.IIZf.o7nIBrQJmlNj8eMseTjsgPzMDqu3cl5N2tMtaal7ptOBeLQ+sg5KQusdbKQbn2CHvkSp9QqbFOUvuOsOUPzT+TA64KAHbPLlmDIRHUr07Hysh8baQj834WtQTtUoNd6.GOq0ckpCDthsvFXdNkAiyoo5TqOb4OWaaNF5UqIANMA6k3CGV7H0DM5wRHOhFH6TwdiYhWwV7WhiCf3hethnhScG0miWMY925d0jKuOm6h4gcVX.FaRUe.w17iILnZTiw2CJ+ZggV7FHMe4TcAWLnW3r.89DnQ91sI4xel3AZcoD62MSxsptOgQvIVkXeT0GB8Yhiqq6NXl7EUN2Ox0DiWenqAtdJN.u2HwsKjO8t3T8o2WHXb1+b6KgpOfB7s6n3G3BTwq3oCkduYhkWFeZ9kgMBw9whG6adQCUQ+UzRfyMW+n9K3VWM1qxfmRz0c4kVFEBWW7XeeU95GC29L48rxLrmOYF1ypyvdt2LrmOcF1ymMC64yOy8ntoN8qiT47ffFaqaZzwwzrhN8G8O.e9J+E
          

          Develop branch
          Win10 & VS17 / Ventura & Xcode 14. 3

          Christoph HartC 1 Reply Last reply Reply Quote 3
          • Christoph HartC
            Christoph Hart @Matt_SF
            last edited by Christoph Hart

            @matt_sf Thanks for doing this - I think it's exactly the level of complexity which most people are getting stuck, so this might be useful to a lot of people.

            Just a few remarks about the examples:

            Use the Parameter Range Editor

            Editing the parameters using the right-click context menu is just the fallback and there is this range editor that allows you to change the parameter range more quickly:

            38c39ff9-032f-4283-9e82-c99a280190c1-image.png

            Apart from the ability to drag the min and max value as well as the skew factor with the mouse, there's a handy context menu which allows you to quickly set it to different presets, or in this case, simple copy the target range to the source range (so that you don't have to edit the range of the main parameter).

            7551fe60-c3e1-400c-ac5c-5bb8b7688638-image.png

            Use XFADE instead of parameter ranges

            the panner is better implemented using a control.xfade node - then you don't have to fiddle with the parameter ranges and can change the pan laws by selecting different xfade algorithms.

            235e92ea-1430-4670-8926-ec2ae420349d-image.png

            HiseSnippet 1477.3oc6X8zbaTCEWqsWm+zRoEJLLbxG5gzYJAanTXFNXm3D2wC0IdxlFJmJpqks03ckVzJ6DCC24Fm6s9QfqbKeDXFNyLv2f9M.dRZs2cc1j53ZZN.9Plnmzae+z6868zSpsf6RBC4Bj0ZGNNffrttsyXlre89XJC0bGj0MragCkDQIinsGGfCCIcPVV4enRf0ZEP5eur51XOLykDKBgNhScIOh5SkwRaW6qnddMvcHGR8Sr56WqoKmUm6wGB3IucYT.1c.tGYOrZY4rQVE2sCUxENRrjDhrJrMuyXm97iYl0eDMj9LOhZPEjC7gLh2eDQLhRNtA2qiB4JYn58odcZOY+GhPV1si8F4Mdiaa2h1gNUdrW4l5IJEqQR+hUtzvLeJXV47fYFPxJAjJXfzsrcbEz.Y7LJ7bM6lLHH0ECt+jPwrVj0o104vBXxM8wCHMDvfoJrwCJW9dkf+b2ur6PlqjxYk3r83Rx9rMt65+v5qs9OtdoYmpa2LmSYFA2yiHxbZUDWbQJtAan+yHh6UZD1aHY5BgseZeZw4ym5Z10IVHm0jQk6GPhFGSJpjQD.E41f+6wM2AKwpfRjLXcADgjpfi0NjQ.S2DhVydGR3.IO.35mI9ALGdmgdXYZ5jJWJZBvejJFpBTrPpbbxbsY4XENe+Q4D9iWwtcNg6sraSkt8yFu4x.ufW6ea7Fkw9V161sKwUFC1B1MdxhldV9RmdtdT5IXSkwudzvRMdRkLSL+I63jf.AI.KHGxa6gGuQH1Ovib.fw6U5Ydb2ANzumb1Lm.CD1VshMb6iYLhW3hjfUbIUzBc.enjx50BKEzSfxp6Mz2AJo6RpGgNPlUNUtkYbY0XEGwgv5nG72vunIqnFaEMYkISlHsbOh7XtXfNbD8+Pvv36C0N4m18jJns773GWm6GPiXrPLPKqM2abPeNi5pDYVwDjtkOeHXjH3ZkaOdGvATrA1EbTiaik8U4BpZL.YiH1zcJoKksUpM4XMyNELiuB9pC0RwJ.+car.NuCpMqJqjyJehxLFFmZDjakyXmlgGol0E6gNREQUJosXXLhsUKcU6S5Bm4JPof+M0vG3EaFM67CVqBofVtYf1aqB7I1LQny3KQyr3hpxLjIqYU6GA9Sr.ghKwbHVziHU7KmiUEelN1JWRAQ0mYDMsOL8Pj0JpsWyNJC1SEqlhOiLcGMsnrHbLo702bZK7IyHCvgjDnxIij8hm+7espy.nMCs+MR5o89k2q1tm.o1ggZD.NQzh.3Uz.txUDhSDGUjvIi.XcVaCQsyX6WVcFaavyr1VuREeXEayGXlOyeVcqgRtOTgpyTddD8dEa+gdRJ5bSNMSeIn2ox7xLkJhDkxjWCLofrodhKgwxkxXob24uX28qan1rQz7ny7UR6sSfihyUXu1OWatvw29t676UMsw53y4x9vwGyBl6W6UX+kge351GPBIxL4dQbfozMS53+G6+ORrOYX47KGVT8kV2tMG5+UU7b4Wcbppu3C+3+3NE+qpy2wGSO8O04GSJyt7g4rGfrMmOvGq6S609lT2vLIPXfB65mqP2y06qGW5qwiHkdHAJ4qtzRkK3EK9s48EKBl6WrXeWIX9CEXVX.OLseh3SOjyT6wXgONDtLN46NP0hSR404XQlS8xpMfMYl53fkCE5dklz2Zhqeketu9Uxt6SeqzDqOiKCU3J34St36m8l612KmqPt1DL5PUW8aW1HhGjXnw36.YBcwPKLSjllX2hy3StESbT+.BbErd8HoauJqMzVRI1cPrjaW6.hGAmjAemZllx0MpuX9hK+qckY75CrMvsjJarzURbao7RI4mqWJYofwqfWG4Mx6.7lvF9XWA+oQWSVwSWUKA12L8CSulcK03RUPihthqc4MKi7gJbO00U4h+HnfY157IKfNe5Bny8W.c9rEPmGr.574KfNewEpi5vkn1WUobff16pa4vxZWFFXuZlN5e.SLLjjA
            
            Matt_SFM 1 Reply Last reply Reply Quote 3
            • Matt_SFM
              Matt_SF
              last edited by

              Ok now, let's take a look at the container.split node which creates parallel signal chains.

              Let's build a little reverb wit a Dry/Wet control :

              Add a container.split node to the graph and add 2 container.chain nodes. These will contain our stuff :

              83dd2341-b9a1-4575-a683-b08494f2978f-image.png

              See the signal cables ? You can see that the whole signal is send to both the DRY and WET containers and not split into left and right as in the previous example.

              Now add the required nodes like this : 1 gainNode for the DRY channel and a reverbNode + a gainNode fot the WET channel (type "reverb" in the serach bar to find it) :

              58076801-193f-4834-aa22-f5a30be985b9-image.png

              Now will be a good time to introduce you to another type of containers : the container.modchain. This one is here for you to put all your modulation nodes in. It can contain oscillators for LFO purposes, envelopes and more.
              Here we'll just use it to handle the Dry and Wet levels and for this, we'll use a nice and handy node that Christoph's provided : the Xfader node.

              Add a DryWet control at the top, a container.modchain + a control.xfader to the graph :

              b86ae466-b4da-4598-be8d-bf7679b31944-image.png

              In the Xfader menu, select "RMS" and connect everything like this :

              88ec8fae-c9df-4562-80cf-64e6edb44670-image.png

              Done ! How simple is that ? Now if you want to build you own reverb and manipulate it via your interface, just create parameter controls and connect everything :

              1c3d197d-c264-4fe2-9306-f17c48267373-image.png

              Keep in mind though to take care of the control's ranges, depending on whether you're controlling linear values, levels, frequencies, etc...

              That's all for today, have fun !

              Develop branch
              Win10 & VS17 / Ventura & Xcode 14. 3

              1 Reply Last reply Reply Quote 2
              • Matt_SFM
                Matt_SF @Christoph Hart
                last edited by

                @christoph-hart said in Scripnode 101:

                Thanks for doing this

                My pleasure, I wanted to do this for quite some time... Thanks for jumping in :)

                Use the Parameter Range Editor

                Editing the parameters using the right-click context menu is just the fallback and there is this range editor that allows you to change the parameter range more quickly:

                You're right to point it out, I was aware of the range editor but I'm used to the right-click... I must change my habits !

                the panner is better implemented using a control.xfade node - then you don't have to fiddle with the parameter ranges and can change the pan laws by selecting different xfade algorithms.

                Done in the last part, of course it so much simpler :man_facepalming:

                Develop branch
                Win10 & VS17 / Ventura & Xcode 14. 3

                Christoph HartC 1 Reply Last reply Reply Quote 0
                • Christoph HartC
                  Christoph Hart @Matt_SF
                  last edited by

                  @matt_sf I've added this to the "official" hise_documentation repo (it was basically just some file reorganisation and copy pasting of your "raw" post content.

                  Link Preview Image
                  hise_documentation/scriptnode/101 at master · christophhart/hise_documentation

                  The markdown files for the online documentation. Contribute to christophhart/hise_documentation development by creating an account on GitHub.

                  favicon

                  GitHub (github.com)

                  The "compiled" version looks like this:

                  Link Preview Image
                  HISE | Docs

                  favicon

                  (docs.hise.audio)

                  I would suggest that we keep this thread for discussion but put up a link on top of your first post to the docs so that people who just want to read it get a concise and bloat-free version.

                  You should be able to fork and create pull requests from the markdown file whenever you want to edit / add new files there, but let me know if you need more information. Just two things about the general markdown style (the forum is a bit less strict):

                  • if you use inplace code like this, just use one backtick (you've used three backticks which usually indicate a code block). And if you prepend javascript after the first three ticks of a code block, you'll get the nice syntax highlighting
                  • I'm using the > quote character whenever there's a background / additional information that does not follow the normal text flow. I've replaced all occurences of "Note: ..." with this format to make it more concise with the rest of the docs style.

                  Now back to the actual content:

                  Now will be a good time to introduce you to another type of containers : the container.modchain. This one is here for you to put all your modulation nodes in.

                  That's not 100% precise (and for this use case you don't need the modchain container, just add the xfade node directly. What the modchain actually does is creating a monophonic and downsampled signal which will not be fed into the original audio signal and thus is suitable for modulation if you put a core.peak at the end of its nodes.

                  Matt_SFM 1 Reply Last reply Reply Quote 2
                  • Matt_SFM
                    Matt_SF @Christoph Hart
                    last edited by

                    @christoph-hart

                    @christoph-hart said in Scripnode 101:

                    You should be able to fork and create pull requests from the markdown file

                    No problem, I'll correct everything and make a pull request this evening :thumbs_up:

                    @christoph-hart said in Scripnode 101:

                    That's not 100% precise (and for this use case you don't need the modchain container, just add the xfade node directly. What the modchain actually does is creating a monophonic and downsampled signal which will not be fed into the original audio signal and thus is suitable for modulation if you put a core.peak at the end of its nodes.

                    Oh ok thanks, I usually do this to make things clear in my graph but it makes sense.

                    Develop branch
                    Win10 & VS17 / Ventura & Xcode 14. 3

                    Christoph HartC 1 Reply Last reply Reply Quote 0
                    • Christoph HartC
                      Christoph Hart @Matt_SF
                      last edited by

                      @matt_sf There's a container.offline node which will not pass the audio signal to its children, which is better suited for "hosting" control.xxx nodes as the mod chain has a little bit more overhead.

                      1 Reply Last reply Reply Quote 1
                      • dejansD
                        dejans
                        last edited by

                        With the new development version, do we have to compile scriptnode same as with the master? What is the procedure here?

                        Matt_SFM 1 Reply Last reply Reply Quote 0
                        • Dan KorneffD
                          Dan Korneff
                          last edited by

                          Is there a vibrato or pitch shift node?

                          Dan Korneff - Producer / Mixer / Audio Nerd

                          Matt_SFM Christoph HartC 2 Replies Last reply Reply Quote 0
                          • Matt_SFM
                            Matt_SF @dejans
                            last edited by Matt_SF

                            @dejans for "small" scriptnode effects HISE will include them directly while compiling your plugin, so you should be able to use SN effects in your projects whithout burning too much CPU (I didn't try it with SN synth though).
                            The scriptnode workbench is still under development but it allows you to create DSP networks and compile them (and thus optimize them) before integrating them into your HISE projects.

                            Something to read : Snex_node Needs to be wrapped into a compileable DSP Network

                            Develop branch
                            Win10 & VS17 / Ventura & Xcode 14. 3

                            1 Reply Last reply Reply Quote 1
                            • Matt_SFM
                              Matt_SF @Dan Korneff
                              last edited by

                              @dustbro A pitch-shifter example is available int Christoph's repo here : HISE tutorial.
                              I didn't try it but with this example project it would be simple to add a LFO to modulate the pitch.

                              Develop branch
                              Win10 & VS17 / Ventura & Xcode 14. 3

                              1 Reply Last reply Reply Quote 0
                              • Christoph HartC
                                Christoph Hart @Dan Korneff
                                last edited by

                                @dustbro PitchShifter is here

                                A vibrato should be pretty easy to do: just modulate a jdsp.delay node with a LFO inside a frame block.

                                HiseSnippet 1810.3oc6Z07aaTDEeV6LIwIokTnf5QefCoRgH6RofDGhyWtxh5TqrgPqTkBSWO1dq2cmkcGmDCBDG6sdfS8FbhqbEINDweAHwI9m.kKbgKk2rytd2wdiqsqSp.QNT44Myru2626yYlVyiYP88YdHsb620khzVBq20g2ZqVDSGTksQZWEWk3yod4kj1rqKw2mVGook8tBBZ4lAE72YquIwh3XPiIgPGvLMn2yz1jGSsVoOwzxpLoNceS6Dq91kpXvb1hYw5.xSVbAjKwnMoIcWhXYYvHsY2otIm4oyIbpOrlMY06p2hcrib8GX5a9XKpXPQjN7gjjQa0xzpdsHc0Ggzv0h07rRM+53pl0M6QOFAVNXh7w6HIFnkYXhTwwPjzRHRyHEoqg0M7Lc4wyHjmEwUb.CRCB.0IEE4ZQZmh2hAKvgulMoMsrGLn2FV4NEJrZd3et4G2niiA2j4jm4rKiSuuyJ2bguZgbK70Kju+oZzH04DrwiYYQ8RcZg00aXabEmN1Ol5sZ9iHVcn8VHn9pX5riFlZH05DKj4TwwjeeWZ33xLq5BrR76As.nPXC90mVYaBmHLJgzf04R83lBwQaa5QfWszDkCuM0uMm4B90CX+.OGV8NVDtp6jHtIbB.OTrgBCkiuIuax3pwvGqvP8wFUQ7Z3ZlbiVoKiYRQFAj5hPFCiLuBdmFMnF7XAbFb4GLoggEF6vvEBCCAdJX9RgCyW9AESM.7o3XmcWOpKwitOqlEo6J9DaWK5dfLtZ9GawLZqa9kzAiPbkhvlhUrhQKhiC0xeRBjlcJkbBsGqC2zoYUB2y7DH84tcr0gzzFzsBkNflVFQLjbbAwXgegN0odvfW.+ENYQwXsvIKFMYhvuco7iYdsCLGg+FLFRr2O.jOrwIEQaXYwNdKlsqYnWJXCBnUiY00sEywzPPRthHIcCaVGfIghqVlcY0A.X1xDC.n5VivaI7+E4R.mMp2ZF8b5T3sXaQkpjZJvFag3KJTo3U.3cMhGTCCxAKRejQKahzIRONwHHdJijOU7OPLqAwBcfvhJ1T.GkHRfDikEmaH9v25v.mIjhRbiDJgxpFcQ+USPyjPPW.aypKgREg75IDxdq3xR.wIDvkvLeCnsDQhPz.NCdz0RL8jJehkAg+mDUaYaSeWHqvlcfraxbOJTDJgSc5IQAH6.w30g5WAaOJnIgmE3E2aD76plNgpbbV5pjS5i1xkz4TWQZnjUbzaSOVBBIoJvoYE0KnnA9xnDrdtQi0uaJrFxIbtrdQbYO5Wzg5XzMl+O5Y+5esxidw5azgyrgrbAUnPCGGNa8AElBiINrTfvjeOQhGz.eez3aH.lMlFh6Bp6EFqGlgXNbsVD+WhSvEDumMn6oTT6Dwx4v9lMuEjNQMP9pXvAo0ZQyMFQwYThhUB4ztLfa4Gn2m4u+lm7K7u6oJ57r3lCjbcQYlqliYN0gnsYGdT9COcPsEzLUs86e9y+4A8qOs4O81kNeC7COcbBvSA0K8rRijb74u01+dX1FcaFi2B55Iovr7O77+nZoWB+mF3vR38n9Tdel9dQZJldWJocpl9fIFCS+LJl939+2m30jxC726mHRadACp.ef4wmz.NUuWL5HnF49tiCA50Lv7M8iS14DnQae+fl.Ak5htRaR3umVqX.VNnwFn270BmcRsB8BGiZp4MDMemPXBQMY+rn9VrZ454w2C5zh3kpoEoer3Pewl5LIIDdVXGZvQO7UGBF4XefmTmB.qpOvhvojAhA22ynY7qTZxM9ShbmKTtK95TvO2JKycIUYIZKmSx1977mCa2whahN2yNImdhaWNsCRzy+RgoWAn56tV3TSmZcYlB0XRG+6UiYNr7pQG3yLAcSWYr6lN1yNwm5aqs5OdVecSqzZUTXx+i+WZ3uR724NPEvjwJgW1wzO6QusBMhdiYN3OWezxxF1kpRJ1vF9l9cQctYWCgm4v5tT.hu.Qmd2N5HgNJ2AQekghO56z+v08CTaxXssIA2+1q7MgeU4jP2zPEgfmVJ3tzdmfw4+LxQz72kB0JD5bwg75R+1n95Rti7qKceCNv988HN9tLeUbhZatOyQniwD+TepvJHOxeB5awHdoN0YqWFTxT2iNg2wKn+qn6iLgyRV0asclQ6VaUeUgDqOkK4dlWCO+0z4oIdM95IJOMPtHYT2TbRicbNhZAAFAx3aBQBMHPuOQTUcrqxbXQ2NcrUeOJ2yrYSpZghzTnM3bhQ6XJWuzdTKJwWI5W1nePy+SFVL9uVYp1qafkhadQzX9+89pWY+O8qdco79NWF7vlX3wNL7n2B+z4Cn.5sSv+IBxgqJFmuH5nviMiKrVAjMjg6PCCAD+dPByz2yslf879Svdt8DrmOXB1yclf87gSvd9ngtGQwkv1cEgb.gZ6Hu2Es3aLJK5e.xKD7r.
                                

                                Be aware that this is another contender for worst CPU usage for a simple effect (if you compile it the CPU usage will drop significantly).

                                Dan KorneffD 1 Reply Last reply Reply Quote 1
                                • Dan KorneffD
                                  Dan Korneff @Christoph Hart
                                  last edited by

                                  @christoph-hart I'm trying to test out the Pitch Shift example. Getting some errors when compiling the DSP from workbench

                                  Severity	Code	Description	Project	File	Line	Suppression State
                                  Error	C2662	'void scriptnode::container::container_base<ParameterClass,scriptnode::wrap::fix<2,scriptnode::wrap::fix<2,scriptnode::wrap::frame_x<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::control::resetter<scriptnode::parameter::chain<scriptnode::ranges::Identity,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>>>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::xfader<scriptnode::parameter::list<scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>,scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>>,scriptnode::faders::linear>,0>,scriptnode::wrap::no_data<scriptnode::dynamics::envelope_follower>>,scriptnode::control::xfader<scriptnode::parameter::list<scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>,scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>>,scriptnode::faders::linear>,scriptnode::wrap::mod<scriptnode::parameter::chain<scriptnode::ranges::Identity,scriptnode::parameter::from0To1<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,1,PitchShifter_impl::smoothed_parameter_mod_0Range>,scriptnode::parameter::from0To1<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,1,PitchShifter_impl::smoothed_parameter_mod_0Range>>,scriptnode::control::smoothed_parameter<scriptnode::smoothers::linear_ramp>>>>>,scriptnode::container::split<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,0>,scriptnode::wrap::no_data<scriptnode::core::peak>>,scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>>>>,scriptnode::jdsp::jdelay,scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>>>,scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,0>,scriptnode::wrap::no_data<scriptnode::core::peak>>,scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>>>>,scriptnode::jdsp::jdelay,scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>>>>>>>>::setParameter<2>(double)': cannot convert 'this' pointer from 'scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>' to 'scriptnode::container::container_base<ParameterClass,scriptnode::wrap::fix<2,scriptnode::wrap::fix<2,scriptnode::wrap::frame_x<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::control::resetter<scriptnode::parameter::chain<scriptnode::ranges::Identity,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>>>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::xfader<scriptnode::parameter::list<scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>,scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>>,scriptnode::faders::linear>,0>,scriptnode::wrap::no_data<scriptnode::dynamics::envelope_follower>>,scriptnode::control::xfader<scriptnode::parameter::list<scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>,scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>>,scriptnode::faders::linear>,scriptnode::wrap::mod<scriptnode::parameter::chain<scriptnode::ranges::Identity,scriptnode::parameter::from0To1<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,1,PitchShifter_impl::smoothed_parameter_mod_0Range>,scriptnode::parameter::from0To1<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,1,PitchShifter_impl::smoothed_parameter_mod_0Range>>,scriptnode::control::smoothed_parameter<scriptnode::smoothers::linear_ramp>>>>>,scriptnode::container::split<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,0>,scriptnode::wrap::no_data<scriptnode::core::peak>>,scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>>>>,scriptnode::jdsp::jdelay,scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>>>,scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,0>,scriptnode::wrap::no_data<scriptnode::core::peak>>,scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>>>>,scriptnode::jdsp::jdelay,scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>>>>>>>> &'	PitchShifting_DynamicLibrary	C:\Users\Dan\Documents\GitHub\hise_tutorial\PitchShifting\DspNetworks\Binaries\Source\PitchShifter.h	290	
                                  
                                  

                                  and

                                  Severity	Code	Description	Project	File	Line	Suppression State
                                  Error	C2662	'void scriptnode::container::container_base<ParameterClass,scriptnode::wrap::fix<2,scriptnode::wrap::fix<2,scriptnode::wrap::frame_x<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::control::resetter<scriptnode::parameter::chain<scriptnode::ranges::Identity,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>>>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::xfader<scriptnode::parameter::list<scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>,scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>>,scriptnode::faders::linear>,0>,scriptnode::wrap::no_data<scriptnode::dynamics::envelope_follower>>,scriptnode::control::xfader<scriptnode::parameter::list<scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>,scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>>,scriptnode::faders::linear>,scriptnode::wrap::mod<scriptnode::parameter::chain<scriptnode::ranges::Identity,scriptnode::parameter::from0To1<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,1,PitchShifter_impl::smoothed_parameter_mod_0Range>,scriptnode::parameter::from0To1<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,1,PitchShifter_impl::smoothed_parameter_mod_0Range>>,scriptnode::control::smoothed_parameter<scriptnode::smoothers::linear_ramp>>>>>,scriptnode::container::split<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,0>,scriptnode::wrap::no_data<scriptnode::core::peak>>,scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>>>>,scriptnode::jdsp::jdelay,scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>>>,scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,0>,scriptnode::wrap::no_data<scriptnode::core::peak>>,scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>>>>,scriptnode::jdsp::jdelay,scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>>>>>>>>::setParameter<2>(double)': cannot convert 'this' pointer from 'scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>' to 'scriptnode::container::container_base<ParameterClass,scriptnode::wrap::fix<2,scriptnode::wrap::fix<2,scriptnode::wrap::frame_x<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::control::resetter<scriptnode::parameter::chain<scriptnode::ranges::Identity,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>,scriptnode::parameter::plain<scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>,3>>>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::xfader<scriptnode::parameter::list<scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>,scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>>,scriptnode::faders::linear>,0>,scriptnode::wrap::no_data<scriptnode::dynamics::envelope_follower>>,scriptnode::control::xfader<scriptnode::parameter::list<scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>,scriptnode::parameter::plain<scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>,0>>,scriptnode::faders::linear>,scriptnode::wrap::mod<scriptnode::parameter::chain<scriptnode::ranges::Identity,scriptnode::parameter::from0To1<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,1,PitchShifter_impl::smoothed_parameter_mod_0Range>,scriptnode::parameter::from0To1<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,1,PitchShifter_impl::smoothed_parameter_mod_0Range>>,scriptnode::control::smoothed_parameter<scriptnode::smoothers::linear_ramp>>>>>,scriptnode::container::split<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,0>,scriptnode::wrap::no_data<scriptnode::core::peak>>,scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>>>>,scriptnode::jdsp::jdelay,scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>>>,scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<2,scriptnode::wrap::control_rate<scriptnode::container::chain<scriptnode::parameter::empty,scriptnode::wrap::fix<1,scriptnode::wrap::no_data<scriptnode::core::oscillator<1>>>,scriptnode::math::OpNode<scriptnode::math::Operations::sig2mod,1>,scriptnode::wrap::mod<scriptnode::parameter::plain<scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>,0>,scriptnode::wrap::no_data<scriptnode::core::peak>>,scriptnode::control::multi_parameter<1,PitchShifter_impl::bipolar1_mod,scriptnode::control::multilogic::bipolar>>>>,scriptnode::jdsp::jdelay,scriptnode::math::OpNode<scriptnode::math::Operations::mul,1>>>>>>>> &'	PitchShifting_DynamicLibrary	C:\Users\Dan\Documents\GitHub\hise_tutorial\PitchShifting\DspNetworks\Binaries\Source\PitchShifter.h	308	
                                  
                                  

                                  Has anyone tested this successfully yet?

                                  Dan Korneff - Producer / Mixer / Audio Nerd

                                  DanHD 1 Reply Last reply Reply Quote 0
                                  • DanHD
                                    DanH @Dan Korneff
                                    last edited by

                                    @dustbro I'm trying... So you can't load a snippet into the workbench? What's the best way to get the ScriptFX into the workbench for compilation?

                                    DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
                                    https://dhplugins.com/ | https://dcbreaks.com/
                                    London, UK

                                    DanHD 1 Reply Last reply Reply Quote 0
                                    • DanHD
                                      DanH @DanH
                                      last edited by DanH

                                      @dustbro ok, managed to compile the scriptfx. I have a file called 'project.dylib' in the dll folder. Opened up the project and everything looks the same as before - The project doesn't use the new dll I don't think. What am I missing?! :face_with_tears_of_joy:

                                      DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
                                      https://dhplugins.com/ | https://dcbreaks.com/
                                      London, UK

                                      Matt_SFM 1 Reply Last reply Reply Quote 0
                                      • Matt_SFM
                                        Matt_SF @DanH
                                        last edited by

                                        @danh Same here. Managed to compile the network but not to use the "frozen" dll version... Works with expr.node networks though

                                        Develop branch
                                        Win10 & VS17 / Ventura & Xcode 14. 3

                                        DanHD 2 Replies Last reply Reply Quote 0
                                        • DanHD
                                          DanH @Matt_SF
                                          last edited by

                                          @matt_sf did you get a .dll file after compilation? And do you get one when you compile an expr.node?

                                          DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
                                          https://dhplugins.com/ | https://dcbreaks.com/
                                          London, UK

                                          Matt_SFM 1 Reply Last reply Reply Quote 0
                                          • DanHD
                                            DanH @Matt_SF
                                            last edited by

                                            @matt_sf I get this message at the end of compilation, doesn't look quite right to me!

                                            Screenshot 2021-11-30 at 14.16.03.png

                                            DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
                                            https://dhplugins.com/ | https://dcbreaks.com/
                                            London, UK

                                            Matt_SFM 1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            32

                                            Online

                                            1.7k

                                            Users

                                            11.7k

                                            Topics

                                            102.1k

                                            Posts