@Christoph-Hart said in Questions about the Saturation Module:
Working now!
Thanks for sending the github repo for the snippets as well.
@Christoph-Hart said in Questions about the Saturation Module:
Working now!
Thanks for sending the github repo for the snippets as well.
@Christoph-Hart Thanks, as always I appreciate your timely responses! I am having a great time checking out the snippet browser by the way. I have a few snippets I would be happy to contribute.
@Christoph-Hart Thank you, gave me an excuse to try out the new snippet browser!!
Sadly, the SNEX shaper throws an error once I load the snippet, is the processFrame set properly to handle smoothing on both channels?
template <typename T> void processFrame(T& data)
{
for(auto& s: data)
s = getSample(s);
}
Apologies, I am an amateur with C++ so still trying to wrap my head around SNEX code.
@DanH Thought it was just me. Friendly bump on this one ^
@meto396 Probably something to do with the buffer, it sounds like your issue is in how the RNBO patch is built, not with HISE: https://docs.hise.audio/glossary/rnbo.html
Also, I find it can resolve issues to move any dependency files/folders created by the RNBO into the HISE project.
@darkInteger Are you talking about the Random Modulator module?
@meto396 What errors did you receive when building? Did you receive them trying to compile it to .dll?
Does anyone know what type of algorithm the stock Saturation module is inside HISE? I think it might be a type of hard clipping based on the harmonics that it produces, but if anyone knows for sure I what it is I would appreciate it. I am asking because I wan't to recreate it inside scriptnode.
Another question, is there a way to script smoothing (i.e. interpolation) of a knob, similar to how the smoothed node works inside scriptnode? I tried Math.smoothstep
but it didn't have any audible effect. Basically I really like the built in saturator but I want to remove the clicks/artefacts when using the knobs.
@darkInteger I've never tried but I don't see why it wouldn't be possible. Are they failing to build for you?
@clevername27 I think @d-healey pretty well covers almost all of this in this video https://www.youtube.com/watch?v=24vH-oxX1m4
@Dominik-Mayer Awesome this is such a big time saver!!!
@pelle There are plenty of options in scriptnode already using the math operators (like tanh and clip), as well as plenty of faust code for different waveshapers like soft clip and chebyshev.
@d-healey & @Lindon Thank you very much, both of your responses have really helped me explore the possibilities here. I am pleased to know I can use the text property in this way, and will definitley explore this more in future projects. A lot of this particularly UI is already laid out so I am settling for bypassing any text that is not the exception cases, and employing it for any cases that call for customized value displays.
Example based on Lindon's edits:
const tempos = ["1/1", "1/2D", "1/2", "1/2T", "1/4D", "1/4", "1/4T", "1/8D", "1/8", "1/8T", "1/16D", "1/16", "1/16T", "1/32D", "1/32", "1/32T", "1/64D", "1/64", "1/64T"];
const filterModeLabels = ["Lowpass", "Highpass", "Bandpass"];
const LAF_StandardKnob = Content.createLocalLookAndFeel();
LAF_StandardKnob.registerFunction("drawRotarySlider", function(Style,Widget)
//...
if (Widget.text.contains("FilterType"))
{
// For FilterType knob, display the corresponding label
displayLabel = filterModeLabels[parseInt(Widget.value)];
//For TempoSync, display tempo sync values
}else if (Widget.text.contains("TempoSync")){
displayLabel = tempos[parseInt(Widget.value)];
}
else
{
// For all other knobs, display the value
displayLabel = Engine.doubleToString(KnobValue, 2) + Widget.suffix;
}
Style.drawAlignedText(displayLabel, [Area[STARTX] + LabelOffset, Area[HEIGHT]-Area [HEIGHT] +6, Area [HEIGHT]+LabelOffset, Area[HEIGHT]], "left");
//...
Not sure why this is causing me such a headache, but I have a LAF for my knobs with display labels. In most cases I want the display labels to just show the values, but in some cases I want it to make exceptions to display a specific list (LPF, HPF, BPF, or for TempoSync 1/1, 1/2, etc.)
I have figured out how to display the labels I want fairly easily, for example:
// Labels for Filter Mode
const filterModeLabels = ["Lowpass", "Highpass", "Bandpass"];
//...
var displayLabel = filterModeLabels[parseInt(Widget.value)];
Style.drawAlignedText(displayLabel, [Area[STARTX] + LabelOffset, Area[HEIGHT]-Area [HEIGHT] +6, Area [HEIGHT]+LabelOffset, Area[HEIGHT]], "left");
I cannot figure out how to make an exception in my LAF code for each specific use case. So far I have just been copying my entire LAF and creating a new one for each use case (creating a lot of redundancy). Wondering if someone can help me out. Here is a snippet:
HiseSnippet 1954.3oc6Ys0aiaiEVJSzzZ2KnEn8cB+Pg7DGGKmjoYf2sMwI1SLhSbZr6zY2.iALRT1DQlzPhdl31NE8mx9KXedeb+G09On8PcW9RRp6UTLxHFlmqe7vCO7Dpyc4lDOOtqhZtdSGSTTeWstSYhgGNDSYJsNBnqcBieUarsR8oiwddDKEU0G7TIa0bqq3+7iedcrClYRRHon7LN0jzlNhJRnd99mPcbZhsH8niRI8N62xjyNj6vm.P4AZUTFiMuFOfbFVJ1ZZJpOrgEUvc6JvBhGHSct0ztC4uhEH+yndzqbHxAFJcACEPV4vgTGqyilldJJpqedxj9AAS5OR6TpEMldxj+C7YfRzHcLPcsaCRF+BfjZJHsd.j9PstltzwhDNR77NZsXBhqMFB0ogRfrJq8u+XsC4fDLQ4Q3qIMcgAwZn+3JUJgfuJVKedHb6IPc6cvE8dN5ehpTKMk+EPwHhxW05ndGCDpFQ33Fsd5w8.JaGamC6bV2dun6De+7TWrEEfPO9XokuoYyJ9O0tMgqyEB9nP42Yucpua0rxWm6ZQbCRQBE6IaCedRVwNh5ggftUKlE0DCqNozv1dW7tWsq4h0HDPY7fwSLvFVKV95S.Dy5QtQjET6.evyFYFgcbBTnIrjzk90DYHFlh42ZqurEJT3WhcQxcaF.yn0wADv9iFyYv.8B9bKTr1LJT8VUnpTAoml8AcxYcpiZ2oyInCN6HTyFMZilWp7Qyk1Gz7EPxNyB6ZIsaJmZ5RfMAs4lXm1b90GvrZRHN5w.UpZSpCjIdJ2hbuTL+rtqrKY.0CLQyILSAkyzKX4he0EbA1cZWGJjdTnDxNhYWwTGRouhZAAjh4+l74jAqC.2AdOfZYLLpV.CoCNlPGLT.rkRcYPZd+T7AsDCmmc9DIBygB8xkFUKgj+4ONRiMqtSoLl.HzWt9jyGwk8HhnMEPDyQ+xPvREjQAYZFyXws.W.6rmStpKPtzNtODkCcpM3oFNNzwdD8YlHxkhbasUa7UDmfYp+O6XaCHc9nQ7jH.C5gnRDuOoXZgj6FzKz4loCHLTctiUAYDqXMTjLxU3CbnCXDK4VszlqD5ReeGTDqOZiz.alPbl3.Zy8lIxrwR0reITAGhs.1BgfmkA8KHCl3fk4eFURg9jvPkm2r4daCe9zhoxndF1YBIIe7kxggrgMHP8KBC9yJRrFrATFDS3SfBP83cEtT1.8XCUpZQHHDYLuI11zapsr.4b1e0Cma73UNbJ+S9UPkr4pKbNVLTOJf4ixKvrAohXiv2f1Ld.kUK1XdPUAQbRZ0x6jvB6Z1aH07ZFbvprpc4JUyvLZetQ4JfwqBe+nL5DhGByJ19al1caDpSZZOJyZ7YbW3DA3T.qDGCL.CUnPBkCbMicPkxFx8gTajNROY9h9GnJEQexmjPCBHeljVQz2LSL.lm6UC8ZvJmTFaYAVW+xLghsPUArG60Rn6jaPjZirBtYhPOp58TLHuHSHbSezVJULdCeJ9oMwAnwP5QXs1Sjm6UmOgY4omp5dTdmTu41TFGztZPboIooS1v3m+cRoXGUJ8IGW52YT+YRNBKWdJehGA04kDWeSJW2BUcHGHh91uMxTlNflDKX8JetDumpxAzTwgFvGnrXtzhrh.DENKec9ncfvY9ni.igDCIH+7SDMp8oxohHtbYmt5wqIPEiEDpkIJYgQJF8yDhu8SIRjSd5zEx0Vh0EDSnkfAND8k46j5AY37HzlPBjwRQ1RUqR4pOY2EqlO2JaWZoZVYWHwdaYAL3yqC6BKntpGxl6hB5IBIaJJrSI63tjBEC5inPa9qjM6CGuT3XnGkneWGZNx+28CaWJoEqeMMKg98rYoeS5U5u1sJg9itWon5gVTuwN3o99D71roRWNF65Qf+eP8zmEUres+V2r0xlboCV+o06yaZ84Ms972pVe9qeyNuoWlek8xDzGi+MQIm0yc2MyduMf392B0RENoqkh0h5HAwYmwEjNLc+6tIOr.NKKa6ExSVF0k63PbWHa4EO6daJpylL5JhaofNgiETQc8rW26CueW2qYPU8TBxYsXTQmwjvwMgixkWiq72ye4vJgGKnnntVHBAQE9WR76GdIwA8yoPAi7V9WWughO3Cuf8u+i9u+vmqbuUtZFkCd9xVGgEX4UUGBG.hiItBpLRndD4kTSRvEWmS6Hh20B9Xe7FdOjJpu8ch3aRbn09SiG78ew9Q0n.ZO7mfGI4jV2jTU9te5+Io9JY0VEUM02WUQYneGpxQ+GE+3XLXxemQfDv7+uJEX1e79wtX84bwhwzhPObTUpv69Pe5ik2ILXHM3jWEk4ee.efFr+.55Qj80SHeOLgLfj3LuS.489y7nhooeOM+BdmEUt02Yw8Ehen14Tg4vEiw0V.Fk44+Nfwv2zy6o0v1FJ6l.v00Z97U805bGtGJyKnrAmhEtTX8V6rIi5BIBlDv6LFzPtLwYMYpYv3JxwxHPW3XI+Ax7kPlFxwpgLMhXBYRlt7WXFr2V9tjdaeJ.lX9u5rbZmJGiLleS8HpE8EllYM0bJVcUUb6UUwcVUE2cUU7wqphe5pp3d2shx273ASD7QAaaTTN87F9EgUUav7eCTxrUkeF7bR6sA
@WaterSpoon Congrats on finding a solution! Very similar approach to the one I took. You can embed the RNBO patch in scriptnode as well for any further adjustments.
I know there are some new features like time stretch and core.record in scriptnode as well, which means storing buffers. I.e. once these are fully functioning things like a reverse delay should be possible.
Just fyi, buffers can communicate in RNBO and Gen~, so you just need to store a copy in both and your good to go.
@iamlamprey Fantastic work, NEATBrain sounds very promising!
@WaterSpoon I have been working on a reverse delay in RNBO/Gen that I am pretty happy with. Haven't finished working out the Scriptnode network yet (for tempo syncing, etc.) but once its done I would be happy to share.
When I remove the SNEX object it compiles, but loading the Hardcoded FX crashes HISE.
@Lindon @ulrik @Christoph-Hart Any luck with compiling the dll? I am experiencing the same error.