Scriptnode Synthesizer (how to :)
-
Hi guys. Starting to create a polyphonic synth using scriptnode. Should I use a ScriptFX ? (in that case, how to make a polyphonic oscillator)
I started with the Scriptnode Synthesizer module. Everithing works within HISE but compiled standalone crashes. Always.
Anyone is compiling a Scriptnode Synthesizer successfully? ?
HiseSnippet 1655.3oc2YszaaaDDdosV4HGmlj1bH.8hNzCI.oFj1N1NHGr7yFgD6HX5ZjaFqIWKsvj6xRtz1JEEn.sG5sd1mZA5uhdqW6gBTf9Gn8eP9GzNKeHtzR9kRbbQ3ACuul4alcluYHUqPgCMJRDhLpsU2.JxXBrcWtryxcHLNp4JHiOAS3DOQ6chTyaNo4jVnk5FPhhntHCiQ+B0FMpUAk77lEVh3Q3NzhoPnsELG5KX9LYwrsZ7blm2ZDW5VLescOSilNB9xBOQL.pQwln.hy9j1zMHpsMBFYTcUWlTDZKIRZDxnxRB2t1cDGxS2+1rH1tdT0.KjMHnzoWS34pPrZVzxcXdtsxM9HDx.2pvULZpq3d30YtrdyW3RtSxB0KNgt+vXjxvazRvyRGdlZva.PxPCRURgzcw1Ngr.YwJJ7bSbStjFtGAb65PIcuHieCur.1.WNoOYe5ZgvfdG3AyZZ9n5ved3S2Kl6HYBdcAeCgj9R9Cd33e830F+aFu9IWZu8F3ZJ0DJ77ngCbY0Mc3YcvGvi82kF9n5GP7ho81HX9k8o3S2mpek6jZ0ZaTvaxYxWFP4mVf.JyUo7+YnB1pLw6+QYdeaOlKMDw.m7X3myE6ZgR.rdZ.5KatBQRxECHQPKAzPISY.FqPO.xIRuTqgWgFsuTD.g2KK7CDbk9MtgLKJLUoq4IHRFu8VLvPUp91X8orPGUn9MZzsXPyFY.HUa2JI30FRu.aFsa67TsIvyL0bya8DSy4MQLI0WOGrX7T4gqE.cry06T.s+NVGZa0HRRCrYuN2003ed82uPP90QSPD2OSpbgKsthZhFwhngV.sPHvH.QwpcMN1lb3NsUInn9yZf7UgarGQVNIVwbks.DEVJyQkdviXxt5WomLytxEKy9rIdtnv8t3VLoSmAi2QF.dgHuqZ7NZdD0p6sG0QV.1J30d0YRJV4hk.ewgRsbnjECppUk.kSM94zqg8mWzZXAW3ZX4LwOBeYX8pdE3zLpdUUn68Z5vae166l5x0xwnMyOvitJ+.pGPymfwOF302iD6IymsbP25BtHnifybziy1jJCYsaSC0w9.MnEkRnynhYtWiModTRjVf3m03ELNkDB9I5P5Krtz8nLv6q6iSgacUlR8OLXcG8CHV228ttafW8HYHw5+42vYvbpqKXtoHV0B25DHsGZSBuQreZuY.D4bpmpaWiQT8klN1TMVAHaJ2MYv+BOYKZoFajsnU9hEszh1fJOTDteRla1+CUDxHqhBxlJo5oEZQOOwgsDdcyYoRrRZXjJO.5sS8tflo6R0MHKKCIYaoSjaDK5KhUcJlZIOiDsEg4o5awXjMRnlptFwAbscaQfx1PVmpyc3FhFNoSuapAfvh6rDeNbWzJuqvnTbnDedg3T+FfL+j1VUuJ4np0UdiLbfUJZLLoiaTHpDltCllwhOY5pk084nGrVy+ojlpQP30HJEda0stFx2N8kIR8VH6CUTPaQBaSkIPUehr2ufSS5oHp7vLyR0f7DXQjCzrhJ3G0Ru04pIURKql9jZx8oG8n7WoYEVTfGo6Rw.ETZcfRynrKtK8HEmzmagVEZuwERBRNsxefzLVHEq2H.Mqy34luJ.CsN4nrw0vVlvCLmcuWZ3dvdRlEdrl4IlVVyBEr1mdX5cW1FdxbyNm0ryaM6LS83omZ5r79r5m4RuBjo7SGe7uu.RCNUNc3fwVvXkntUlndAEBPPkVFccXZUwOC3bxARU7TlWWHYLnCHGRWTeB+R6iqgsiiTTBHss93qGqpFNuQKsXmO8oS+K+XigN1Y43vCnmtsgOOYUXWEx9l3hlIKc32ZIq3LjzSHzhlj5wUgzXUKw.0GceHcRsk0qEedL35LqCMMUZgxx7TYEOKQUUcvwaEc+oEykM2cZXW9abjzLgdflVe9I91jt06SxnyV0yznOU+C+0IU8Oe7w+Z+ptw24+GKjFvrVH8qhobmtmP+e69MNG8+lE52zMujl9DI5u9lpfHTexGc488fxtj9d83524pFgNcUOFtUmRTJC5derqFcm0BPeRYwXovGbHIehoRIBnyrelIvMi1VspCoW8PP.KID66SR59bn95nuW5U1m3DJ1wI8KynLtajLCPzvS9AHpgWWMtduO4aJ6mOyksiiSVCOnAeloFhyL8PblYFhy73g3LyNDmYtg3LyelmQ8IpxhTU87BSzZ0TFbiU4D3MxRJif9OPy8EXB
-
-
@ulrik thanks for confirming! yes I know about the parameter! But I think is the "Allow Compilation". Disabled that and I'm able to run the standalone compiled. But I get no sound from a Faust Oscillator once compiled (I do with the factory oscillator).
Will continue investigating -
Confirmed. No sound out from Faust Nodes on Scriptnode Synthesizer Module once compiled. (allow compilation for nodes disabled)
HiseSnippet 1188.3oc4W0raiTDDtG6zYiCAEVzdXO5CbHqTHxNrrfDGv4Gavh0dsxDh3VTmwssa4d5dnm1wwf3YfWCdL3Qfa7ZvavRUSOS7LgYCdMrKHvQJZ55md9lp9ppqdfQGvii0FhWsyWDwId6P8WnrSNYBSnHcOk38dTshe4H1rX6kwBEmb7hHVbLeHwyq5WfV4UaCRxue6yOlIYp.9RQDxEZQ.+4hPgcozAs9JgT1gMjetHLm0OsU2.s5DsTOCPTUZCRDKXJaLuOCMqBk3sY6gBq13aYVdLwaii0CW3OQOW4r+BQr3JIGWzj3CajSbGsbHhX7YxISDxgCx9xiIDO5fkwgpt3vin8DCE2JOe7.UTeoG4iGdUJBupEfWyWE7JARd4fzFNH8PpefQDYWpAwy6P6prbyHVPwTiyVh2OSOQCFnrGDxlx6XfE25vdOqQi8qC+6Ie1nYp.qPqpqU80V9KT68js+9sqs8Orc86pZznR0guFiVJ4lRUiYZy843dpYgWwM6W+ZlbF+VCgO+hwzMWsXZf6qNmgZUWkv9hHd55kjhlkjAHogM3out6oLKCSJox.6h3Fq.gi2o7qAFtKEUidJOdpUGkXaXDT5.6f2V1TNkKozQpYVgZ74B.1B.A6RyKpI4FfR5Ig27B7geZIXbuk2MgB5CEI.ZIWMNqfo1lfkuDKjDVdXAojhROLuXxejpAjb8vYRlsHyGK2SU.otBzMjSohE1E4aGb2xgMd0otFkVsVZhYEg6CoCD1fIki2JkfWHA+lFuUyRfsGMhGXWB1Mnc9l6sSxe6PoVFTbbxjt9IP4woRT5g75nXdrHlaZdOM9+kUswezJ23Oq809zWmVEatxAs7sJJRqyYeI8k27M0QEuUqM9qWJWc0f6exIa0xvnuHLRxaqtlKgVqIX78gdovXGRalzhLvdZkNZhVIBxS5NiaMhwi4l7XuzOnirVX1hkRdTqy3RNKNGq7CZ8bXfGlAhS70LV75eJeo4qGScvsNV1T++Fsfq9+9Vv2WnaKZ6arFVy+kmgSg4g+SAyyzyvwl5wfxdbpo9yBcyEAPTo3xXb.pJ3.Tt0Mv0Hf74pgIKdI7KUYSbsWpxlYJyMHXetct1LMoxM8Y3DALNrK8z3nTQ84yIGIk543DfhThODVRjMPKWj01xqhyhLvdTndFNtnCweIK9blPhlcA2DmrIOf13.3OnJoeROIZGV.DSWLfAGdCka3PuPpgaNH31TzcgV9LEtKYm55hK.hBSlYEurU0bC55ZVgqfzZEbi2g1M9BTa.SRt.OIFwJA2SWDxAQzzGPSt.Io.b2AfqgefSyZipJ2AU0nmHgcp6vLHQo53fDBcdy1EoJCXF3hkvkghu0XO2DwKUfe2YqfjcOgJ0zkytzicSQYQ+ZKeKOxW7cEN2veJetKBT3zI.MaRGY3eKo3tz5GaQ7miMPOmYFysw2AXji05ogrD93ZcGk2JUOgr.i9x.2faX3bqDIPZTkbo9Zzd355MIWmkuPFdHL4zkAAXa4ODp7K2mCWCe9n0vmmtF97wqgOOaM74SVCe9z60Gbn0ilY0gtNWffAsSHWddsULnGcRQJ42gxd18S
-
@Christoph-Hart can you confirm this is the actual state of the Scriptnode Synth Module with Faust? Or it's just me pulling a boneheaded move?
-
@Christoph-Hart I finally found the bastard! Parameters makes Scriptnode synth to crash. Is this a simple fix???
-
@Christoph-Hart any way to get this sorted?
-
@hisefilo can you upload a patch that demonstrates this?
-
@Christoph-Hart Sure.
- Save this (or any other faust code) into [Project Folder]/DspNetworks/CodeLibrary/faust/
import("stdfaust.lib"); /////////////////////////////////////////////////////////////////////////////////////////////////// // // Additive synthesizer, must be used with OSC message to program sound. // It as 8 harmonics. Each have it's own volume envelop. // /////////////////////////////////////////////////////////////////////////////////////////////////// // // OSC messages (see BELA console for precise adress) // For each harmonics (%rang indicate harmonic number, starting at 0) : // vol%rang : General Volume (vol0 control the volume of the fundamental) // A%rang : Attack // D%rang : Decay // S%rang : Sustain // R%rang : Release // /////////////////////////////////////////////////////////////////////////////////////////////////// // GENERAL midigate = button("gate"); midifreq = nentry("freq[unit:Hz]", 440, 20, 20000, 1); midigain = nentry("gain", 0.5, 0, 10, 0.01); // pitchwheel bend = ba.semi2ratio(hslider("bend [midi:pitchwheel]",0,-2,2,0.01)); gFreq = midifreq * bend; partiel(rang) = os.oscrs(gFreq*(rang+1))*volume with { // UI vol = hslider("vol%rang", 1, 0, 1, 0.001); a = 0.01 * hslider("A%rang", 1, 0, 400, 0.001); d = 0.01 * hslider("D%rang", 1, 0, 400, 0.001); s = hslider("S%rang", 1, 0, 1, 0.001); r = 0.01 * hslider("R%rang", 1, 0, 800, 0.001); volume = ((en.adsr(a,d,s,r,midigate))*vol) : max (0) : min (1); }; process = par(i, 8, partiel(i)) :> / (8) <: _,_;
- Load this snippet
HiseSnippet 1564.3oc4Z8zSabDEeVaFRLk1jzFUki9POjnlf10dsATODCXn0JAhElhZOQGVO1LhcmY6tiAbppTOz68qP9lznp9EoeC5kdt8M6rq8ZpgPbgQIpFIDyedyueu27du44YncjviFGKhPVk1aXHEYsHtyPt7nMNhv3nVMQVygcrQqOLjDGS6hrrJ9kpQrJMGJ4ye9z0I9DtGcbWHz9BlG84r.lbbusa7Llu+Vjtz8XA4lsaiVdB9FBew.fEEw1nPh2wj9zcHpoU.irleytLoHpijHow.iVWzcXmiDmx0yeeVL6PeppgCpCrP5t2R32UwXUunMNh42scl1FiPV31i08hZc+93sYcYi5erM3tICTdrD4sGVEljdEmfdN4omcN5MEJYkiRyooz8vc7hXgxwin3yGfawkzndDvrmmJ54hrdMdCALAtbo.xwzshfFiD3g0ssebY3WO5K5Mf6IYBdYAeGgj9B9CezB+vBkV3GWn74GpWuoNlBlHguOMZpCq1oitLAeHePvgznGW9Dh+.5nIBp+j1T7EaSyuk6o05bSTvawYxWDR4Wji.J0Tor+orBlpLw5+QoV+N9rtzHDCLx2B+Lt3PGTBgS8h+te429qeE80sZRjjrkAVQ.kPZjjoT.qlzSfXB8lZIbSZ7wRQH3dugHHTvU3acaYpWnFzs7EDIi2eOFnnJnuCNeWNnyFED8Seaig4ajR.MZeXhyaGH7BzYzg8yB0VD6VY4UbV01dEaDSRCxGCNtckL20wDszaz5LlZuJLG0dkrQrjF1g8xLSWi+3k+7SCy1NZAKwCRWUtnKsrJWDMlESibfzBQPFAvKtUBPGR4c6hBHmkKwSif7olPuF8uCnfPYQ2A9D4jw2pjZoC.NnSDTohb3wL4v7I8t1B5upT7d31Lo2QSmiElBGAGwaBNVLyoZyd8ndx7mSr02byjWLO7kxfO00ScVUB7WnayEbzE3386W0itBuxGckk.9w32ljcW54aNy34ay+N24auGDMNwQvkx3XGVPnOcS9ITeHidBG+XHEdOx.eYVuS5nssfKBORvYd48s1kJiX86Sixy8opPqIkPQPi649M1k5SIw4b99rFOmwojHvNQmQagyac4HSc+5AXMcKqhNJ+9aVzh+uIK5kYhtMdyyjQDm2A28RoVESRscECTUbsMABcgRMv6LHPWJEPKNm5qJN0pfpLRcaaUaEI5.0mjz3ugOoC5nZakNnS1fiq.EsCUdpH53jnuz+FxjqzcL9.36gsluu3z1B+gYIWRTFZTrxUFJJxdI3G8rT0qwRcxAyjtYFqWKPLPUIml5eEIdOByWUHgUgcRxmL+VDOv9MrMANeEBaTUVCaCznk7Fscnoz38hDaIXiamUnVrlepUL6PRssAHSPRkjpucWQ03ZMNAZrZsuEFxtFKQSPiEAZDQWROxj39lvHWs3POos.WlBJvJg2vGVKntx80U0eWLoK3+vNgdPbREFnyIwcT9A4zyT4R7gx0Mx5yG0B301Ld5DwpcJz1jyRaeKrqspmNipN9SUyv1wV+wcY2UW1slSZNh0rQiVHmkxi40JJNFAkJFAkpFAE2KFk4t9Po1ME8qaDizxl.klFIDooQBQZZjPjlFIDooqQPolQPwHwKMm03kUdaPYWaifhiQPohQPopQPw0HnTyHnT2HnLawK5IeEwnisAvvw.XTw.XT0.X3Z.LpY.Lpa.LtZwGyieRkyARko.xp5OKubc2UpTakJIfLexsyiVafTD.eA7rKo7h.pxjZSInC6yEwqopds6EQ+dz3yRcsmcCU9ksOvTzDxc8a8mGehv+FO2QBJNFAkJFAkpFAEWifRMifRcifx4yjz4T0sqtGIpOUlbud4uJDq7bPeGO52v6+dNmzY+I.KRGywt1pUsqVU+ZrbZxSwDilnIReYW5mSTeoRsy+FioYwPSb2QVm6lfVD2Jde0ndD+LdXU.stPbb.I4l7loGF1H26X.wKRbfm90oTJ2sS5AxVyS9eunDdaU6xidsas+R.qK6.OO0YIOAxpOcYpLCxTcFjwcFjo1LHS8YPlkmAYV4RkQ8LcomppbfgNZuYhykk0lbxg95qDG8O+bH0QA
- Compile DspNetworks .dll
- Compile a standalone app and run it (crash!)
I've tryied:
-Not allowing compilation on Dspnetwork once dll is already compiled, but parameters are not working
-Compiling .dlls on a ScriptFX and then load the same network on the ScriptNode Synth -
@Christoph-Hart look at this analog beauty!!! Yep. faust analog synth!
Fingers crossed for parameter fix to start using this -
@hisefilo Alright, I've digged into it. First of all: don't use the scriptnode synthesizer after you've compiled a node. Just like with FX: once you've compiled them you should use the Hardcoded module to wrap the C++ class directly without going through scriptnode.
Now the problem is that there is no hardcoded synthesizer (yet), but that's where the mysterious "Silent Synth" comes in: you can use it in conjunction with a PolyphonicHardcodedFX module and (if the exported network has the
HasTail
flag enabled that suggests that it's ringing out), it will render a silent voice that then goes through the FX where you can add the synthesizer signal.So after exporting the DLL you need this signal chain:
Be aware that in order to kill the voices after they ring off you need to add a voice management node to the network that sends a reset message. The best option is to connect a voice_manager to a envelope's CV output, but since you're in faust land, you can just use the node with the awesome name
silent_killer
, which checks the buffer and just sends a note off signal when the buffer gets silent (there's a slight CPU overhead, but it's negligible next to your sine wave oscillator madness).Edit: oh and you need to pull the latest HISE build, I've fixed an issue in the silent killer node where it didn't generate the correct polyphonic version.
-
-
Too many parameters are not supported in custom compiled dll nodes, right?
All custom nodes with more than 15 parameters crash here.
-
@Christoph-Hart Well. just 3 words! We Love You!!!!!!!!!!
You've just opened the pandora's box. I was toying around with the Polyphonic Hardcoded Module but never on the silent synth (dumb of me)
One important note: the silent_killer thing will only work if you have used the convention "gate" label for the Faust trigger. AHDSR with GT connected to a voice_killer worked for me as far as I'm not using that convention.
Also, Gain chain does not affect the synth (as far as it's placed on the FXs chain I guess). Is this ok? I need to do gain modulation directly on Faust code or adding extra nodes in Scriptnode. LFOs ADSRs, etc
@resonant I haven't reached the 15 parameters mark yet. but I will.
-
@hisefilo said in Scriptnode Synthesizer (how to :):
@resonant I haven't reached the 15 parameters mark yet. but I will.
This issue happens on effect plugins for me. But 15 or 16 is a low amount for advanced projects, it should be at least 32.
-
@resonant I'm working on big projects and never hit that limitation. Try modularizing your effects or use a slider pack if you want to control a parameter set that is somehow connected (eg. filter bank).
If you can't modularize for some reason you can raise the hardcoded limit here:
-
@Christoph-Hart I'm really stuck trying to implement sustain on Scriptnode Synthesizer and Faust.
Is there any tip or advice? I get hanging notes if I use the silent_killer and I get no sustain if I use an AHDRS.... any clue??HiseSnippet 1350.3oc4X0sahbCE1CDSfroc6VU0tpWwkYkRhXH+V0K5l.jVTKDzRZzdWjyLFvhYroyXRBspua6iPeT5aP6wimgwSJvRHMq1pRjhvme74ym+7wzIP3PCCEAHqRWLYDEYsIt6DtbPsADFG0rNx5SwgiCkvpqjzPI5zIiHggTWjkU9uWIiUo0PQe9yu6ThGg6PSIgPWJXNzeh4yjoT675ej44cFwkdAy2P58ecSGAulvSLFvSdbEzHhyPReZahRrbXjUgFtLoHnqj.fAYs1oB2IcGHtkqk+RVH6ZOpZgMpKrQZxmI7bUHVQEUa.yysSx4NDgrvcR8B40dgu.2h4xlRO0a7YQLJmpgo+vJWV3kOC7rMgWEC3MCHYY.o0zP5E3tNArQxTNJ77LbStjFzi.tcSnnkEY8NbMAH.WtqOYH8r.XwTE15vJU1tL7uW8s8FycjLAurf2VHomy25Ua7aaTZieeix2mUudyjmxLABOOZvLYqhzAKRws3i8ulFrc4aHdioSEDN9Y8o346SMC4N5SsgfBdSNSd9HJedIBnXWE7setYchjnBDwz.4FQCjLEDrpSuAxp0gkR35zvgRwHHu9eDyfrEg6XOhLaJjptIlA3CxD2TAGdHSNwrt5es7pkEhu.2gIcFLaLlaFXD7TOEXLtZ7SvM50i5HSA3Z3yd6SSomo4KkXdc0TTiwHy+xXJbgKsrhLMjERCrWP2w+XY6NNZo6NlTiuM9gTOsvVn1qXKzBez0B8+.UiY5xWPiwuxHyJJ6PkLP085+ZyrtHlk0byl20RvEiFH3LGyTs2PkAr98oAlDermO6m9tM4+eS2lE4hJhabmLfX+Q3cEwPq5GRn8FwXIi2uEAxouClIn8X+tPaQGJ.KNm5olSvJm5Fc85Jp0JPzkxciV7WvmXl1p0VwLsSXZLLPap7VQvvnJ13uirVWc1+bb8vQwjhFOtJ5DOOwscDdSRJAiNYzfPUds053J6B+okplveDKNiG7Y5kIGgS7EiAqGeN9AR3EDlm512tiCgYXbOm2EDN59DU9Xanm.H7YDGvAOoCAtnBpqTSAAwIZvtNSiWy.yoQNk+VsUIWyn8Z.x7UthnQvyq3q7E4isoZSKg8gd5W43flABfai1Mg8CyTosDtfDzmJCimHiSczdsnycSWkisGAdlBpCI.dr.LfqhXojmtfRoGg7oq.y1hwuTcEI7UUvA0hbW750w16YCT5Joi5x90HITqUG3Mv0p0N5FVTrzEvGtOvDsb6sdml0N+LbCNAJCZ0oAJixl67ZuucV+xs5Tvq3I0bh4m1DEYLTKBYDMSblYhkaBwx.5tZNOrvnocrxEuBZMjSm5TyC1KHdECvmiCI2JEB4fqbo9hovLQgmqJ2MhmwpE0pHSXtvrCEEv6T8ddrpYhEeoxiV4azeN5nC2+3pGbb0HWZA70Ps27iKYLyAYCLEw6WoRkk0REwNikhd8PS01Vq8xatpO.yU.2Kf9KnoY96sHa89RlWnc5qpGM1nCd7kLpMURmeTovprooMOxn5IPTwGrVzKgPcuUM4xzlSlEQPZrpAs7pg5I3xTL8RLkeC0Cxq2MqTOnBqbYR2yM6SbQ7N1UueiscNrxba+bwf.Z3.Xd+62wn86LO74ezd3h3Sf132PmuCNe1VTlG2Lbhlj1rGwl3lgWp35P7R1dHbcpPLzmDcU9p8D+ODCd3SbBDWEewo5vULhBjQvi9cvJgaoVW1FcioeK4FVXZ0cf2nMacptB5r2Jny9qfNGrB5b3JnyQqfNGuPcTumMNsUMUBPnSinjKKK8c45b4+ltd4Jp
declare options "[midi:on][nvoices:128]"; import("stdfaust.lib"); f = hslider("freq",300,50,2000,0.01); bend = ba.semi2ratio(hslider("bend[midi:pitchwheel]",0,-2,2,0.01)) : si.polySmooth(gate,0.999,1); gain = hslider("gain",0.5,0,1,0.01); s = hslider("sustain[midi:ctrl 64]",0,0,1,1); cutoff = hslider("cutoff[midi:ctrl 1]",1000,50,4000,0.01) : si.smoo; t = button("gate"); freq = f*bend; gate = t+s : min(1); envelope = en.adsr(0.01,0.01,0.8,0.1,gate)*gain; process = os.sawtooth(freq)*envelope : fi.lowpass(3,cutoff) <:_,_; effect = dm.zita_light;