Multi-band delay plugin - is it possible?


#1

Hello, everyone. I'm a newcomer to JUCE and to audio processing in general. I have an interesting idea that, I hope, can be solved with JUCE. I'll have to start with a general question on audio processing rather than a JUCE-specific question, but I hope you can spare 5 minutes of your time to give me a pointer.

I'll be processing stereo music. What I need is to first split the frequency range into 2 bands at 50-100 Hz. In the higher band, I need to delay one of the channel by a certain number of milliseconds. The lower band has to be delayed as a whole (left+right channel) by a different value. Is this doable? Is this doable by a beginner? I understand the concept of PCM and basic signal processing, but not much more. If it's doable, where do I begin?

 

I've just installed a fair audio system into my car, with a Windows PC for a head unit. Unfortunately, as I've learned, you need a DSP (usually a separate device, or a part of the head unit firmware) to create a good wide stage. It's because one set of speakers is closer to a driver than the other, and this needs to be compensated with the corresponding delay, simply adjusting stereo balance is not enough. Additionally, for maximum effect, subwoofer has to be delayed as well according to its location within the car. Now, my system, along with most other middle-tier ones (and many low-tier), consists of a stereo source, two-way front speakers through an amp, and a sub in the trunk powered by its own separate amp. I think it should be quite possible to delay left and right channels, and delay the sub independently.

 

P. S. Is this even doable in real time, or does the result have to be "rendered"?


#2

Hello ! This is perfectly doable in real time. The delay part involves only the use of a delay line for each of the bands. For the frequency separation, look into Linkwitz-Riley filters theory on Google or KVRaudio.com DSP section


#3

Look into Faust or Max MSP,  before jumping into C++. Faust gives you an easy way for prototyping and targetting many platforms very easly. The generated C++ code can even integrated into Juce.


#4

Thanks a lot for the pointers! I gave it a thought and realized delay in itself is trivial and only requires a buffer, so it's the frequency separation that's the tricky part.

In your opinion, will such processing preserve sound quality? I don't exactly image what will happen to the sound in which some frequencies are shifted and others aren't, especially what happens around the frequency division threshold.