Scriptnode "oversample" node starting at 4x crashes in PC
-
Hi everyone,
found a weird bug with HISE today: In Scriptnode, the node "oversample" starting at 4x crashes in PC.
When you use it in the software, it's working perfectly, and the compiling has no issues.
But when you try to open it after, it crashes at start.oversample 2x at least works for now.
If anyone know why this crashes, this would be great to be fixed in further releases of HISE.
See ya!
-
Yes, I'd love it if this bug got fixed, as I am really hoping to do some quality DSP in my explorations.
-
Does anyone have a snippet they could share for utilizing different oversampling modes in a single project?
My understanding is that the dsp node sits inside of the oversampling node so downsampling happens after upsampling and non-linear processing.In this case, would I need to duplicate the entire path for each oversampling multiplier? That seems silly... and think I'm missing something obvious.
-
@dustbro what if you put 2x oversampling nodes one in the other and you activate the number you need? (don't know if it is a viable solution though...)
-
Well, if you "bypass" the oversampling node, it will not bypass the process but just bypass the oversampling (so it acts like a normal
container.chain
).However this way you can't switch between different oversampling factors (which is a bit overkill IMHO, just pick the one that works best for your effect and let the user activate / deactivate it for performance reasons).
-
@Christoph-Hart Can you script a node-bypass? It's not instantly apparent. Going thru the docs now.
-
The entire scripting API for scriptnode is very incomplete ATM (it will be one of the last things I'll do after the rest is stable), but at the end you should be able to change every property (and even move nodes around and create new ones).
-
That being said, bypassing already works:
const var dsp = Engine.createDspNetwork("dsp") ; const var rootChain = dsp.get("dsp1"); rootChain.setBypassed(true);
However for some reason the autocomplete is broken for the scriptnode objects, so unless you check the source for the available methods, it's fishing in the dark :)
EDIT: The API Browser has the functions, look for
Node
... -
OK, I've played around with the scripting API, it's better than I thought :)
Actually, you can even move nodes around to achieve your oversample selection:
// The good ol' magic spell const var dsp = Engine.createDspNetwork("dsp"); // This call is important so that the combobox will // fire its callback dsp.setForwardControlsToParameters(false); // Get the root node. const var rootNode = dsp.get("dsp1"); const var oversamplers = []; // Create some oversample nodes using JS magic for(i = 2; i <= 16; i *= 2) { oversamplers.push(dsp.create("container.oversample" + i + "x", i + "X OS")); } // Now that we have them in an array, we can iterate over them for(o in oversamplers) { // Add them to the signal chain o.setParent(rootNode, 0); // but bypass them o.setBypassed(true); } // This will be the signal chain that is moved around the nodes // Can be any complex node combination but here we use a // plain old chain const var chain = dsp.create("container.chain", "MyChain"); const var cb = Content.addComboBox("ComboBox1", 10, 10); cb.set("items", "2x\n4x\n8x\n16x"); inline function onComboBox1Control(component, value) { // Get the oversampler we want local osToUse = oversamplers[value-1]; if(value > 0) { // and move the chain there chain.setParent(osToUse, 0); } // Now iterate over all oversamplers and // bypass the ones not in use for(o in oversamplers) o.setBypassed(o != osToUse); }; cb.setControlCallback(onComboBox1Control);
Just paste that code into a ScriptFX onInit...
-
@Christoph-Hart Much appreciated!
-
@Christoph-Hart since we are discussing scriptnode , can i script loading of impulses into the scriptnode convolution ?
So i have access to the oversampling ?
-
Yes, accessing the IR slot of the convolution node is pretty straightforward:
- Create a audio file slot in the ScriptFX
- Connect the convolution node to this slot
- Connect a AudioWaveform on your main interface to the slot or call
AudioFile.loadFile()
from your script
HiseSnippet 1339.3ocuW01ahbCD1KIN5BsQpQp22s3SDIJGzd4ZUaO0jvKUzlWPPtj7sDiWC3xt1q75kD5oSp+k5erp9Onc7tKrKIbQIT0iuvZ6Yl8YFOyyLaWshwCCUZjy1mOKfib9bb+YRy3FioBIpSS6F83S45AmyCMnilEPCC4tHGmM9YqDNauIJ92e+SGQ8nRFOaKD5BkfwOV3KLY618feU340l5xOW3mS5WePGlR1P4oh.zrAtFJfxlPGwOkZEq.F4rUKWgQo6anFdHHyQJ2Y8GqtUlH+EhPw.OtcQcTevPIaiZLV341ctmFhPNa1Myu2Hwu+R7IBWwh8y7+uH9.RlF4iANEVFRatDjp+wfTakmq0.eD34jCdal.ucw8YZQfI6DK19LbGogqGRgvddXkHKpve4fan.Ijlp9zI71ZXwBMJ+lZ0pP1uVs89gcJtSQH3GZHSoZxgQtB0kzo7gJsecxaIyswHtogxOPIgEkKsrXkRrxqdkUZImYHlwbRXLPHsuh7aQf08DS3DJYLU6xTPDf3qbi736TbYaUMjC1OXtq1wsTERo9yMUtW06B4wul9T+.OdGoK+NRMhQQX4vfqHLviNytscYrhBceOkgnFlndroae0pwQXlwAb.QqgQRlQnjDk7Tkgelr7dEeewsK9ghj6ezvgq7La.Uq7735UdrsvP+XJVVF4Ofqq.WWdQ7EBBYKKmNt0SKcjkb+lSPkriTXNKfmtNKgs9JRXQoIH1T2TDBhZhSbeYZh6RQVjv0VXsbzFE6L4oOPuqSSpgN2rva.dqAbsQXcNml7o.8RR8w13l7vIFUPrro4nHmW7rAwcK.veb0AyPNXGW34b4hwTjKxEQ4xN.M2ZNxuU3ZFm4KyNXLWLZbNZPwAnGVkCbM1BBpYYBHKSa5APZvRU51pYYnvLKOS7yfUp1JYkV4k7SDt6h6JLrwqFuEVAdgq2+uwaJG+N3VCGBzBYfcSb6q9DSniSvRQ7bVmztr4xoxCnSi7iyPaK7r3A63.t1b98+zAmP4p4.bAlUpUTxPPVRnkfyLlZHLpjLfSh.KRfjbB+NnCfj5Arj99QRAK9ZJeG.fd7XP62RZIGIj7prX6enzsGejHDzdAjJ+ftGtgA2WwlgAmxM2pzSJWBNNi+VLjLSEQtkJMV5YOE0k.fsSOxPsxG7G.gCTCT2UwhdvaDgf23488yIwATV0pULTJ89t8N6WZ037qae1wMa06CWBduc1kp2RmVZuEznAZd.UyOW0EZKTNo.tGHYEx.OEaRewuyeH2aJCvQVIJyFSg9KdgqCE8iNDS8m9PLndpHiPN5DpQK.tGLjozGlchwajhNa1RAK6bx5Z101xs9boa7h+A9kdX8EoVvg0meXFwNJ8BLNaN8Y3IapKFC2o1cgN5.iaaJCbuYcoV9ucw1dKP0FbIvVT0skUi5H.v2GpGCQ2k1FJ..yNepvD7C769wr6vLgoOeYBcK1oBHQR4SO3d01H8jv7yX5rQtVHfWAFOwkR.uEc6Xw7TkWTL40RtyKwPoEj9GVMuH+m8ieD2mmLqxM4lj4FaNmEpwitbSsar+EkNwyMISvbSw6GAv02u1yHB3THcEPHuQh2mCBnKRZIay.6FMvSvrdB5dprE1V9MWV3RImnYsANmpg4GiIloZXjdaX79KVm98eRpC7oLs5ZVRosMr8h3cf.fL9qS1FehcMYwPLXbsp0P9vWNbMiY6y7UPOpUqyWuF57MqgNudMzY+0Pm2rF57sqgNe2ipi8i1NLxn7SlAA1naq3jKGmVRJvvF2cE8uDTGNwA
-
@Christoph-Hart said in Scriptnode "oversample" node starting at 4x crashes in PC:
Create a audio file slot in the ScriptFX
Connect the convolution node to this slot
Connect a AudioWaveform on your main interface to the slot or call AudioFile.loadFile() from your scriptExcellent !
1. Btw, I dont have the options for wet level etc , I can work around that but what about the multithread option, I assume that would reduce cpu usage?
2. Is the scriptnode convolution a different algorithm then the regular convolution and does it use the ipp ?
3. Guess I am wondering if I should change my reverb plugin to use the Scriptnode Convolution and if i can expect the same performance etc .
4. Any particular reason why you are not using Engine.loadAudioFilesIntoPool(); and rather use Engine.createAndRegisterAudioFile(0); , not sure about the difference .
5. I dont think the audio files will be embedded using the Engine.createAndRegisterAudioFile(0). ?
I am sure I can figure it out somehow , just want to know if I can make it behave just like the normal Convolution reverb with regards to loading all impulses,CPU use and embedding or if there are any gotchas ? OR should I just wait for a fix to the main Convolution ?
Excuse my noobness. :P
-
Btw, I dont have the options for wet level etc ,
Most (if not all) nodes don't have a wet parameter because that is your responsibility - just add a split node with a gain and use the
Dry/Wet
parameter ranges.Is the scriptnode convolution a different algorithm then the regular convolution and does it use the ipp ?
Nope, same one, but the convolution module has a few additional features (eg. dampening the impulse response etc).
Any particular reason why you are not using Engine.loadAudioFilesIntoPool(); and rather use Engine.createAndRegisterAudioFile(0); , not sure about the difference .
Ah, that is a misunderstanding (but I admit that the naming is a bit deceiving).
createAndRegisterAudioFile()
creates a slot that you can hold an audio file (so actually it should be namedcreateAndRegisterAudioFileSlot()
). It doesn't affect any of the pooled audio files that you load usingEngine.loadAllAudioFilesIntoPool()
. -
Hey, @Christoph-Hart - would it be possible to add an oversample button to the built in convolution reverb fx? I just want to be able to oversample while using IPP and it would be great to be able to do this without having to learn scriptnode and then rebuild the whole thing in there from scratch... I have four convolution reverbs that I need to be able to swap the impulses for based on what's selected on the interface. It would be really nice to just click on a button and be done with it.
-
@tomekslesicki said in Scriptnode "oversample" node starting at 4x crashes in PC:
Hey, @Christoph-Hart - would it be possible to add an oversample button to the built in convolution reverb fx? I just want to be able to oversample while using IPP and it would be great to be able to do this without having to learn scriptnode and then rebuild the whole thing in there from scratch... I have four convolution reverbs that I need to be able to swap the impulses for based on what's selected on the interface. It would be really nice to just click on a button and be done with it.
Agreed, that would be helpful , I also need to rebuild my plug to use scriptnode.
-
Totally, especially since it’s so basic. I understsand that if I wanted to do some crazy reverb voodoo, scriptnode would be great but oversampling is standard these days and having to hack it in doesn’t make much sense to me.
-
I am having some problems loading impulses from an array into the scriptnode convolution.
I am not using a combobox or a Audiowaveform but rather a rotary knob that cycles through an array.
It works fine for the normal convolution but struggling with using an array to load into the scripnode conv. I dont need the Audiowaveform or the Combobox.Also unsure of how to get a reference to the Scriptnode convolution and if its different when it wrapped in an oversample module .
Using this with the normal convolution , and this works.
const var ConvolutionReverb1 = Synth.getAudioSampleProcessor("Convolution Reverb1"); Engine.loadAudioFilesIntoPool(); // Load All IR into memory to be pool const var irs = []; irs[0] = "01Piano1M.wav"; irs[1] = "02BrassE.wav"; irs[2] = "03WoodwindM.wav"; irs[3] = "04StringsL.wav"; irs[4] = "05VocalsM.wav"; irs[5] = "06PERCN.wav";
Then I load each impulse with a knob.
ConvolutionReverb1.setFile("{PROJECT_FOLDER}"+irs[knobSel2.getValue()] ); Label1.set("text","Cat One"); Label2.set("text",catagory1[knobSel2.getValue()] );
Any thoughts on how to do this with the scriptnode conv ...also unsure if I should do the code for switching in the script fx code or in the oninit code window.
I cannot do the callback in the ScriptFx and the oninit does not recognize the loadFile
So essentially I cant even get the combobox to work .Quite confused I must say.
-
It might help If I could figure out how to connect the combobox to start with ?
Should be able to figure it out from there if anyone can help ?HiseSnippet 1704.3oc4X01aaaCDVJNrswconYncnejHXeHAHK0tusgtUTm3X2507hgkaSFP.ZnkniYiDolDUR7JJP+iMf8SX+TJ1efsiTxVzNtYodnACaNeHlGu63yc7ditYjvkFGKhrrmqc+Ppk8Wfb5yk8p1iv3VM1PQnE8XZTm1zXo058CIwwTOKa6BOSwg8byZo+7gmtNwmvco4jrrdkf4R2jEvj4TaV4ELe+5DOZaVfA2OnRCWAupvWj.no.pjUHw8HxgzsIJ1lAYYekZdLoHxQRjzXK6YWW302om3DdJ+uhEy53SUKJa4.JJkbcgumBwpuaUsGy2q4.qN1xxF0L2GTH0GbKzVLO1P549hap2.mKgo+vdlyCdkMgWoIBuxSBd1Fva1T3s.xwMhEJy2QgsqiZvkzntD3JvDVo7ZMyeXipJ.N3xUCHGQqGAKFJwROpToUvOrTok+94KNeQ3hHVhOlDgWKwiI1kbLsqHJnL9I3A53PprpHHTvgEKs3nrsXpVt6cUbyotRrrGEGqABt9d32j.Z2mcDESv8HQdtBvCfCDdI9z4KNptVMlB5Obfo1vawUvK5LPUFG0Kio5iwgDD5Sav8nmhKgkBrqAF7Xwg9j9JxpkZAYQN9BIVzMUbspqu2jwQbtxAbj4s5lvckLAGK3aKjzc3Ksbw2VbthuqHd7s51ch6obpQBeeZzD2VknDcdBtDOInCMZE3JyOgNjQHhYzPRzGOjzLiwM8N1fQAuAmI2Ijx+XApVYAFPH6LYnBXUpCXucV.6HdTKlmJgZTurk1.LKgXMtxtYlxfnuNh0Emp0yBiQ7LJ5CO05kM1fHIpTpLnBvOjFIYJOi8FzigZUoIXyg1fFejTDpskrfbK6q8IaMmND.ueuJ8yQyOUwHfVWycX.skQHFHvUF3FNg4I6kqg9U5QYG1yntJqhkAVu5mjyJGm+lINe+yqjcrHaeX8fiDYur5.kzf3rvgyVjBJUpxmIxQqepZZjsADAORgJUwHdLS127V6yRQ0KJbW.0jIc6MY7NyDvqJ3+yLdyZQMOpV2tPUsbvNKp9dWx8iPoXoHZPQyrAFLhlMAz1IA57i5LecwHaavzFzd5WsQocLhn.bgFCDEq3t.u3XU8YYOhD6R33NTbBnQLjhgomBMv3DenHePPBm4pulLafAU22Dj9I3Z7CYb5ptZ8uF2qE8PVLH8PHszYZ94EGNtfaDGtMUdhH5nkVD1Nu8CqKtuHAeBgKUcW7EDOL.1FsvciDAf83px15HNcEE5AqgECViu+iGzCBP4pJozPYw21r0N+Xspsec8c1biZsd2tf0qFCa0SHGu3xpybveC6FDFQCIQz1hlPGtkRKizBjZEbGeg6QNregd1VHY0gVWwwRt8HPqR+3ooSyXylU3h0oYBw5sDIRF+vsHxHFTWBAQMNvHgtzpYnSE4LipwP55Rp0pTOGJ2Su3OgOYaVdXXFrY4Aal2qxJ6xTGYm8c3apvXDBteUTggSfZ+0Itf40uIQUNbAjpEIj4AWHtCy.uhRhxV.fGGpaBd2QHCICfZGLraJ9gxwA5Z2vntYee2AUeWA3HMUpEbuplGXqXyQmsKXzLCrJP4oljF7WUgtafDP7SZXw8N0ZD64NF1yHb84xVNe7dMEdmWgoiE9I5Bui.2aifxBPpa7plr7OFq+.xglNl3AFCQdfJGQAU8TiGT5.0+RxF17fzgGOn33VIp7CK8IbiYOS1JnYRgTq2.BVuJcXFUFSyjN9LWkkXMlHWAoJcLf2sQMd79aSOA+7FN0vYUSb1uEs+QugndOGd80p9hW1zfx94Um2uz82UH7Ngw81RUxw7XyaG1lDAOCP2fhDAuRSckbtKllQvLa9cizMuNxABU0uSUm38U50X0bW3mQgfXUa7xmyiU+8K5iUCuvOVcGWIb7siH73PQ7HJ1gFvZCykEaRDdtR8H5O2R4HMoWUPhl3Ve3o0Aibhx3PjIQ5aj0BDIb4HCjT3BOEfYg4QmSyf+ILRvr+q9EzWdylV3hA2+lgpla.FcXpB.03GS8gjDMF+RHqnKIwWNf5nA4aI3hvdBtJQMOBnEE5jd3gzHSrOQCZMoj3dTNkaUoE0mRLil+5JaBQgjnszEpmJeQ4Ktu37tutCJEtXUlI9+Fuonv+KeSwkxHeWFmQ.wMR7Z2zIkUwxWSSArat92vbNzVp03g+5DHToUKYE.UDesqqxc+Mf+YxxbuoPl6OEx7foPlGNEx7noPlucJj46NWYTMiVKQJBRSEABMqoGQw1tFm.Qx5ndq+Bfg73kL
Figured it out ..it seems . Needed to make the irSlot a global variable.
Seems to work.HiseSnippet 2006.3oc2X80baabDGPTvwhoxMNSbmLSen2noOPmQQhLINsSS6XJw+jvVIKNDL1NSev5HvQxKB3NzCGjDapmwO1uG8iQeweD5Lc568if+Fzt2A.hCTLzRLi8zFpGDt8tcwucu81e6g9BtGINlKrr2Z3rHhk8OwwcFSNs0TLkY0qskcEmFVGNKBGGS7srsq7kpIr2ZSK8uW8vCwAXlGoPjk0i4TOxQzPprPZ+l+AZPPWrOYHMzX0eVyddbVKd.OQndY0shvdmgmPdDVsrMbrruUGepjKbkXII1xdyC49ybmxufkt9GSioiBHoH0ELTp3t7.eEhUOa0ZJMvuetyFaYY6zuv0qj55efywTe5b4Egf2SOApPCy3g8FqBdMLgW8kBuFKCd1FvayT3cWGWOAMRVLiBauqSOljHFigs.SXktVqM9KUbZwgUvj6EhOizU.ClqQsOud8cQOnd86+EaWc+OZ6pvVQrDcNVfNHwmxeB9bxXtHrA52gxsxDhrEOLhyfA01o7x1QYGvR6qVMi3IQxoDTrFJntOE8sIf0CnmQPXzTrv2iCw.TH2OIfrc0x1ZuXBX+nbmsm+N6h1wM2TFupuNlneMt3vn.ROlO4RTcjji7LvfOMNJ.OSIVMTqHU3FvkH93T00lt6SWNNhKLNfCc75i1WAfNrITFYu.N1WqWWZ.IFBv79bdPsTPVDUgvx47fDIkyFPNmHFohr5Cbp3p1.otw7M4Z6XnCJSoLmW4Eq3mZATV..Oz3Dlm1.b1gIRIm0PscJ.D5kuWtK.vfDx8q9cUQvO53ZYiUiRkokKbOhK09qxUqsy20evI+9NsF9rtmbT6NCdd8G7XtGNH938t.eN.TDDryUV+vyq97un5xylR2CxP3N2WE5yvYKbPvHnvPsEc.Ujvv6dDWRNgUS4EaU84UQKN03wKctLiEPDKcZUIKwpTrFKIbDQXDC0KDN6Vt3fy2ewAyZWdoQGiExY8XT4IQD12WICqrPJT7nRFpfmj5RG2KqzQoLaKpupzV4rcKsCXVL2ZQi8dYFC12FwOjeo1N2cAgWwPu5gWwP2wwb+ValeZIQKCMecu1XIVUgLyegXPDQHopvqcax4.0SZ8xsbZShOSxizAjrbLK6aeiCIWNG.u3oMmUfluooQ0IMy47pSVF0K.EtUN5uf5KmVXgYMmRnSlZPSRaZYf024FEwKv4KMw4K9plK7Z+iK9ZeQ6lTIILNO25JH3ZrUYDkbMd6+6Y4ucG6+FLN+M6X+yUta7w7P3EgEfF1aXcUVOf6UQOfkkIjUcgjMAbPrDymhciESkyLS9divRecg6cc5SkdSWNd2XI3ERueSi2rdd11oy3w.IYAX2zo6SW2FbtA8esgAVbRwRUmbNXMPJcdxDPOJIrfpUkIYCtVd+N+camzFPDD.tPeFX0RQig0hhUz8xoXIxCyPiHnDvhH3PNhbIzQDCG.8LDFlvnd5sosqNIfOBjlR5AT0Yr8dZie.ye.YBMFTcNdpUeQJe+3nEUrcbziHxK3hypsCLcQqLzwnY7DzEXlT0ohhjEAHs2.zXAODbFO0g8Q7K2UAcvUnwfqDD7a.J182+0SM2nOEy3MxnlSagH8u4TZQBRDVPFx6CsKUKsL1..y6hFEv8Nyk9mIWkGLqN3gpUTyaJF56JHdcnKWnU+JWuTskjoOfCMLwlbLVJnPkIGHmwEtggGoUF5T4ManX2RGWWMVcvykv70C9OvurIaLOIClrQ9jEDtVY6l5F2ydFdRkD63.avJoPmt.2SWrG3dy5iUEDuqihmGN2QD64M+72sTZzvB.7hP8HH5VRLbT.La9cmRwOT6NTW4Ft4T1yOIu96tvJROHM.1WUM0bbr4MwrqXPlBdEX7TWRC92Qgt63vgNPSSK9jKsJ4Oeng+TZUuo7kUi2aqv61JLk29bY3dOGnn.b1MdOyk7CFq+VGWR5cNN03FImpNinfp9JHmV+T0+Rxt4xoo2D4zpK5kNMdP8avNltnp9k.glTu2.BVONsYJ0Il9IiBndJOwZAUtkip1Q9Z+ENqr8dS6TvtMDKf1507MXAbKdULdkCVmd5L4xd+btLiqJoOKcOmkb4oRbIsEyJ+AM9lW9DhrrHHC.JGw7JQP2KLJIHlbDgMwr0pW8vLb0iEkHMkCWS8P3BLSD7Dl+vo.Qfuo85KH9Dnjqoruh1xvF+0+Yy1vtITUybMc6NLKzTHB1.S+5IutsuPkall+FhUkIs+WubSq.NOBp.Kj4yoDzg4mOztx+OUk1HO4NoQp20wEpQou0sNK4moGiTM7i9RBT8R081p9nW+iq6G8J5Z+QuNwSBu9gBLKNhGWxvtjP5Pnc7XSgP1TWA4OMPcfyTdKNVrzod0C6BN4R0wEKSD5StGDBImxR8gV4GXyeK8qas4+S+w2d6cKjJWO39Z99fakiQWppXeG14j.n9oFiuOTvbLNIPlKsbd8wbFOZJmopgWroOf.mGmLgHLw9RcnCjRnlVgjOn4.R.Aal.+KadDj3gEGqIkWqXQiqerXU6WenSJbQpCinebb6wJ+H51i2.n71f33sw6HD6I3OyK8VQpb4aqk.9MSSfukywpwn4eILGm56UG3s8oOyySEt+3FVVKWmOYMz4SWCc9r0PmGrF574qgN+p0Pme8J0QQFcPhjGldTDDzuit6Ua6NLLjIqy5s9u3Yj18.
-
Seems like this crash also happens in HISE when bypassing an Oversample node.
Tested 16X and it crashes when bypassed ( sometimes it hangs in there and crashes when engaged again) Might take 2 or 3 switches.
HiseSnippet 2556.3oc6bs7aaibFmTxiekcylzlsc6Mgr6AG.WCQE2jBzGlwuRM1nXUKmjcQOjNlZjDgImgkjxwZ2s.En8PusmaOz1isWJ50Vfhj+.Z.Vz7OP1i8lyk8PQA1NOHEGRQIQKKaKmHcIdl4aH+9988bFNSp3RLPddDWE041ssCRQ8s.Uai8atVSnIVYq0UTuL3QvCPdMgNH2GWRY01NPOOTMEU072kQi5bSov+czJqBsfXCTTWJJOjXZftmosoeTuUz+PSKqMg0P6ZZKQ8x5aYPvqQrHsn7SdPQEGnw9vFn6CYjkCnnN8F0L8ItU8g9HOE0oVkTqc0ljmfEz+PSOy8rPrFZJUoOHQ2aRrpw3XVuJq0zzpVkP41Sg9PqDgB4Env0.kMqY1o+Hz3J7AJDMCY7PMW+XOMY1qX1YOUI1aJA6cUPUCWSG+nQX71k.ag8Qt0gTUfLaInUQ8Yf0HTBv9KYC2GsoKsQmIrvMKVbwBZEKdieP8VXCeSBt.AeehOZa7B2X9Oc94l+WNegjCUudpiwdMtDKKjapCyz5t8ahKfaYuGxcwBG.sZg5PHU7iiufdiuxpeCgTKQHAuE1zeaGDtWntR.TQw+bAbEkTeN5e4.zupkYMjqhIEjmA7gXxdZJbFV1kPIyStTJS9AasNzGxrABXGJKRcC8MYRu55nCnNWBKh4.qi712m3v4WaGBlw7pyLPN9PYu01QMtstmOxop4mDxQ5e4m7aVwIDh1pFOTA+oVXyORi5p5R8RoVSrQlFvCMnHwIyNPwOhS94PcIN4GNB3DaRs.PxvbOjEMFTW9TTOaRsVVP+3t6roGL.0FMleEy4A6Y52VVmcpDCHqr6UAUL8MZlN+lKE9kYdeJyuAQTeavF0qiL7iX1o.a9QmAgOAcyKyA1gzxGQe8BPi0xD2nPYnuq4gZwYp7wYp7YKlSJXRvaQ7RnLw8aYWkloy.QgDLFYwBnoxzKAsKxZyTQUQ3Z7F4hFTi0VMXPdi7QCVh09qo+XC1oQvf2TdvNMj0Xy1oR.SaGKzcCUX.v5ts6UA.O6m84e0JqirfwrtdjYM+lgcbiO6A5cUhvh5agOfFRqBwB5lz1bTg8pSkYGHlHU3BiC+2.vg7KRLL2j3hCCeEPE33fAwPE8HzMuXhX.ZxCpkXvRggZ5Yzi7AClZzi.vb9fTxAAYikgNshS+GfBE1.2vDiVxvEQQt08btOx+ID28W35Rq.YWWHEw8n360kJU0wEQS6i1kTg5MrfGjE2ZG5CYwB6YQL1mU7P20aFTBwpLJVvH.FGlxRmd7IEQRkbrTDIUxGyTDijRhCJsd3JIl9Kvlfuvnf+l9WLSruMHUyDFchp+1DZPa2tBjkR5p.1xBnd4H2kL53s+do+LzTnZBYc.y83dTylXcqlm8hBW+pPwPq.1lW+Kc0qA+cPNQf5hTJDtB6PMXYqJprm7pgYlPUBKlk87yIdCLYOuPllgwzy.7brnKvtmxmX3SKQPMuzpRnJn.NLW.pK3PADO.Mv4AHGuVuTkjojjD..VqVb4XdfM8eWh0+4u.DknZWnaCjOOSWjMDa2DBawjHdoWh4V1D+vjdakgG9vjKJ8djmfbC1QGVXrG33zocDUU6rjsY.EWpXQZfu8QOQfaxzIrNDujjupmpzk5HPK7N.BkwEg40t0gw0GeGI6p3jkP8nNpTOc4nle81XnsogP2nn998HrxRa2g+Th7sUkjzoA9Pby3B3kDFb7AdSyhKhRY6NdhUoMI3Su1e8trMI3XayIpKLxlSVP5o0H.X2xJ0XBr9GyBpMrpKlq9nSgkVfhSfZ6nUBzGyJHpA06uTRmFChKZoFmW4YhqFTyEzhtxg7h5i2A4g76gQYkV6YYZvXJkDy6c.OvCkwoNPUetr6o9wOqaEOCE6Vw+wOKMEuRL+0e+ui86umPw+iM9mOuwe6c0EwA460PJtqmjfK5etdlsUozNXV9qa+Gq7MW+EqH1N9p1DheSZA8I46k0iGYQJXxrhRkzdMnVooY0JoMFWrz4Zfwj0NMxxg0IX3bh8uHVMPZCYsR4FypUJUiO0XK4fUej13bkSiDyuQYYTi9rx8JJ2zrRlzdculowYcyS6thIsIULMohoKHUL06.KdGTOQo+uMntoEizknicgK1BH65qk06Re8aeQp5qk0SQeQocv5qm+Y+ma+qsedf9ZSWzunEBazte5q9v22j+6EqHy2O+ew989I36PJiy2gzNX99+9G9ye00e0Wv467feZ+xUMPbtTJtxkREmKkpqboLvuxwvOcbkG4ocFnqb3zNg78UxdHHJsUie3QDxRef5xrfI8c+EllmsbRxxIIKGOSV9qtU7jkpyJIESKD2UMgdYdYqYcy765gwO2ZXD+6n5EuI0lj4AvNiVhuoRE4isUXUqT54XtKa4AaUi5Qv9X6a6z4aLGZX1ecyQOcTF86+8Wd0+t7dU5QTjMNzwE44wEQpirR2X+trked7w9AUs+Ph9AeggSS3+jl74CzyNJLH3G.vnFm9n+QqjUae15cGmA+iCHLXaedX1wFzOHSdkTNwniHz+rLQ1fP+Y4Q8KTZbB+46P7aJl+yxB8+SFmT.g6R5aJZ.pbv40yBcP1S.y2KzKN0+bxTAuEPZi7O9JA9mIY3f+bxv+kBg+jmkjX5g4Ac15lQjp3kw1qCQ.8Wkpp3kI1qiPZ6dAsurGpBkTE3t9hPuNIww1asS70mAbbt9L+H4KshhtO5P+NqzR4X7PicSXPo+P4KgHamY+Gg76yk1SQoumY++zc+xMzS4Z8M4L6O4L6O4L6epbl8OyNN2G26EUow16E0viRJQO1tQIUk3lbWVfRWhFiEi32RZNN8s3sKvN0BEtKBibg7SLt7MuKdL2uHqWTZmLeQo21vm954mVBGhWrGbUjs4tzTOdwJxyCw9zM6vbOj6eMBzM0gNZkMoBYpyoJzukK2O6N1jVX+9kMXprYkLfqz2Ti0WX6yt6VZ9rwtC3NkOWHOJJcXCZpcKZYRcxUUG1xxOr23WdmxDLwoIAy9B.QJ8cPTO4FMPw+3JoIP2w2GZreTOWSeGjEBJa.+A52iZ3AcKK9FuCCVnkcrne5q2CHX2BLmwBudbmfy+F4cBNYJGPpobxchR4HKtWKLwAKGQThi2k2tNw0tG4MxeVm2PS9ImXrRwWzfeKbbxEcEiJl3sIU7zjcFB6ThxY0o0qE6gQaG6IU1L1+OErAFRU5UQToo11dFTgElXgfUZY4g3kspIupwntKI28oSZJvjzTmWooJMIM0jzTW3SSkYOTZ3wwuk6dpjUc7dI01PCWxiMD2uY9Iuf2CEwv7+KrZNPYV6BctUz.14oPwlF5+wFFL6puKEYSeNkFh4bygXNKODy46MDy4VCwbt8PLmueemCKq6cZ4SrEdNzNprAeSiUUEEYvchT9+vieaEL
Looks like it does not crash with 2x oversampling.
HiseSnippet 2538.3oc6bs7aaibFmTxiekcSSZy1liBY2CN.tFhJtaJPeXE+rFaTrpkSxtXOjNlZjDgI4vRNxwZ2s.En8PusmaOz1isWJ50Vfhj+.Z.Vz7OP1i8lyk8PQA1cdPJNjhRhVVxV1Q5R7Ly2P988664LblT1Eqi77vtJpysWKGjh5aApzxlzXsFPCaksWWQ8pfGCOD40.5fbeRAkUa4.87PUUTUytEiF04lRg+63UVEZBs0Qgcon7HrgN59FVFjvdKW7CLLM2DVEsmgkD0KWbacr8ZXSbSJ+jEjWwApe.rN5APFYY.JpSuQUCB1sBARPdJpSsJtZqJMvO0VP+iL7L12DwZnoTg9fDcuI1rJiiY8prVCCypkCjaOE5CsbHJjUfB2.TxnpQ69CQiqwGHW3LjwC0L8h8zjYu7om8TkXuoDr20AUzcMbHgiv3sq.11lfbqAop.Y1RPqh5yAqgoDXSVxBd.ZSWZi1SXg6jO+h4zxm+1+nZMs0IFX6bX6GfIncrW31y+oyO27+p4yEenZ0RbL1qwEaZhbSbXlV2sWSbA6lV6ibWL2gPyln1DRE+n3Kn63qr5WWH0RDhs211friCxtanthOTQw+L9bEkTBG8upO5WwznJxUwfBxy.9.a79ZJbFV1kPI0StPBS9gauNj.Y1.9rCkEotgDClzqtN5PpykvhXNv5HuCHXGN+Z4fsYLu5L8kiOR1asUXi6VzifbpX7IAbTwu7S9sq3D.QaWkGpf+Tys4GpQcUcodoTqI1HSC3gFTj3jY6q3GxI+BXQIN4GOD3DKbUePR2XejIMFTG9TTOab0llPRT2c1z8GfZiFwuh47X6YPZIqyFIw.RK6dcPYChdij42LIvuLy6QL+5GQ8sAaTqFRmDxrSA17COCBeB5jWlCrKtIAQe8BPi0xvtdtRPhqwQZQYprQYproKlSBXh+aQ7RnLwCZZUgloSGQgDaajIKflJSu32NOqMSEUAYWk2HS3fZr1p9CxajMbvBr1eM8Gav1M7G7NxC1tgrFa11UBXX4Xh1JPgA.q61paE.77O9y+pUVGYBiXc8XipjFAcb6O6gE6nDgEKts8gzPZkwlP231lCKrWcpT6.wDobWXb3+1.NjeQhg4lDWbX3qAJCGGLHFnnGAt44iECPSdPsXCVHHTSWidj0evDid3Cly6mR1OHajLzIUb5+DjK2F10MrQKo6hnH25dNO.QdJ18fEtkzJP1yERQbOJ9dKoRUcbQzz9n8vkodCK3AYws1k9PVL29lX8CXEOzY8l9kPrJihEz8gwAorzoGeRQDWIGIEQbk7ILEwPojX+RqGrRho+7sI3KLx+uo+EyD66ARzLgQmn5uMg5z1sJCYojtNfsr.pWNxcI81d62L4mglBUSHqCXtG2mZ1Doa0rrWTv5WEJFZEvV75eoqd0+u8yIBTWjRgvUXWpAKaUQk7jWMLyDpbPwrrmeFwafI6YExzLLldFfmiIcA1cU9DCOpDA0rRqJgpf74vL9ntfCEPbez.mGfbzZ8RTRlRRR..X0pQki4AVz+cIV+m+BPXhp8ft0QDdltPaH1tIDzhIQ7RuDysjg8ih6sUBdzihunz6ieJx0eGcXgwdniS61gTUo8R1lAjeo74oA9N.8TAtISmv5P7Rh+pdlRGpCesvUAXJiKByW3nnpiaJYVEgpQkxY8V1PKCcgdPQ8c6RHjk1oMyDYUYcwnSURbmFPf1MhJlWQX0wG3MMytPJkM93YWk1ofO8F+ssX6TvI1vSTbXnJQVPThDKvpoYhwBX8OlELaP0PLW7gmNJo.DmBM0wq3qOlUPTcpaeg39I5XWzR0OuxuDUMnlwuEcECYE0EuKxCQ5hcX4l6aZnyXJkXy6aAdnGJkSsup9Lo247iddmJdFJ1oh+iddRJdkHtn+geO62+Hlh+mp+udQ8+96TTD5iuGCI3gdZhmT7yKlZaUJs8mk+5V+oxem0e4JhsguhEFSZPKjONeubwtFLYVQIRZWBpQZZVMRZiwEIctFXLdMSCszVsCFNmH.gbwOZW5qQZFdMRZiyEIMTL6FlULM7yF2snaSyJUR6xdsRiy5lm0YkRZSpTZRkRWPpTp6AV7NrVrR9eaPMCSFoKQG6BWrEP50WKWrC80u6kIpuVtXB5KJs8We8hO6+d2ei0K70Wa5h9kMQ15s5k9pG78c3+d4Jx78K92reuaL9Nfxn7c.s8mu+e+w+xWcqW+Eb9NK3m2qbU8EmKjfqbgDw4BI5JWHE7qbL7Qiq7POsSeckCl1ojuuV5CAQosRzCKhPV5ATWhELom6qvz7rkSRVNIY43Yxxe86GMYo5rRRwzBwcUCnWpWtZZ279NdX7yolMh+cS8h1jZSx7.XmIKw2Por7wzJnpUJ8bL2ks7fsqR8HXeb8cbZ+MkCLL6st43mMLi98++qu9+TZ+xcIJxFG43h773hH0QVoSreO1xOO4Xe+p1e.Qe+OlvnD9OsIeduhoGE5G7C.1n5idz+3URqsOa8tiyf+IAD5usOOL6XC56mIubBmPzgD5eVlHqen+r7n94JLNg+7cF9MEy+YYg9+YiSJffcI8MEM.UN375YgNH8If46E5Em5eNcpf2BHso9mbk.+yiLXveFY3+JAveryNRD0v7f16byPRS7pHa0gHd9qSTS7pXa0Q.sctd1W0EMgRhxa7ODzkIANxNqcpurLfSxkk4mHeEUTJRPGQZuNKkSvCMx8dAk7Cku.hzcB8eLhziqnmhROOg9+4s9xMJlvk3axIzexIzexIzejbB8OyN71mzaAUgw1aA0fiRJgO1NQIUknlbWUfRWgFi0FwuSzbb56xamic9ExsExF4B4mOb4SqPzXteQZuVzNo9ZQuiNg954maBGrWjGbEjkwdzTOdQJwyCw9vM6xbOj6eMLzMwgNdkMoBYhyoBjzzk6mcOKbSaRuxFLU5rR5yE3apw5qm8Y2MIMa5X29bCxmKfGEkNrAM0tIsLo14ppAaZRB5M5U0oD1F6z.ay1++Pk9tHpmb85nneZkjDn6QHP8CB64FE2EYhfxFvuWw6SM7ftkDeg2AAKzROVzK80MAB1MGyYL2kia.b12HuAvwS4.RLkSlSUJGYw8FAINX4HBSb7N710vtVcIuQ1y57FZxO4XiUH5hFHMsiRtnqHTwDuMohmlryPPmRTNaQZ8ZQdXz1QdRkLh7+JAaXCoJ8JHpzTcGOcpvBisPvxMM8P7xV0jW0XX2Ej6dzjlBLIM04UZpBSRSMIM0E9zTo1CkFdb7a4tijrpi2Ko1Bp6heht31LyO2E7dnHlM++vplCTh0NW66.MfcZJTrng9ehtNyt56SQ1jmSgAXN2Y.lyxCvb9ACvbd+AXN2c.lyOrmygk08dMIXKgmCsixav2zXUUQQFbmHkuAfVj+z8