This topic is quite interesting, i saw a lot links on the web and a lot more boards with people asking how to do that. Let’s look a bit more into this topic, let me show some way to do that and let me first answer some questions:
- Q: Is it possible to create real 5.1 (6 channels) sound out of a Stereo (2 channels) file?
- A: That depends onto your own definition of “real”. The Answer isn’t easy, because you can of course create a 6 channels file by mixing, copying and adding effects – However, in this case we’re just adding “filters” to two existing channels. Imagine someone recorded sound in reality with 6 channels, you will have sound in the back, sound in the front, sound on the left and right. Sound which is coming from behind isn’t coming from the front, sound which is coming from left isn’t coming from right. Now, how do you want to extract the sounds from “behind” of your two input channels? As far as i know, this isn’t possible – This said, you got the same sound on all 6 speakers (which are of course a bit modified due to mixing, adding effects, etc). So while its technically possible to create a 6 channels file out of a 2 channels file, its not possible to make the “directions” from which sound is coming correct for all 6 channels.
- Q: What are good settings/effects for creating this?
- A: Also a good question which is difficult to answer, because: Just because it sounds good on my hifi equipment it doesn’t need to sound good on yours. I have no specialized knowledge with this, so i’m just showing some examples and using an average of what i’ve found + my own feeling about what sounds good here. You should play around a bit with the possible filters
- Q: Why would i want this?
- A: Seriously, i don’t know – The result sounds better than my amplifier doing the up-mixing from 2.0 to 5.1, that’s why I’m doing it :)
So, after we’ve talked about this, we should look a bit at the various channels and think about how sound “sounds”:
- front (l, r):
At the front we should listen things as they are. should contain music and voice as is. The only thing we might want to add here, is a high pass filter. - rear (l, r):
Sound which is coming from behind is usually not that loud and got some delay. - center (c):
First of all, the centerbox needs to combine the front left and right speakers. Some stereo effect on the center box would be useful. (Some people are saying that the center box should contain voices. I personally dont think so. I prefer clear voices on front left and front right -> because i want to know the direction where the sounds are coming from.) - lfe (b):
Well, i guess everyone knows for what bass/lfe is. Some lowpassfilter should do the job.
Optional:
- We have one channel for bass/lfe, so we could reduce the bass on all front channels and higher the treble on them to have voices and similar tones more “clear”.
- Sound from behind usually doesn’t sound very “clear” so we can reduce the treble a bit – bass should be reduced like 1/3 of what we used in front (if we reduced bass with -3 in front, reduce it here with -1)
- The lfe/bass doesn’t need treble i guess, so we could reduce it here, also.
- We could use some frequency filter for the front and rear speakers
Routing/Copying/Mixing:
- center
center is mixed from front/original - rear left
rear left is copied from front left - rear right
rear right is copied from front right - bass/lfe
copied from center
Let’s start: I’m using “sox” for this audio editing stuff – Google for it, it’s a really really nice tool for playing around with audio stuff. So, you will need “sox” and i assume you dumped the audio already to audiodump.wav. This can be done for example using:
mplayer -ao pcm:fast -vc null -vo null yourvideo.ext
should also work with mp3, ac3 and other music files. I’m also assuming your source is 48kHz. By the way, if it shows clipping or something like this, just decrease the volume – you can turn it up afterwards again. So let’s see how we would do the “copying” thing:
# create front left channel file sox -V -c 2 audiodump.wav -r 48000 -c 1 front_left.wav avg -l # create front right channel file sox -V -c 2 audiodump.wav -r 48000 -c 1 front_right.wav avg -r # ceate center channel file sox -V -c 2 audiodump.wav -r 48000 -c 1 center.wav avg # create rear left channel file cp front_left.wav rear_left.wav # create rear right channel file cp front_right.wav rear_right.wav # create subwoofer channel file cp center.wav lfe.wav
However, that’s not all we need to do. Let’s now add some low/high-pass filters and frequency filters in general:
# create front left channel file sox -V -c 2 audiodump.wav -r 48000 -c 1 front_left.wav avg -l sinc 500-24000 bass -3 treble +1 highpass -2 750 # create front right channel file sox -V -c 2 audiodump.wav -r 48000 -c 1 front_right.wav avg -r sinc 500-24000 bass -3 treble +1 highpass -2 750 # ceate center channel file sox -V -c 2 audiodump.wav -r 48000 -c 1 center.wav avg bass -1 treble +1 # create rear left channel file sox -V -c 2 audiodump.wav -r 48000 -c 1 rear_left.wav avg -l sinc 100-8000 # create rear right channel file sox -V -c 2 audiodump.wav -r 48000 -c 1 rear_right.wav avg -r sinc 100-8000 # create subwoofer channel file sox -V -c 2 audiodump.wav -r 48000 -c 1 lfe.wav avg lowpass -2 150
I guess, now it’s time to modify it even more, by adding different volume levels to the channels and reducing treble/bass sometimes. I’m also adding “loudness” to the center speaker to let it sound a bit better, and i’m doing the same for the sub woofer. Altogether this can be done this way:
# create front left channel file sox -V -c 2 -v 1.1 audiodump.wav -r 48000 -c 1 front_left.wav mixer -l sinc 500-24000 bass -3 highpass -2 750 # create front right channel file sox -V -c 2 -v 1.1 audiodump.wav -r 48000 -c 1 front_right.wav mixer -r sinc 500-24000 bass -3 highpass -2 750 # ceate center channel file sox -V -c 2 -v 0.8 audiodump.wav -r 48000 -c 1 loudness +2 center.wav bass -1 # create rear left channel file sox -V -c 2 -v 0.7 audiodump.wav -r 48000 -c 1 rear_left.wav mixer -l bass -1 treble -3 sinc 100-8000 # create rear right channel file sox -V -c 2 -v 0.7 audiodump.wav -r 48000 -c 1 rear_right.wav mixer -r bass -1 treble -3 sinc 100-8000 # create subwoofer channel file sox -V -c 2 -v 0.7 audiodump.wav -r 48000 -c 1 lfe.wav loudness +2 bass +6 treble -6 lowpass -2 120
So far so good. We could now play around a bit by adding a reverb filter to both rear channels. Try out listening the channels, you will notice quiet clear sound on the front speakers, good sound on the center box, nice bass at the sub woofer channel (You could try to remove treble -6 and do low-pass to 300 instead of 120 or to 150 if you don’t like the result) :) – However, now, after our “heavy” editing, we should normalize the sound a bit.
# normalize the sound in batch mode (to have the volume correctly) normalize -b front_left.wav front_right.wav rear_left.wav rear_right.wav center.wav lfe.wav
last but not least we need to mix it altogether and we need to add the delay for the rear speakers – This can be done this way:
multimux -d 0,0,15,15,0,0 front_left.wav front_right.wav rear_left.wav rear_right.wav center.wav lfe.wav > final.wav
Our 6 Channel (pseudo-)surround file is finished. Let’s bring it into some nicer format, for example using faac to aac. Remember we got center on channel 5 and bass/lfe on channel 6 so we need to add -I 5,6 to faac, so that it’s mapping the channels correctly.
faac -q 100 -c 48000 -I 5,6 final.wav
You could also use -b 384 or -b 448 dunno whether you “hear” a difference. Our finished file is final.aac – play it for example with mplayer, using: mplayer final.aac -channels 6.
Bash Script
A Bash-Script doing this ( + resampling to 48kHz if its not 48kHz, + the possibility to choose between ogg, ac3 and aac) would look this way: stereo2surround
The Script in Action:
wdp@deb:~$ ./stereo2surround audiodump.wav ogg Dumping audio... Checking sample rate... Found 48kHz sample rate... Creating front left channel... Creating front right channel... Creating center channel... Creating rear left channel... Creating rear right channel... Creating subwoofer channel... Normalizing... Muxing... Creating OGG...
So… Have fun with your 5.1 surround file :)

I’m completely new to the 5.1 world and found this article very interesting. I’m using Linux to prepare huge Apple ProRes 422 files for cinema presentation, and I think I can use it to boost the 2-channel material quite a bit. Thanks :)
Play a bit around with the frequencies. I noticed that at some movies i got a little “hall effect” using the sox-method. If you got different settings, please let me know :-)
Visit my website for more than 25 different methods and dummy proof guides for making surround sound out of stereo. Some methods give results comparable with retail surround !
I just took a short look – Your website could need a lil remake and you’re just writing about some windows app there – So, how can i do this in Linux? :-)