Giving a mono signal stereo depth

It’s good to see you, old friends. I got the idea for this thread because a choir I’m a part of went and did a concert over in Portland (don’t worry, it was before the outbreak of carunka virus). The main guy in the choir wanted to turn the recording of the concert into a CD. Bad news though, when I got ahold of the audio, it was all in mono (suck!!!)

I know it’s considered a bad idea, generally, to take a mono signal and try to manufacture an artificial stereo image for it. Even worse when it’s something sensitive like some kind of jazz band, or in our case, a byzantine choir… but I had an idea. I messed around with it for way too long— a few days actually— but eventually, I got it to a point where I think I came up with a reasonably good and natural-sounding result. I’ll explain the process in the next post, but basically here’s a place to talk about techniques to turn an otherwise mono sound into a stereo sound. Doesn’t have to be vocals or concerts or anything like that, share synth techniques too.

On Choice of Filter

My idea was to do a band-split on the recording, with maybe 12-20 bands. I didn’t want any of the frequency bands to contain any frequency an octave higher than any other within the band. I also wanted to make it as clean and transparent as possible; didn’t want to have to contend with any phase-shifting BS like IIR filters give you. Didn’t want the obnoxious ringing effects FIR filters give you. Luckily, there’s a thing called a FFT (fast fourier transforms) filter, which gives you the same benefit as FIR filters but without the ringing effects. Internally, it completely deconstructs the audio and rebuilds it as a frequency graph, so you can do all kinds of complicated manipulation on it cleanly, it’s good stuff. The EQ plugins in the LSP (Linux Studio Plugins) project allow you to change the algorithms being used, so you can put them in FFT mode. Massive latency, but who cares? About the latency, though, once you put the plugin in fft mode, suddenly it’s not reporting its latency accurately to your DAW, so check the latency with a latency-checker plugin and make sure your latency compensation system has the right number.

Band Splitting Technique

Okay, so we’ve chosen our filter, now let’s talk about band-splitting technique. We know that if we have two signals, A and B, and then we phase-invert B and sum it to A (we’ll call it A-B — A minus B), then we add the original B back into the equation, it becomes A-B+B, just giving you the original A signal back again. “Oh wow, tasso, so interesting! Tell me more”

Let’s back up. The A channel is the original signal and the B channel is the A signal except low-passed. So we want to create a new channel C which is the output of the A signal summed with the inverted B signal. C = A - B. If we do it right, C will be the A channel, only high-passed. If we sum C back together with B, we get A. Try it: B + C = A, in other words B + A - B = A, which equates to A + B - B = A. The math checks out AND spells out the name of epic swedish pop thing, “ABBA”.

So we lowpass the original signal with an FFT filter, then we do the whole C = A - B thing, then do the whole B + C = A thing (remember B is lowpassed, C is highpassed, A is the original), and what we have is a perfectly transparent band split. So far we only have two bands, but we can repeat this process on the new bands to further subdivide them until we have as many bands as we want. It’s a highly CPU-intensive process, FFT filters are much more CPU-expensive than IIR filters. Just keep that in mind. You might want to make use of your DAWs “freeze” and/or “bounce” capabilities

Manufacturing the stereo image

There’s a more subtle and realistic way to pan a sound than to move the pan knob. In the real world, if a sound comes from your left side, your right ear isn’t going to hear it much quieter than your left ear. There is a difference in volume there, but it’s not very big. Instead, there’s a phase offset between the left and right ear. So if you want to create the illusion of a real space, consider introducing a stereo delay. Just be careful, you don’t want to introduce nasty comb filtering effects when summing to mono (this is part of why I did the band split to begin with). For each band, create a different stereo delay. I think that would emulate pretty well the presence real objects in the room which resonate and reflect sounds in their own small ways.

When messing with the settings for these stereo delays, there are a few things to keep in mind. Firstly, not every band needs to have a stereo delay. Use your ears, exercise discretion, don’t do it if you think it makes the situation worse. Secondly, take care not to introduce comb filtering when the left and right channels sum to mono. How to minimize this? I’m sure other people could give you their tips, better than what I know how to do, but I do have something. Take the highest frequency in your frequency range, let’s call it F… F represents that frequency in Hz, not in kHz or anything goofy. Since we’re probably setting the delay in milliseconds, take the number 1000, to represent 1000ms (1 second) and divide it by F. If F is 3kHz, then that means doing 1000 / 3000 = 0.33333… ms. And then divide the result by 2, to get 0.16666666… in our case. The stereo delay should be set to some value lower than 0.16666666 ms.

Once you have the duration of the stereo delay, don’t be afraid to delay the left channel on certain bands and the right channel on certain other bands. It would actually probably yield better results to alternate like that.

That’s pretty much it. You can try other stuff, like translating the formerly-mono and now-stereo sound into mid-side and saturating the side-channel a little bit to introduce new harmonics. Idk, have fun. -jrisreal


To demo the difference it makes, here’s a snippet of the original recording:

And here’s the one with the manufactured stereo image:

Perfect? Probably not, but it’s definitely an improvement. And when you sum it to mono, it doesn’t get destroyed either.

Pretty good start tbh. ✮

1 BigUp