Resonance Suppression
-
@orange There's an FFT API but I am not sure it can be used in SNEX as it lies in the script api, or maybe in a ScriptFX processBlock, this has to be experimented.
Another way could be reading the FFT node buffer and analyse it, but as far as I know this process as to be made in script which is too slow for real time processing. Maybe there's a way to get this in SNEX, but I don't know what would be the (a) right approach :man_shrugging:
I reckon a buffer can be passed as external data to SNEX, so this might bea n option worth exploring
-
@ustk Definitely worth for exploring. Spectral processing is one of the current cutting edge tech for audio processing
-
@orange it's been on my HISE wishlist for a while now too, but @ustk is right it's not trivial. You need to perform fft , filter , then ifft which is a lot complex math to get it running efficiently and sound good. Perhaps someone could make an external for this. I've tried RNBO in the past with poor results.
-
@HISEnberg I think Max / Msp does spectral processing options too. I should read the manual
-
@orange it does it has an ~fft ~ifft that works quite well, and there's also gizmo~ for pitch shifting but nothing exportable to Hise
-
You're probably looking at spectral band analysis in FAUST followed by compression of each band (if you need attack and release).
I'm just thinking out loud, I haven't actually done something like this, but FAUST is super fast and I think it has the tools needed for this already available to you.
-
@aaronventure Faust constantly surprises me
Here is a spectral denoiser article: https://inria.hal.science/hal-04507625/document
I havenโt tested the sound tho.
-
@orange Found these slides online too, thanks for the suggestion @aaronventure . I am going to look into this some more.
-
https://faustlibraries.grame.fr/libs/analyzers/#spectrum-analyzers
this seems to b pretty much it. Even the code is there. Split into number of bands and it outputs it as individual outputs, do the processing with par and simply plug the compressor in there.
Dont forget to wrap the whole thing into par if you need stereo output.
For the compressor, pick whichever you like but probably the simplest one.
-
@aaronventure I think the problem there is:
"A Spectrum-Analyzer is defined here as any band-split whose bands span the relevant spectrum, but whose band-signals do not necessarily sum to the original signal, either exactly or to within an allpass filtering. "
but yes on the same page this might be a starting point:
https://faustlibraries.grame.fr/libs/analyzers/#fast-fourier-transform-fft-and-its-inverse-ifft
-
@Lindon true. It's worth testing and hearing the results. Maybe the differences are acceptable. You are, after all, gonna be doing some serious processing (Soothe ain't no joke).
If it sounds super bad, it's likely time for a custom solution. Keep in mind that the whole library is open source and and you can actually dive in and see how specific modules were made, recreate them and make modifications.
https://github.com/grame-cncm/faustlibraries
But some of the stuff that I toyed with was pretty good. The pitch tracker is super accurate and super fast, even for very low pitches.
-
@aaronventure said in Resonance Suppression:
But some of the stuff that I toyed with was pretty good. The pitch tracker is super accurate and super fast, even for very low notes.
Can this be a guitar tuner?
-
@orange And a very good one, yeah.
import("stdfaust.lib"); timing = 0.005; process = _, _ :> an.pitchTracker(1, timing) : si.smoo<: _, _ ;
Probably better to not actually be processing it, but to output it with the pin using
vbargaph
. -
@aaronventure What does it need to automate to display the note value?
-
@orange You make a node in scriptnode, feed it with the audio and this thing spits out the detected frequency. It goes a bit off on lower notes but it seems to have an error curve so do a bit of Excel and figure it out, then apply the correction.
You probably want to wrap it into a modchain node so that it doesn't actually affect the audio. You can then just cable this back to your interface using global cables and do the math to convert the frequency to semitones+cents.
-
@aaronventure Is there a good beginner tutorial on how to use Faust within HISE?
-
@Orvillain No idea. It's similar to the playground, and HISE will yell at you whenever you mess up.
I suggest reading this thread https://forum.hise.audio/topic/6505/faust-is-here/64 and as many threads as you can in the Faust subforum while giving whatever you want to do a try.
Read the syntax docs and the library docs in their entirety:
https://faustdoc.grame.fr/manual/syntax/#faust-syntax
https://faustlibraries.grame.fr/The core idea of Faust seems to be to not only provide a very fast and efficient language for realtime DSP but also to provide a huge library of building blocks so you can build stuff very fast. It's therefore paramount that you read the entire library so you can be aware of all the options available to you. You won't remember it all, but when you encounter a problem you might have a vague recollection of reading something and it'll prompt you to go look through the library. Eventually you'll learn it well, just like the HISE API.
It's a big toybox, so get playin'. And whenever you're ready to go dive in deep and do stuff from the ground up, it's there for you.
The only thing that I haven't figured out so far is whether it's possible to store data between blocks (like variables).
-
@aaronventure Nice one cheers!!