Scriptnode - Bias
-
@clumsybear The way I handle it:
HiseSnippet 3349.3oc6c0DaaacGmxxO6X435jN2scpPvaGR.RUDkjsSaQqnikUlwhSTsbSS2EWZxmjHLEoJIk+HAEnCacKG1v5sgsCaG1kcYCCXW1NLLCrC6vVGJPwPAVAFZur0gVfldYG1kr2GjhORQYSaWKSoPAzFy2G78+q2u++++3i7UwPWBZZpavkXh02qEjKw4AU2SypwRMDUz3VoDWhK.JUsR5RJlV5FVJ5ZbWeuVhllPYtDIRdCbqRLwnbbbBe7m82KdcQUQMIncQje2QWQBdSklJVtkVQ3apnpVVTFttRSlVWPXEIcskzU0ainnjfrbsDk1RrN7Vh3lMBfKwXKKqfnjpVhVPStDidcc48p1PeGMZ6uihoxlpP7E7bUQ2HZwk0UkwTLtTtkZnnJWwgyM43R.p3JGRRkCy.VUQVoS4rxCbEoc6Aq7HwHGD4wyRdYCj7xFD4kfg7FkRdWDTUxPokkaMXZaRvJZVPiZhHU.KYQaKWh8AKoiZflUllhaAKaftnSGtz7YydkzykM6ke9Zs0jvp5z5Z2R2BdasKc4T2O0DodiTo8WUsZAVGdXLzUUgFAVMVqabPc7RZsatIz3Jo2VTsMrSCQruW4Kn2xWV0uDkqYZnt1JZJV2tETqWFEb1hJj7eTapB0TKhz+Irk9UUUjgFbJHg7X.QYYdNB8xZ9yEh9NNvRTqwwryjAN2IYfCpyu7JkDsDw1d1hAjnoEDA.fk5IJA2FMolZINAnDzbKK8VHswR5MaoqgEZIF6vjT65NdyHrWmKdyWQnkiVXEYBdD4Fjt7c4QnAFHf.jAKtF.99fYyPLlNRX2AMsDyfJD5AcLxMJjipspwcP223XNnj6yQgUYG0GdelQkKzipyMhcXOukM3HsSkU0EsTzputBZNGdvmFvVjGk7ywPDuVcgcTjsZzofc+1BMfJ0a35iHcSAaKOpY1zfEaKqnunln5dlHVcy5NtIlXr74y+HbeTrfMcK8AO3A9JMGt3RkJQJ1Btqkai+K6+HRoDq9D4A2epToSOaEWI0rOW5YcFb9YuBo5Uzjg6hpH2TodCjSst.oQtJzkaqJZ40+A1oocE98mhQi0LUrXzWOr3I1oRfvagjbuHnhhkTifo2QBfdQXFm1zqsK5o.KWqFTxxkXGET9t8A+wI6V1kxYFwcIDhmYUA4I92BVVqthFLijADQZkLacKn0N5FacoYcC0BE30rW94SOUpNNHaY.QyQgqqWQUbuKYJ1rkJbMT+uR5MU0k1ppx8fc6U0d990ws3RRMD0zfplGGmu9h8JY3b9FftbM81XLhUEsLTPPDfa0tYUzDQI3R1TGprDif8gQuNK9ZroUUnlL4hGg9YWIO95D1Ux6Toq6aNaIKIRJ6+F8WX0zz.OBab85xXeZkEkPEuWEQLF0EA33GP1XPiLRrwEy1WdNDS3m7uIRh6o3DIwCfCrCkmPvqMIfqnvas+6WgBNBRbETKnlOqgz03vlV0jMbYrzuhCnM99OBcDv753TdIElXmBTCgGuQKjUCB6zC28jHty.lgs9yBNgEUwY5GlabAdVWznNzxFJvIVDzXYeEBBJIkUqRlVP.m4tCMxFpMQk1appHgocNecZLPYrKL6VmFb0WFAyad05Fv5W0N7lqdi0WaiRqjYGws4XuQtRejkF05AeGeBftoDJIGz+GMRdE4eYfH0SRFOs4rPrenhZV1iUtayqmiJ8pimU3gGmjZVQp3rfwNFVNmGrFzDZQMBti+Ph6swyz.j0RX6Ji7DQ.NWgMZz1FcOodIVUQy2M4U2eUwc8U1JB2TeGngubqe08e4Vs5pTD5nErE1+.tre5OA+62Wr5VvcnZMbb7ykoPtb4VfipRIo12YD+q3e+fEE3BOIyw0EIK7iBjjQoazMIiZ6gRxi9n894U9Rkduhzjeq1TW2pAxwheUPAAay0woH26XH1B+ejjB345IZuYKUDEcZY9lXDGn5QY.N7Qc43NDeQm0nFN7vHL.BSB5P+mUBWOQA1gHSFHQFIkwtD8nLD83Dn17wXs8Yr1q0GwZaTC+K2fNVqcnAj0Kwm4ZSz+lgTQDxbk0ZIwIRzixYOzhdTaYE82ele8M9n68c8I5cZIEAvmk+23itGtSE6Y3YSCTUz1ZGEq6YfBxcOuJiuBNy.LWmwaihnJFP3ULED5Rw7f2Kv4DEDBPwfZ6gMmHEHalb4d1mM6b1q9dYC3q2FpIsWm7N.4lKKWnlHmm768JxRzuCIrqulOh1okdIZm1d3Sj+e+re4+c1O+cIVSIAujqkzeibK9zhGAfmbAfUlKPgbt.wJyEB5k052OVYmErNZMg8PwJc51Ijt4BOFOpsrzcGd4.D0qhwPBPT2MNCYQFNGPREJZ3KjuySQ6IUcFGrJ6ZLLj4DHXkSnxd2MN37Q63fAcEGLebbvCwwA6LhCCwA67.HiCD9zCC7ES89+hVuv+Hv.gsWZEOw3xGciDtiOqjwwD2GhIlPzyWXA9qw4KnXxCiLNb33vg6Q3vOrXOCG1GZStAAzFuqZ5vFxyX.9rYigdhgdF1yDebZl3wIhOflHdgAsGHUg3DwiSDe.JQ7bwIheJhA9VexK86d525CBch34itgFGGPb7ymJNp3giDxse9T4hCKN5GV7gEv7DLJz7QVEZbtMNpJTFoM5ZOBGc2Licmgy7wY3Dmgy.w1adb.cm0dVsqlCbGAed2MY.ejbwMBbuXSSVLezJYwiXJICRNX9Tbdiex+o2akQJV7BwXwC8XwWdPGKdBJuYB0j8Zt9D.C5q+XFRcQTHDVq2DcY8tjNhxHu1nc3efATBprM7Pd43XyDqvfPlXIe7KHdFCXW+1Ehj9s89xd6607gvAtFl9HemYgNUO.NQbJvhxxqqWUotlnpiJFg02Cm.QXyzTfxPn7lhRaEvB5vnMmDTSY2Mjgph9dOFtfyqwrSsC.glMReaw073gabP1LYyxy40kb1L4yxmMu8REWBKCIebl5LnU9g+Xsm767tmzkD7sOBKI3aeDWRPjUjy2TJei5aJb.KMQ.Ox0HTP9Cmqhj+0o06pHElGWNMWf4hyEnOmK.VJ9EXt.i9hR+g2o9u4oDBJW.Y7aB4+pv9CCO4Y6fdmKhEza7ZTynfZz8KURTay2LtGJl7VvjMFCrOiAJz2WODggh0Cg9M6yi0ZJJ.Ht7g+UScFg9NT3LB87AhC.ls2LPsAt7yZsQ+7wn1u0KWfi6iKd.aeWbdGyEcerCGoWOoArnG1uW6bM6umEjOdoQIDrGilcvju97wOTt9mB4MegT+6.UHSxjXy7QrDaB9KJXo8zDapHQqDuWS89UbLikd85jugkwYE4IqnH92HqjcAPbsX.hyzEzq6zTi+ZMLLuTcoI656IGzWpNVOZKDc8nkL1i1IXCEy3rXJrirs0UaS1LCdz2OUm2CE1lL.7XhOE9jHes.+jHunZa941n.egMJTf+YlagmooxtaTc8RajqvlJVg3SkLyCxIWr2gg8GjSs7CEOHmo87o8lOx9s89n9E8tmuIai4tzsg0SP3Q26pqjibF6cWlo8IPiylMKw4whH2S+kJdOvRn2KT6I1UjWAtUjQhL7ATwsa04jZvYh1o6JgLiP3EBKuaKCnoIgEQZZN+Be6S.lSWouP97+otj9izCoOdEhGVk9Axx1q72iOVbjTkOcs3Hq0Z3lu6rl38a4+oUPsGl7248T+zUAPVXuihBX9GaT.mCXm3zQWCPN+aBiyNuB6tfamzQ12IeTOB+TfN4Ez2k+enu2taZ3Uedwt2udeXOj+bGDmN+Wnb5HcyoOrXXiG9K.N0STVGmSVO1C+pocpbo1FaCW90sOLhrkWFJud5keIOm4TifBxrLMQVmPOutH4XThRheOqmV.W.uClvG7m+UjBx4BR79EwEjmkqvETvsfKP5xb1E7ZV+yY2GWv7NwV78+ruEoEK3+dbM+E7rrETt75KqItopStuCRm.ULJMfi4YmyuNZFGcNQ47bdUb810pAM7ZbsuPECjsAbGa0eGw9.qLYFJmLI3UD2FRNzYIBkmhbcMcilouATCZfON5360gNK526F1Cc1Vg9Pm81RVHRXcCQMyV5lPdFCx+nu5xwNpkfVs0XatSQdZEl8JiXO1aaQmBYZ44DpHp44lgt1ycZUkcYujNQoJDwMx2lj7onOjnJsUMgj7G4YgsbKNGaw9srFMbVVCLm0tmjiEwS9o3XxvQtGxwA7DNzXUE7J7sLxomJd8Fvz3Sh7eTSrspkSodmFsptldqF5Z3UVx0HZMrOj50gdWA1fXnEsrvutFLYerFD461jYp0WW3lJZH24qRWu0iirfO7xhCRe8UATxMMdte5giSeyjC8m9lmrYnH3wHflte3UseLFMEkLz2PhdDghm5cNRIH9Vib3rOAXU70o6bLVCvulQbMQ.3aHIgsNdFj7I39j6Xzm7Gi9T3Xzm4NF8Y9iQeV3Xzmqcf8A66bw1V5Mo1+nBprL87MNASL0b+e.5.YDZC
It needs to be attacked with crazy gain stages, which makes sense, I think, regarding the electronic of an amp.
But for lower input, there are still weird things happening. -
Using the BiasL/R in the shapefx works without the constant peak.
This is because there's a high pass in the shape FX that filters out the DC signal. So either you find a way of calculating the offset introduced by the gain staging and invert it, or run the signal through a high pass.
The other one is that the math.tanh node acts as a gain module atm. would it make more sense to put it in a container with a gain node so I can leave the tanh module at a constant value?
Yes, definitely. As soon as you intend to change the gain as a parameter, use the gain module to remove zipper noises. The value in the tanh node is just for the internal gain staging.
-
@Christoph-Hart the high pass method works for the Bias, makes sense. I have a nice harmonic structure without any artefacts.
-
@ustk interesting approach
let my ask you, why do you have math.add before and after all the tanh modules?
also, what's the purpose of all the parallel tanh wraps, as you call them in the snippet you posted? -
@clumsybear Well, I just tested different signal chains... I found that it is usable, and gives a different result. I have no idea if it is good to do that or not, but it works... The idea was to make several gain stages.
The chain nodes (wraps) are not really in parallel as I just use them to test and compare different ideas. They are toggled via a knob so it's quick to implement new ideas. They are all different tests, never working at the same time (you can put aclear
at the end to kill the signal). It's easier than creating another DSP, going back and forth... -
nice workaround :)
-
After testing, everything seems to work as expected. The only thing I would like to try is setting the high pass filter a bit below 20Hz.
@Christoph-Hart Is there a way to do this, or is 20Hz the lowest we can go with all the filters?
-
I think I‘ve hardcoded 20Hz as lower limit inside the filters. The problem is that the coefficients get really weird as you approach 0Hz.
-
@clumsybear This is Script FX Biquad Filter. Below 20Hz, it is unstable. Also in about 4Hz, it is shaking :)
-
Interesting @orange
I have a feeling that the purpose of why I'm trying to bias the signal before hitting the tanh module makes the whole process obsolete.
The purpose was to generate even harmonics, which works. the problem is that the filter set at 20Hz cancels/filters out even harmonics. Is there another way to generate even harmonics?
-
@clumsybear You can bypass filters in the Shape FX module with:
ShapeFX.setAttribute(ShapeFX.BypassFilters, true);
There is no bypass button in the unit's GUI but there is a parameter for that.
HiseSnippet 1096.3oc2W0saaTDEdV6rU0NTDAEj3xUkabkBQ1l1BRHTci+oXQbrU1PK2UMY2isGk0yrZ1YcwBw87.vCFR7Bvi.uAvY10N6LoFKigDUUmax7cNmc+N+O6HoH.RRDRhSkKVDCDmOv0eAWMs8TJiS52g37gtCnIJP5kCcxhXZRBDRbbJ+BMfSk8HY+9ymcBMhxCfBHB4kBV.bJaFSUfNp02whh5QCgKXyLz9ws5GH3sEQhTjOkcqShoAWQm.mQ0pUxk3butgLkP5qnJHg3r2IhvE9SEugmq+KYIrKi.8gFDe7AkC2SDEpYr9+IsmxhBGsxuSHDG2QEQgx4QgCcGvBYWiWDM9nLAdEVXFObJsI50XGomiA81KmdG35GHYwpBIZtsuaeNlnFSwTfIsx0kT5ybbaKPM3pimQuB5IwCWaQsmVu9QdOod8G80Onp9OLUjn7lSkdc56eg223kUWb7DP0c7XHPU6gZ7GtRc8giS.0yUJI6xTETKCImG8XQ3qI4HOkLEzVLNkGnXBtmfelPAC40dT0epZkp+bUuaJZ730JS6IRQTDHWqXckkbSFVimN6RPdD5gQHmVoHFhsyg6uc4vf7.qghBdeNSMLFVdtHKqkk60qjVmbsyZBU3ilnYt1ZTq.5sKhHKS73+8886PUTcc0RLTuXPpXZu0oCLGaXyqxp31ARtRIhwV12pDDaDDgoQTkc2gdjvRAX31pLTWpwSXpEliL9WzxTessLMVm2tkz8.2QLUvz0y2RqguXT61luKG.8.27trBxtmaue3NdZyAqpC7mRiA70q4w8b0M1VLocpbd9.5SXzjSgwJyPlF6b1joVfeKBLBe.lS+OU7FKne42agoFiED2u0v43XD5r3HFehYYj8lHB4bHL0dQzySUhI2XeU1do973TkIZGIatkoCX+n0VNyQZV0xksSHk2tDxZpGNWjpPOb.Emkhua2yRm4iKEC.rbfygH7g65TR2Vmett9rlD9.OL6veg+VJrg9ryRgMVIzrl6v7779tuhNGxFymko+jryiExYdu.3fT27zXCW.3211K.Du0W.XXfBovERJOIVj.MLex2PVSSYc.UJ2V8bHKsztWOz8ZXVhsBroI3HJ25ggma9OVh7GOqKmhIZe.8lvgIAnypicl0JiRiRfWwBUSaXZXAbSS3aVYsks51CiMz+cjKA8++D8+6Kf14lVqImUVwQeFNrB5xmCQ3V1LN9w3Z0wzzH0JT6dpABtHdpfyBrGngiBlLArJhVqCgW.Cu0bAxgsNGh.ZRQeVzu15TFGnR6oq2VwhMku9T2b55oGD389wEGJ+dzEGtM5PwYkuCjouKVwdW7NlQCjhWGj+I.5Vu6mgf9MO6qlqfe9Nd1qAI6CcP6bqebcxLb.9qCBzUGeNFeVuMM2Aa9hcvlGuC17jcvlmtC17k6fMe0FsQu6TeazY40+HvntYeRliS98FxZEH+M14Qj.A
-
@orange oh nice catch....
-
cool @orange , didn't know about that. it could come in handy as a workaround to the scriptnode signal flow. But I guess I'd have to deal with the same peak in the low end which is produced by biasing the signal in the first place.
I was actually talking about generating even harmonics in another way then biasing the signal before hitting a hyperbolic transfer function.
Like, tanh produces odd harmonics
What produces even harmonics? -
Finally found a way to produce them even harmonics.
- Apply transfer function with positive bias offset to signal A
- Apply transfer function with negative bias offset to signal B
- Flip the phase of one signal
- Add the fundamental
- Mix signals back together
I want to create this in scriptnode. how can the math.add node act as a positive/negative bias.
-
Right click on the knob to change the range:
https://docs.hise.audio/scriptnode/manual/glossary.html#parameter
-
@Christoph-Hart alright, thanks.
Is there a way to flip the phase of a chain in scriptnode? -
Multiply with -1 :)
-
@Christoph-Hart easy enough :)
-
@clumsybear Wouldnt that be negative bias on signal A and no bias on Signal B ?
-
I did this configuration , works very well, except that I get a loud Dc thump when I push play in a DAW . And only when I push play .