Continuous EQ


#1

Hi everybody,

I am modelling a real time audio scenario with moving sound sources. I managed to create a resampler which reflects the travel speed of sound and adapts a resampler on each processBlock.

But I also want to adapt the frequency spectrum, so I have to change the coefficients for the IIR filter I used so far. But this gives me discontinuities on each update of the coefficients, which are audible because they occur synced to the processBlock.

Is there an eq I can use instead?

Will the new DSP module coming soon adress that?

If no, can somebody recommend a library to achieve that compatible with commercial use?

Thanks for all suggestions,

Daniel


#2

you can just run the output of the coefficients through a simple lowpass filter or slew in your processBlock(), before passing them to your EQ, to smooth them. 

top of the list here:  http://musicdsp.org/archive.php?classid=3

 

 

 

 

 


#3

Thanks, I will try that.

I was also considering to add a few samples before and after the block, I don't know if it helps, but the pattern on the block changes gave me the idea, it might be the problem (one sample slightly too low and the next slightly too high...)


#4

You can also run the IIR one sample at a time, you know? So you can change the coefficients gradually, not just once per block. If you're getting artefacts at the ends then you're probably way off track somehow.


#5

Thanks, that is also a good idea, at least to split if the buffer size is high like 1024 samples, i can split that.

But then I can't use the vectorized call, can I?

Up to now I treated the filters as black boxes, so I am a little suspicious what impact altering the coefficients have. Does this reset the internal state of the filter in any way? And would linear interpolation between two coefficient sets work? Is there a way to coalesce two or three filters into one coefficient set?

I would appreciate if someone has a reader on a high level, what is possible and what not with these filters.

Thanks, daniel


#6

Reading the source helps, so I can answer my questions myself:

a) processSamples isn't vectorized at all, so it's no difference to call processSingleSampleRaw in a loop

b) the state is kept (v0 and v1) when the coefficients change. But I don't know what impact that can have

I I can add two coefficient sets like convolution kernels in image processing, I still don't know.