frequency bands splitting, is there an object useful for that?
Hello,
I'm new to Max/MSP, and so don't know all the objects.
I would like to separate an audio stream into several audio stream, by frequency bands (for instance 20 Hz to 500Hz, 500Hz to 4kHz, 4kHz to 20kHz), and then recombine the signals together as one audio stream. (that latter part should be simple, a simple +~ should do it...).
The point is being able to treat independently the different frequency bands (dynamics for instance).
So far I lack the building block that would allow me to have thoses bandpass filters. (If possible I'd like the output be sample accurate with the input if no treatment is done on the bands). Is there an object that can be used to build such kind of filters in Max?
Best regards,
Laurent.
Hmmm, you gave the answer. Type "bandpass filter" in the search field of help and enough suggestions appear to keep you busy all night.
[svf~] is a state variable filter which can be used as a bandpass filter.
you could also use [filtercoeff~] with [biquad~] to make a bandpass filter, though i think [svf~] is easiest.
of course, you will have to work out your Q for these bandpass filters, incase you dont know, Q is stated as
filter center frequency / (filter low cutoff frequency + filter high cutoff frequency)
i think, quite possibly a better way to do this would be to split the audio by the frequency domain using FFT, so by using a [pfft~] object and processing inside this.
Thanks a lot for your answers.
I've been searching and found interesting things in the "crossover" part of the "Tutorial 26: Frequency Domain Signal Processing with pfft~".
I modofied the patch so that I can build one with as many bands as I want.
I'll do further tests to check it's sonically acceptable. The svf~ might be more complicated, so I'll need more time to look at it.
Best regards,
Laurent.
The [fffb~] object might be worth a look too. It acts like multiple [reson~] filters.
lh
Since you are looking at only 3 bands, my own personal recommendation would be to use two cross~ objects. The cross~ object uses a filter algorithm the is specifically designed for this purpose and will deliver superior results to the other methods.
Cheers