Thread: [Alsa-user] Surround Downmix?
Brought to you by:
perex
From: Prakash K. C. <pra...@gm...> - 2004-06-24 08:23:24
|
Hi, I am trying to get a Surround Downmix (ie matrixed) done by Alsa in realtime. I found a setting in alsamixer, but it didn't seem to have an effect. So I tried it on my own using the .asoundrc. I tried this: pcm.downmix4 { type route slave.pcm "front" slave.channels 2 ttable.0.0 0.49 ttable.1.1 0.49 ttable.2.0 -0.24 ttable.2.1 0.24 ttable.3.0 -0.24 ttable.3.1 0.24 } (I patched pcm_route.c at line 800 to allow negative values.) This *basically* worked with ut2004 and openal set to 4 channels. but the problem is that the rear channels are not phase shifted thus eliminating/amplifying the L and R channel. (In my case left output channel is very lod and center, left and rear are very low using a Dolby Pro-Logic decoder. Using sounds alone on the input rear, center, left, reight channels, the decoded channels sound good.) So what I need is a 90° phase shifter for the rear channel. I one available in alsa or how can I integrate one? Or does alsa support this type of downmix natively? Cheers, Prakash |
From: Stefan B. <lu...@gm...> - 2004-06-28 17:20:24
|
Am Donnerstag, 24. Juni 2004 10:23 schrieb Prakash K. Cheemplavam: > Hi, > > I am trying to get a Surround Downmix (ie matrixed) done by Alsa in > realtime. I found a setting in alsamixer, but it didn't seem to have an > effect. > > So I tried it on my own using the .asoundrc. > > I tried this: > > pcm.downmix4 { > type route > slave.pcm "front" > slave.channels 2 > ttable.0.0 0.49 > ttable.1.1 0.49 > ttable.2.0 -0.24 > ttable.2.1 0.24 > ttable.3.0 -0.24 > ttable.3.1 0.24 > } > > (I patched pcm_route.c at line 800 to allow negative values.) > > This *basically* worked with ut2004 and openal set to 4 channels. but > the problem is that the rear channels are not phase shifted thus > eliminating/amplifying the L and R channel. (In my case left output > channel is very lod and center, left and rear are very low using a Dolby > Pro-Logic decoder. Using sounds alone on the input rear, center, left, > reight channels, the decoded channels sound good.) > > So what I need is a 90=B0 phase shifter for the rear channel. I one > available in alsa or how can I integrate one? Or does alsa support this > type of downmix natively? Normally, for L-R-C-S Surround, (Dolby Surround Setup) you will send L -> L R -> R C*0.707 -> L=20 C*0.707 -> R S*0.707*e^-jpi/2 -> L S*0.707*e^+jpi/2 -> R e^(+/-)jpi/2 is 90=B0 Phase Shift The trick is to do the following: Do an additional 90=B0 Phase Shift to the= =20 Surround channel. As the human ear is agnostic to Signal Phase, you wont=20 notice that, but the equation becomes much simpler: S*0.707*(+1) -> L S*0.707*(-1) -> R The normal Setup with 4 discrete channels is L-R-SL-SR So you have no Center, and the two Surrounds get mixed together. (SL*0.5+SR*0.5)*0.707*(+1) -> L (SL*0.5+SR*0.5)*0.707*(-1) -> R I dont know if it is needed, but you can create the center from the L and R= =20 Channel (L+R)*0.5 -> C Summing this together, we get L =3D 1*L + 0.5*0.707*(L+R) + 0.707*0.5*(SL+SR)=20 R =3D 1*R + 0.5*0.707*(L+R) - 0.707*0.5*(SL+SR)=20 As the sums of the weights are bigger than one, divide it. (1+0.5*0.707)/2.414 =3D 0.55 (0.5*0.707)/2.414 =3D 0.15 In alsa terms this is: ttable.0.0 0.55 ttable.1.0 0.15 ttable.1.1 0.55 ttable.0.1 0.15 ttable.2.0 0.15 ttable.2.1 -0.15 ttable.3.0 0.15 ttable.3.1 -0.15 I haven't tried this setup, but it should work(TM). And remember, mixing 4 channel to 2 is always lossy, try sending some white= =20 noise to the front channels, to the rear channels, one at a time. Don't use= =20 sinus signals of the same frequency! If you are sending signals to more tha= n=20 one speaker at a time, especially some artificial signals (white noise is=20 good, as long as it comes from different sources), this may cause unwanted= =20 effects.=20 Stefan =2D-=20 Stefan Br=FCns / Kastanienweg 6 - Zimmer 1206 / 52074 Aachen mailto:lu...@gm... http://www.kawo1.rwth-aachen.de/~lurchi/ phone: +49 241 169-4206 mobile: +49 160 3797725 |
From: Prakash K. C. <pra...@gm...> - 2004-06-28 17:31:58
|
Stefan Bruens wrote: > Am Donnerstag, 24. Juni 2004 10:23 schrieb Prakash K. Cheemplavam: > >>Hi, >> >>I am trying to get a Surround Downmix (ie matrixed) done by Alsa in >>realtime. I found a setting in alsamixer, but it didn't seem to have an >>effect. > I haven't tried this setup, but it should work(TM). Dear Stefan, I know the correct coefficents you worte down and everything else what you told, but you are forgetting the reason for the 90° filter: Think of the situation when all channels have identical signals. Now think of it what happens in the downmix... That situation gives me the need for the 90° filter. I tried with ut2004, which seem to give music and some other signals to nearly all channels and the "hack" (basically what you described as well) *doesn't* work. Well, I will try again using your coefficents, but I don't think it will work, because of apparent reasons. Thanx anyway, Prakash |
From: Marcin <mar...@se...> - 2004-06-28 19:35:07
|
On Monday 28 of June 2004 19:31, Prakash K. Cheemplavam wrote: > Dear Stefan, I know the correct coefficents you worte down and > everything else what you told, but you are forgetting the reason for the > 90=B0 filter: try these plugins http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html there's one that does hilbert transform and it said there something about 9= 0=B0=20 phase shift. I think there are also others that seem to do the conversions= =20 you want. hope this helps Martin P.S .If you get all this working could you send me your asound.conf because= I=20 find it interesting what you are doing > ------------------------------------------------------- > This SF.Net email sponsored by Black Hat Briefings & Training. > Attend Black Hat Briefings & Training, Las Vegas July 24-29 - > digital self defense, top technical experts, no vendor pitches, > unmatched networking opportunities. Visit www.blackhat.com > _______________________________________________ > Alsa-user mailing list > Als...@li... > https://lists.sourceforge.net/lists/listinfo/alsa-user |
From: Prakash K. C. <pra...@gm...> - 2004-06-29 09:55:16
|
Marcin Kałuża wrote: > On Monday 28 of June 2004 19:31, Prakash K. Cheemplavam wrote: > >>Dear Stefan, I know the correct coefficents you worte down and >>everything else what you told, but you are forgetting the reason for the >>90° filter: > > try these plugins > http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html > there's one that does hilbert transform and it said there something about 90° > phase shift. I think there are also others that seem to do the conversions Hmm, I think the so called matrix encoder is useless. As far as I can see, it just mixes the channels together, no other process is done. So gotta take a look at the Hilbirt thingie... Prakash |
From: Prakash K. C. <pra...@gm...> - 2004-06-29 19:38:13
Attachments:
ladspasurround.tbz2
|
So, here is a bit of work I did with Steve's (Thx man!) ladspa plugins. I merged the hilbert filter, giving a nice 90° phase shift into the surround matrixer. you'll find following versions in the archive: surround_encoder_1401.xml original one, just with 90° merged (channel ordering: L,R,C,S) For the following this applies: I took out the lowpass (+delay) filter, as this isn't needed anymore for modern decoders. I sounded awful on my amp. W/o it is much much clearer. surround_encoder_LCRS.xml +reordered channels to L,C,R,S surround_encoder_51old.xml + for 5.1 input (L,C,R,SL,SR,LFE) surround_encoder_51new.xml as above, but using a modified downmix matrix to take advantage of Dolby ProLogic II and Logic 7 (found in Harman & Kardon receivers, claimed to be slightly superiour to DPL2; Dolby just has better marketing ;-) receivers: rears have seperation. This should be downward compatible with DPL (as I can confirm) Warning: If you intend to use this with DVD content, you need to deactivate the 90° phase filter in above two filter. (Compare original and LCRS filter and you'll know how to do it.) Properly mastered DVDs already have 90° phase shifted surrounds. I think an option should be included...I just haven't had enough time to understand the interface. :-) surround_encoder_quadold.xml for "traditional gaming" surround input: L,R,SL,SR surround_encoder_quadnew.xml dito, for DPL2/Logic7 I haven't tried this yet with alsa, just with ecasound and it works so far. Don't ask me how to compile above plugins. I just misused the gentoo ebuild... but I guess at http://plugins.org.uk you'll find instructions. Another Warning: All XMLs contain the same ID and same name, so change it if you want to use it at the same sime. I guess Steve will clean this out, if he merges these plugins to his collection. Enjoy! Prakash |
From: Prakash K. C. <pra...@gm...> - 2004-06-29 20:43:25
|
Prakash K. Cheemplavam wrote: > So, > > here is a bit of work I did with Steve's (Thx man!) ladspa plugins. I > merged the hilbert filter, giving a nice 90° phase shift into the > surround matrixer. Now I tried to set up .asoundrc, but I have not been able to: pcm.ladspa4 { type ladspa slave.pcm "plughw:0,0"; path "/usr/lib/ladspa"; plugins [ { label surroundEncoder } ] } Then trying: aplay -Dplug:ladspa4 AC3.wav Playing WAVE 'AC3.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Channels 6 Speicherzugriffsfehler I get a segfault. I assume I must tell alsa, that I have only 2 output channels left in the plugin? If yes, how to o it? (The alsa plugin page is too cryptic for me...) If no, any other idea? Prakash |
From: Prakash K. C. <pra...@gm...> - 2004-06-30 13:34:39
|
Prakash K. Cheemplavam wrote: > Prakash K. Cheemplavam wrote: > >> So, >> >> here is a bit of work I did with Steve's (Thx man!) ladspa plugins. I >> merged the hilbert filter, giving a nice 90° phase shift into the >> surround matrixer. > > > Now I tried to set up .asoundrc, but I have not been able to: > > pcm.ladspa4 { > type ladspa > slave.pcm "plughw:0,0"; > path "/usr/lib/ladspa"; > plugins [ > { > label surroundEncoder > } > ] > } > > Then trying: > > aplay -Dplug:ladspa4 AC3.wav > Playing WAVE 'AC3.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, > Channels 6 > Speicherzugriffsfehler > > I get a segfault. I assume I must tell alsa, that I have only 2 output > channels left in the plugin? If yes, how to o it? (The alsa plugin page > is too cryptic for me...) If no, any other idea? I did some further investigation and it seems to me that alsa can't handle plugins having more than one input and output, at elast I couldn't get it to work. Is this true? Or am I missing something? This is such a pity. :-( Prakash |
From: Prakash K. C. <pra...@gm...> - 2004-07-03 23:15:33
|
[alsa crapping on the ladspa plugin] So I began to put the stuff straight into OpenAl. I finally succeeded in getting proper surround sound from my Pro-Logic decoder. As I suspected, the 90° filter was critical. With it, sound is just nice. Currently it is just in experimental state. I need to talk to the open-al devs to get it into proper form. So while I am at it, I am also going to implement 5.0, 6.0 and perhaps 7.0 mode in openal. If somebody got hardware (and speakers) for this, contact me, as I need testers. Currently openal just supports quad (2/2) or stereo/mono. If somebody wants to try this out, just pass me an email. @alsa devs: PLEASE fix your ladspa plugin (or write proper docs...). Should I open a bug report for this? bye, Prakash |
From: Prakash K. C. <pra...@gm...> - 2004-06-28 22:11:32
|
Marcin Kałuża wrote: > On Monday 28 of June 2004 19:31, Prakash K. Cheemplavam wrote: > >>Dear Stefan, I know the correct coefficents you worte down and >>everything else what you told, but you are forgetting the reason for the >>90° filter: > > try these plugins > http://plugin.org.uk/ladspa-swh/docs/ladspa-swh.html Arrgh, I am blind. Look at plugin 2.94.... Will try this tomorrow... Prakash |