Hi everyone. Mathieu from France, 37. Musician, bedroom producer, intermediate graphic designer and developer. Still learning and getting better thanks to all of you !
Best posts made by Matt_SF
-
RE: The world of HISE
-
Scripnode 101
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 nodeRange Editor Shortcuts
Shift + Click : Enter value
Ctrl + Click : Change value by increments
Double click : Exit range editorI 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 :
Create a scriptFx moduleThis popup will show :
Create a DSP networkCongrats ! You've finally created a DSP network and entered the scriptnode graph editor :
-
RE: Have a nice christmas and new year vacation!
Merry Christmas and happy holidays everyone !
-
RE: Scripnode 101
Let's build a "Hello world" Gain Knob :
Once the DSP network created, click into the graph. You'll get this popup showing :
Here you have access to all available nodesType in the search bar : "gain" and click on the gain node to add it to the graph :
Here we go :
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" :
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 :And change the min/max values like this, and click outside the box to close it.:
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...
... and click'n'drag a cable from the control to the parameter you want to manipulate (here the gain parameter) :
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) :
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...
-
RE: Happy Holidays..
Yes, merry Xmas and I wish a happy new year to everyone!!
@Lindon you're not the only one who deserved a lot of t-shirts, but that's what makes us better at what we do -
RE: Arpeggiator - all hell breaks loose message
@d-healey Never seen this message.... Seems odd since you're not doing anything in the noteOff CB.
... Could be a nice chorus for a AC/DC-like song though -
RE: Scripnode 101
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" :(Reminder : to rename nodes : right click on the title bar)
Now, add a gain node and duplicate it with Ctrl/Cmd + D :
See the cables which connect every nodes ? this is your signal flow. Follow it and you'll never be lost :D
Now we'll add aparameter control, and set its range to -1...1 :
Connect the Balance control to the 2 gain parameters :
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) :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
-
RE: Clone pack EQ with different frequencies
@d-healey you have acces to 2 special clone nodes (sliderpack & cable).
control.clone_pack
is what you need :HiseSnippet 1759.3oc6bs0aaaCElJNzI1sYHcsOMfAXf1GRQ6LrSRyk0Glat3Nu0j3Ukk09TFiDcLWjHUkjah6vdXWdn+.5da+X5OfNfBzm2.1+ft2GV2gRxVRwNdNtWVrmb.BLIOj7iGd993g.gopsPi53HrQJY1toEEobdrZSta8UqSXbTk0PJShMINtTazJMsHNNTcjhRpaKaUIy3HuOu7SVgXP3ZzvpPncDLM5cXlL2vZqV5yYFFkI5zsYlQrd9RUzD7UEFhF.RRgKfrHZGP1mtIQZ1XXjR500YtBaUWhK0AoL9JB8lp0EGx8seGlCaOCprPQjJLP9UWVXnKQrrVzp0YF5UashcPvfVMb8mxe8eI7FLcV65C8CS60PtvdD0enLVb3kJF7JFEdEh.ut.IkHPZbeHcArplMyxMrEIdNGtBG1VpQ.2dTn3aKR4o3UEfAb27ljCnksgBs6vLKTnv0yA+5p2rVCtlKSvyI3aJboawm4pY+1rYx9cYyc7lpUqqsImFaggA0tqMK2os6UGmg2vbOp80y8PhQCZaCgkebeJ9j8oQ2x07W0QLTvqvYtaYQ4mTf.JvUI8+AnBldWOu+6G38UMX5T6pPbIhAN5ovgUTD4Ac.hJYfASm3RPJ2DOeg712d8MWNO7Y4UgeM2VxudsHk+lU9pst1c1aI9hr6abe2s15y1aoEyiPeYk0jCR.b.jAn0hZ6xjNBk0nOD3V9AGYvqQcNvUX4YqokfKWGJoOEf+HIv+c.3MkeoN7EGuVukonAOB68JkrZ4ypn6oT3M14JeOvm1YXKPXD5MLHtwYQRoifFfvfXgtx3StCysYTok2XTq9EhW.Wk4pUu6XbrtfQXa5sAFCDjlBudsZTM2P.NNt78d6n9Dc5mze5+.7sMD6QLBcTP.IfDpuJzGFzbt1smqsAE6wQFOueOxvpuOxPIUuNhn3.dDw3m4NhneiiuXGaMNCarsTi1rs6JZ3x36uAw0lIEg2rgoJDNqQgYmyoFxC8TFSd7je4BxxROfJkq6U3UvmfFKJKqDzXwVM1EFcGY3cdbeQYe46ZJag+2QYSNc7rLeMVt4X+4OaPRPvb5SkhjSTTPHo1sS4xoMUMHW8GiCyK1xlZQroaKpZPZNiCwzxfdW.4WO2dFBsCTYOh1YxzAIlshzhYzBTOFjbtS229ph+2qs0NqczlT2CE1G3sIE7cjxDxcjLX.P5LNAcKCCwgxTjYAAtv1hWcUEFMspK3LMYU9VzBlsxA1GqeJwYaByPFoq1vAtPg9VbUvXOQQkT6Psc7F3IvExC+.Q9aJzk2KnLQC7pMqRbqKoPZszayq0NtMDnwhaf92Rwz2+.3yzKEe4shSE4dA9wmxR.6aL+nwJN6HaUiXf1w+JJv5PNlRyaANeS0LfqNrq7d2nXn8RdnEhYxGwhSADGOJDQg5FaSr2m55DbGGNUyeOwCTxqWLI14g01k9.TUhMwjB2bUV64vksoOnA3wa5MO.43nVWUJJAKVQo6fqSOpE9VGh80gSPVK7hZvmZWK9E05ixnPv44PaWBHRav3At7P05MHGcr5JTR0kZII0QsS8.5g9aBQq0+V+.QZU4FgCpigG064G79cL+vb0w7CzrSb9m.6O.cN29ASS5ajWnB5ji58Zt+ChjJPAKZv1VG+qjRVejc.H3dPXDoZyHx5uHRKMcp.FglTZC8uPfOokRlzO4IO4UGe4Dt.d8HvJQHvsoKwP5z3ZLCouIePqCp1xw4Zk8G1vuFkiIEmiywfwKNUIcjP0I5LTc9RcDp93WTpuBUK8il+Z.UITpn8P8Keb0+5uW5GJcqFtBS3LNurV5Euozby8hiyae5yd1k6Ovft7e9bOvjB+E8lu1EmvrOsS95rkNc70zdYTFN0E9sqj96+4K2+q+WOciu9hq8hfMCUSgvsNjRPL+Po+3Q+zfnaM8oT2LsLW1Njsltzankdul5L304DHoI8dE.HoXQDedunhOEO6q9jIP8Y1D4mD4mD4mQJ4mYGdjelKQ9IQ9IQ9YjR9YtgG4m4SjeRjeRjeFojele3Q94FIxOIxOIxOiTxO2X3Q9YgD4mD4mD4mQJ4mEFdjeVLQ9IQ9IQ9YjR9YwgG4mkRjeRjeRjeFojeVZ3Q9Y4D4mD4mD4mQJ4mkO6K+jMP9oXgD8mD8mD8mgR8mA8ugcrRVou+M0e+5WYPbJnS49wTXUKClqJaedn3V3fE2wrhPbfIw6YkLPuH62IOBl2EygIQyVrav6.QFkLoWMf7B26ePCYvaHKmK7gvKe.LHSlNaWMM4ax5iJhPcuOyN.8YtAnOyO.84FCPeVX.5yhCPeVpm8Q9pFCzZkOqFnhpq6ejnRKUA4Ce3e.aPmIkC
I've set it to use an external slot. The only 'issue' here is that the values of the sliderpack use the 0...1 range.
Edit : snippet.
-
RE: Is it posible to invert the value of a filter envelope?
@RastaChess said in Is it posible to invert the value of a filter envelope?:
@Matt_SF haha, I don't know what to say. I'm embarrassed.
Don't be, we're all here to learn.
-
RE: Custom Load Samples screen for VST instrument [Level:Beginner]
-
LAF is the way, as @DabDab said
-
You can add one of these definitions to your project's preferences :
-
As @DabDab said, or you can build your own locate function using the FileSystem API
-
Also possible with a custom sample loading / locate function
-- Edit : 1. or build your own popup linked to your custom file function
-
-
RE: LAF Wafeform Tips?
@ulrik You never fail to amaze me with what you are able to do with LAF !! You are really good. Bravo
-
RE: Audio waveform tile border
@parabuh put the tile into a panel and increase the size of the tile until the border disappears
-
RE: Multi Sampler Enabled Buttons
const var Blackoutimg1 = Content.getComponent("Blackoutimg1"); // better use an array const grpBtn = [Content.getComponent("Powerbtn0"), Content.getComponent("Powerbtn1"), Content.getComponent("Powerbtn2"), Content.getComponent("Powerbtn3")]; inline function onSectionPowerbtn1Control(component, value) { Blackoutimg1.showControl(value); // better use a for... loop for(b in grpBtn) { // call this function to change //the value of the buttons b.setValue(!value); // call this function to trigger their callbacks //and actually turn off the samplers b.changed(); } }; Content.getComponent("SectionPowerbtn1").setControlCallback(onSectionPowerbtn1Control);
-
RE: Math - Modulator question.
@lalalandsynth You have 2 choices :
either you keep your scriptnode graph as is, and only compile the node :- select the
expr
node and wrap it into a DSP network :
- Reload HISE
- Click on the menu : Export > Compile DSP network as DLL
- Reload HISE
- Compile your plugin.
Or, compile the whole network directly by allowing compilation :
- Save your project
- Click on the menu : Export > Compile DSP network as DLL
- Reload HISE
Choosing between the 2 solutions depends on your graph and on your project. You'll find more info in some recent threads.
Also, David has posted a video a few days ago on this subject on his patreon channel. - select the
-
RE: Linking parameters to SNEX
@dustbro Again, thank you for putting us on the right path :)
I made some tests and found out some things, so I'll leave that here if others are also having problems wilth compiling the DLL.
What I did before, and what generated error when compiling my networks : I always enabled "Allow compilation" of the whole network >> this generates errors. You only wrap and compile into the dll, the
node
or thechain
containing the graph. ( @DanH )I tried to compile more complex networks, but some nodes seem to throw errors during the DLL compilation process. (i.e. the
xFader.node
).
Also, avoid renaming chains/nodes/etc... during the wrapping process. I'm not sure but HISE doesn't seem to like it.I managed to compile a
SNEX
& aMath.expr
node and it's working fine. I also managed to compile a chorus & a delay into a DLL, then compiling the whole plugin, for the sake of comparing performances. For a simple graph, there's not much of a difference (on HISE's perfLabel, there's about 1-2% of performance gain, but it's worth testing it with more complex graphs).I'll make some more tests during the next days...
EDIT :
I'll update a list of the nodes which produce errors when compiling :control.xfader
control.converter
-
RE: My plugins , Gui and 3d Work.
@ursbollhalder jumping in : export animation as PNGs with blender and (I personnaly) use this to stitch them up : https://www.wavesfactory.com/blog/posts/strip-generator/
-
RE: Scripnode 101
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 2container.chain
nodes. These will contain our stuff :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) :
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
+ acontrol.xfader
to the graph :In the Xfader menu, select "RMS" and connect everything like this :
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 :
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 !