How to build SNEX Playground?
-
@Casmat if imgur is over capacity then there‘s nothing we can do except for stop uploading images :)
-
@Christoph-Hart Yeah I though it was somehow related to the forum... Or use another provider
-
-
@Casmat You definitely need to declare
a
At first, make it0.0
Then add a parameter to control it -
@ustk shouldn’t the a be from 0-1? And there were some comments under that music dsp post, do we have to do normalization or am I yapping away at nothing?
-
@Casmat and as for the image, isn’t that how the saturation should look like
-
@ustk hmm, seems like im missing part of the picture, im not really understanding the whole use of the soft saturation function vs other common saturation functions like a tanh function, have you got any resources that can help me learn more about saturation dsp or dsp in general a bit more? I feel like getting a better understanding would help me ease my way into Snex cause I have little clue what all this dsp does. Thanks for your help so far, opened my eyes to the vastness amount of info I’m missing and I’m pretty eager to learn more! After taking some time to research, it may be right to jump back at this, right?
-
@Casmat A good sounding distortion unit is much more than just the saturation function. It needs clever filtering, oversampling to remove aliasing, etc... Tanh is a good starting point, but you need to understand if you want more or less of the odd or even harmonics, or asymmetric distortion. And this is only the beginning, as a "true analog sounding" algorithm is much more... You might find some literature about this in your fav search engine. The first steps you've made is a good start! Just go for a simpler equation until you know what it does
-
@ustk Thanks! Will definitely take a look!
-
@ustk Think I'm ready to try again with the saturator, did some research on the topics and I feel much more confident going forward! Seriously, thank you haha! Instead of going for that other formula, i found a more simpler cubic formula: https://www.hackaudio.com/digital-signal-processing/distortion-effects/soft-clipping/
So with the formula, would the equation in snex look something like this?
out = in - a * (1.0 / 3.0) * Math.pow(in, 3);
Edit: All the filtering/oversampling should be done with other nodes in scriptnode, right? or is it within the snex shaper node itself?
HiseSnippet 1321.3oc2X0sSbaDEdLvPxRRpZhRT6k9hdAQJEsKMMsR8h.rvlrpYAKLkj6PSrmkczNdFKOiA1V066iUeD5iPeDxaP643wK1FVQgsoIsEjf87yLy24+CDjoi3FiNi305fIobh2cogST1QcGwDJR+sIdeBc.yX4Y9NVaMIkYL7Xhm2hu.Y30ZIRwWu64awjLUDuhEgbnVDwekHQXq3Frw2KjxdrX9AhjZZ+zM5GoUc0RcNfmEosIornwri46xP0VfR7VdmXgUmEZYVtAzYKc7jvQ5SUN8OTXDuUxQhNjP3hbrIcGIjwASsUCg3QCpr7EcV9CoCDwhy4W4A9zBA9UmntOvagqBRctAPxqFjVxAo6SCixDo1JIHdtCsuBBHCYfqtNTb5R79UZWMnfxtVBaLuWFPb9AV8Ysa+De3GO96FlqhrBsxWq1Ua46oV8wq7SqzZkedE+KJZ3vYJCelLsTxyloXL5lcUGbUUdxa4YOw+DlLmethf42zmt70ymF4r5ZJpU8UB6do7R5dZYL5qvOe4H.ozsAe5G5uMyxvfRIOPuTdlUfvwaa9IPVsKD0htM2L1pSg75KE+fLGcbtjYalNg0MkB.+QiXHFnTFgcR85paPNV6qLG65Bw6SCD1nQyFiKLCLBdp+IvXYk48n6LbHOxVAvkn8dy7VF19FWFtRYYH7l3ie2RR+duoyLK.+EZUxdZFOkkwOPGHYSV0vRRk78AL9D+2J0QiCE+H+xUHoNHrEpwpQiXJEWZlmBokeO0bhruN2JTGOfYyDmAsO2MOIDZSGw6VhNfm2BXMjitMRi4EgbUbAwe.eUJrCR6UJryTg0J+1kaOUmMtHbT9Yh2sb9dSgS9ngm0groTpOsqNIUTlk5LJdlof3Vz1qAeSByMPGf38TgBIuX9DZjEGNPKmjNRqDQX7ycUSMoMSz4.ZJsqWxLGvDRL+2agc0wvsrbOVD3bmDvrivZFr+CjfxyVK57D0F3sJWoHKDhCArLX1Fza133gW7zAfN+GfoDzoTL9aQTtyqTf.J9D2iZT7yNxLhAcnHMvzC.LkwWqt754q+UuVsldt5BjBp5W.e1VztR3l5GSNDS5tHNvqBR0OqrOJ8.FjngYRgRQLOK.lriTalGKz8DNQvuKbEDx1BSJTurUNT26pJavAgfJle1zTmcfr+XnydwigXmTywhPeJEDzFHTk.tp40.1YWf26ddnkmhUm00KbL+TmCttln2fRYIVxkt3F3fbk9y6R6aNDkFwjSuHHyaKsdbBqnV3u8ToG4DdG5qYmvKVyqHG8QEzC0YI9ufCou3rfNWwhd+10cQuzq8hd6EYAHbPFSYR0Fdm527EjsdcYays4plp6X0PKz75AlWM8t8FSYtdclALUiKCnabSCvleSI+8muiBypC4f0DumIBLV1ExMBxkF9qEw1QcpevJ1qWm8KYYwPbIpwf0Ea1CeoqWO7l6XTS+YLxa4OBKC+9YQkOh6R0XQgVSwXn.65si5DtDJMKv3CfZwgrbocJ2l0VCzJ8zQPUQ884vf1iOl2rQyrLnMsVnWZEmGtw9bImYpUu8Ea7JXrDKaPwPi4xWby+aWlY75yoN35iMD7+u6NvK9+5cfu9UeP+v+cGE+LJzWdc+hPo+GmX4GhUm+P7FIrnL8QQt+hCrn+1Eb.6VU7+moEc.R62gbha6EJt+MIAFWbTTDlu9kvzmYel0miy7UywYd5bbludNNyyliy7MywY91q7L3j5Mys5DWNOvHXG2JxdtMWJR+I+I5asV1C
Thanks!
-
@Casmat for these simple one liners you can also use the
math.expr
node, just rename your variables toinput
andvalue
and you can use the single parameter as drive parameter:output = input - value * (1.0f / 3.0f) * Math.pow(input, 3.0f);
and yes, the filtering and oversampling can be done with dedicated nodes.
-
@Christoph-Hart ooh! That's definitely useful! Thanks Christoph!
-
@Christoph-Hart Oops tried it, but it seems to not make a distorting sound, am I supposed to do more than adding the math.expr node?
HiseSnippet 1591.3oc0X0sTaaDEdkMKDbn+jNIS6zqzjoWP5PnVNo.o4hvuNgIwfGDgvMcxrHs1dGj1UizJ.2L499XkGg9HzGg7FPO6tRHIvCAbSosjYB97yt642uywzMV3QSRDwHqo2cXDEYMC1cHWNXsADFGs45HquD2gjHow1FVqNLhjjP8QVV0ethg0zSfz+7wmsJIfv8nErPn8DLO5qXgLYA2tK+RVPPahOcWVXIse7xa5I3qIBDof8TG2DEQ7NjzmtEQoVMLxZxM7YRQrqjHoIfNqJ7G5NPbL2n+drD1AATEgCxEtHCazZCXA9cy80DDxB2svyqa776h6v7YmwuHB70ZA1EmnbLvp1kYRNWCSxpjIMgwjtC10KlEIKjnrmai2jCIjdDHTW1TL5hr9.dMAn.WNeH4PZ6Xf3rCL6BMaNmM7eO3o8R4dRlfaK3aIjzs4y9fFuqwzMdeC6yKpWuQJS8Lwhf.Z7HEqxtwW1AmkmFd.MdN6iHAozyTDb+pwzIuZwTOiWWRQAeSNStcDMitsHvWEqTe9hY.TVXC9zq2bchjnRJY7.8hnwRlxbrVmdDTUaRQSiWmlbnTDo0MLRvU2f0LxrZJSRocffHY796x.ylAVvWgKyxAcR4llgmQ7gCV9Xlub.TvZseMDZ.k0efTQ4WXuFCoA9kzgGHHw9nC5m2DM8j999mptIljFVv8zSO86qxsUFasxR5IxBkyMKcHo1uZgeWCa66Cu1aTl18+EamGOey4T7VmkDEPFtsmjbDcKcxED2iDjP0xek3X3X.qmnIeAyP4zZQM8ZoIRQ3yiIQCXdIUN45zdjz.4JQQTRrBjAjJiSMBWM.vIfqZGHfJ.AMmegmn+YokZt3SZtniVqcE86GP6H7oUtYUuMzqy4z.kon485D5dTOnBrjsb1qABaGPjtxgAm6l5tQdJ377gJ4XYwqzJm+Fb+Ru8BMdOfNdAT..+Q3mBOYUPIE5al.nqpBRfpcmmvjCKiNeMPpZdoHUWUS7N3tLo2fQai0FgMB8a+SXiY36eAdid8frZgANAt89iKXdyqMXdibrf80O9LYj1s22Yjv3+Nt.xLJlFQho6J5BsWylPBiBnP0NcN6CBDdG5x9M5EwYiLlvpJMl0yTlkLNvwS9YZDGZGQpBxqCQFy.DOL.Q3BfLdzrlfDExVMExlgtohVUW3R49ZBEBUlPGEsUlPmbgk.w2hJOVDenNcj8Yj0TlXehNH+1dm3fVIHPbrB5lkUkZbJZbhlXJby4g+gbSSf4H9aycA.a8VNJmTe3thfgQCDblmJ+YtpbWZkPQJWl6WufjrKgEnp+spsE.EAA21DERyvtDEL+cvpoXPAJMdduyJTqXuE0J5pPHOzEfDCovD9DCO0EmCeahefMEpmKoVhptRtIpns.r5IlBSOIJFFQV1ZtMND987JIUJQ+DOPsRSKKnfF8ZpWZRX8D3Y2SUjgrVBy3QoR6GZp5r+Q6YcluYO6ex9Qvud.P2QYBQhimUq3bF9OU2gW9ZmBFDePZ+760pNpTXQ0PlSAVPGFOSsBnmNjSNGuO9LWIMR0aUVO2CoGaBRk0zXAlK3BWSEKAUI3XcNuXF7lI6oj5QBNyUpgVUHNLjnqkGqcSJCGdOivaieCLjVurutF6dZ5dh3P6mSgxOEVtykrt+ebUW2O5JutuYugcg46IQhDXqnR274j0prr0oxTdU0Mrpnkx8ZCtmS4TSNyRZdqk6R3UtLftxM0gUZcs+7YavI.7mKE7F+sS7.mkTo5.tfTXW.81RNkOXA6VkY+BXABHu3UYvX8pXvSb0vfqtiPI8GwHqI+m5qDMwUaJ5mX47+6uWTkg9SmaitL0v5M3GQCf1TsM9M3r0Yy4VsOqifKxGmTTArCEFZ1uOsJrynbnUjRXe3BN2c4cnATRRodueX4WAiXHwczC.FqXw0+ayNx702gMlqsBbv9uSd6FsL6R2ss9UZ21O6163um6MbGJfe9+mL82hAL8V15zs8+946ahUnuIdiPhWr3sdlu4gBv3VZNfey0+09lF2QQa6fNxrEDVsGNJDF67VOOUM8Cg3ynOSqw3LOZLNyiGiy7yiwYVXLNyhiwYV5ROiZh+JoRQno9GXzcC8lnVVlMfzsBn+BToL8JA
-
@Casmat sure it does, it's just subtle. Drive the synth at 0dB and play multiple notes.
-
@Christoph-Hart thanks Christoph!
-
@ustk @d-healey @Christoph-Hart Tried to implement the original musicdsp.org formula, but it seems to be affecting the top half of the wave, I tried doing
return out * -1.0f;
and it worked for just the bottom, but How do I make it so the top and bottom of the wave is being affected? Basically making an odd symetrical curve on the shaper
HiseSnippet 1771.3oc0X0rTbaDDVhkAav3jXG6jT4jJW4.tJGpUDG+SxAVfk0lxdgsPXr8gTNCRyt6THMiJoYA13xWxobKmys7Hjq4leGxKPdDxafS2yHgjf0X7FaR4kp.lt6Yluo+4a5Y6jH8YooxDK6o2ZXLyxdVh2Pgp+J8obg0ZMsr+HRaZphk3XDs7vXZZJKvx1t18PA1SOok9y+r3xzPpvmUHxxZaI2m8PdDWUHsSiGvCCaQCXawiJY8MarluTrhLTN.vSMRcqXp+tzdr0onYSPrrmZ0.tRl3onJVpk8jKKCF50WtuvX+17T9NgLbfqkGrPFwsjgAHhQoVqzmGFzI+bmZYYS5T3EpY7BWgzlGvOTdg23SzJbJlQY+g8DUgWsJvysL7pWBdi.R1kfzjFHcIhmeBOVUnAwyEHqIffSWJ31KCEisV1ujrhDLPnlOhtKqUBL3vIL2spW+FNvut922cfvWwkBGoXcohsgXtqOyymY5YdwLNGUU2tiTGtMIxvPVxHUiQ5jSZhyIFDsCK4FN6QCGvNzP33W0mRd89zxgbeyotjgRwZBtZiXl30kHXk4pf+6Qq0jpnXfHSFXWLKQwQHX2jsGjUaBKSSZxR2UIi01FEKE3JXOqJKOxDHZEJoJtn2Vb.pbHB8wjxhbsNnbQyvCG7xcZrOOP0uPvO2nOi2qeoxom1HCiF.MC4Arg6HoIAV6zKuXZ5oBBBdEZMWwhJj9pW8purpzExDqMVwNPUXbN7ztlI9Aaxymww4Zvt8XDhW66bbu470uAJqIOMNjNbCeEcO155.KntKMLko0+P49vz.Q2UO79byH2Etsd7JCRUxn6kPi6y8SqLylrtzAgpkhiYzDjrAzpRFXTtbHvW.K0lfiUBJpO+stq9yctS8ae2521Ua0Vxd8BYskArJqLVWC04BAKDghV1iRYay7gruRX4vcCT1Jjp7TCCOxJ0Y07PvQkCYwIphcYgb4qJBJs22ZlW.rjGiA.3djACfsrJgDxBmo.pnpvBfk5hTtZXYV52YrTmVHdIRGtxu+nw3Di.iPc26CLlwseQxpc6BQ0B.NIo0SN6HxmImS3I5Me1rgNsdh6Hov+ERAcYbBKllv1R1AJulKkFEGxfrc1Mb1IT5uqG+mXGmiM1.gkQKly2jlkNNTwScp8JtmbPYS4.j5qMUkvAlOBPQ3AjL9rrh.jm2dBjQ1LtNNFyK7Xh.8.jgJSoKN1NSoatxRj4qyT6KS1UGNx9eK6yY78oZm7y5dfq0Rggx8QJbdVVp4PwRR0CNGo97vOVdCRg6PB1P3AD25tcvCodxcjgCi6KEbeL9YVp7izRQxA3ECly08ooaQ4gX9u8DqCTQfysEEYZF1ghz8Whf2fAInrj48OLQsBdKxUzYgPbnCPIFwfa2SMxvENm913+.LEoueBalpFpG8J0LHffawEIoB1AOKsOEtuypBltLfoD17k0WNe8MsaktB0TWfifp9IvscZxJgvJsVf01XRG11oYejcUoTkdsfb8CxtVlrEExzvTIuPd.KoCP7iiVZP.W1haTA+U6KfarL2Gs7.nv2TVVQBhAQ.6f7bmUgz+.niQ8lgf2pjmEwd9HHp0lKxPbA6Ua5AGQ1+rnmhEikmksyaW19FObYKQ2w4HMS36wrN1RakkrX5LWl5CcRC+F7kUiUeFgJngCSYyWwlSe7JumYfLrRj6HAB62otVqRIhSQ5go8UNUWvjA16nOD4Mj5MQkCPkXYsSNV9zWd7XID2pFK+8e629yEOVr7k89iq1vbPzuS53gx25znF+ZiS0V+ieZy+ZQyqC7hjRUefq8n6+MaX89+nOKYSVJSYVkSvAjcQ8qmdXVxZoaiZ8og4KDPjtrTtaDUSsOVsrWt6fqZTdAxigdV0uAVS4dU83txjHm6w.1Xr0F22EuBN9T+JXSazaAs6lFKSgGKTZkOhtEJqqISMPT0binJVgGuVvwys7YHWXIKOeiNTQkECFWYkZyK8Jl+dwUEHGsGCNMAanIgnUX5fEX.zZr9wCtkmXg3EJK99P+zPbwuReh0NouP.2w7KDXp2Weg.Sd55i7jg2G.uLnRauSmiQONdywph8Xg3cQHFuLI6Ac4RqVZ0VJj4MTUDz2jAsM1qGq5sli5.sjRAMFTH4JM1jExnokJ29pFODZxhlzVeyyX4KbeqeBvHiWeAw.WGjOv4+Rb6LMM6DecWsS0q6dmi2w+kdmwUn.k4GNQ5Om.z3K3nC2N++GuOKdD4YwdDQ8SjOy271ajv37ZIv4Vn+dumlzFG63ZsmowGB9RTqH3Zmm46i4zeM3eF8bVXLly2LFy4liwb91wXN2ZLlysGi4bmSbN3M9KMPIiL4+ffNqZdPisooGcof0+BpxhvJC
Edit: Don't know if it'd be useful, but here's a cpp script of the same music dsp code being implemented into a program called psycle: SourceForge
Note: Since the snippet probably doesn't work,
you'd have to create a new file andcopy/paste the get sample function and paramemter callbacks from here: https://justpaste.it/3iopy -
@ustk @d-healey @Christoph-Hart quick bump/update, on the other cpp code in my last post, the code had this:
if (sl > 0) { ProcessChannel(sl); } else { sl = -sl; ProcessChannel(sl); sl = -sl; }
which I think is what gives them the odd symmetrical waveshaping effect, tired to implement this in hise, swapping the
sl
forinput
and I got an even symmetrical waveshaping effect, I'm lost haha! -
@Casmat nvm got it! Had to tinker and multiply a couple values by negatives and add if statements!