I have an unusual idea to manipulate the stereo soundstage width of selected audio tracks in “asymmetrical” way → I would like to extend the left side of the soundstage more strongly then the right one. To give you a better impression why do I need it, I have prepared a picture (see attached picture).
I am sitting in the car on the driver seat (on the left side), but the center of the soundstage is either located in the center of the dashboard (see attached picture Var.C → left and right half of the soundstage is distributed symmetrically), or it is panned left above the steering wheel (Var.B → left part of the soundstage is squeezed and the right side is stretched).
I prefer the second option (Var.B) and try to compensate the squeezing on the left side through asymmetrical widening of the soundstage → extending the left side (as showed on the picture).
I am a absolute beginner in Audacity, but I found already something, what in my opinion, could be used as a base/starting point for my desire.
I found the following Nyquest plug-in „Stereo Widener“ from David R.Sky
It offers three parameters, which control the widening of the soundstage:
- Inverted signal volume: [-48 dB - -6 dB, default -18 dB]
- Pan position: [0 (center) to -100 (opposite channel), default 0]
- Time offset: [0 - 20 ms, default 0] - applying an offset can enhance the illusion.
My idea is:
A) (the optimum solution) request the parameter 1. and 2. individually fort he left and right chanel, and process them individually according to the specified parameters
B) (medium solution) request an additional parameter 4. “Asymmetry factor” (e.g. from -5=L to +5=R), which will be considered during the processing of the plug-in
C) (simplified solution) implement an fixed „Asymmetry factor” directly in the plugin code (I would try to get the right value through testing)
Unfortunately I am not a programmer and I am not able to modify David’s code myself, but I have a “suspicion” that it must be done somewhere in the Stereo-Butterfly-Function section of the code or few rows further.
here is the code:
;name “Stereo Widener…”
;action “Widening stereo audio…”
;info “by David R. Sky\nReleased under terms of GNU Public License\n-Pan: -100=opposite channel, 0=center”
;control vol “Inverted signal volume - db” int “” -18 -48 -6
;control p “Pan position” int “” 0 -100 0
;control offset “Time offset - ms” int “” 0 0 20
#| Stereo Widener by David R. Sky, October 18, 2004
Updated March 19, 2006
Thanks to David Walsh and Monty of the Audacity-users list
for discussion and explanation of how to widen stereo.
Should work properly for both North American and European
N American uses . for decimal
European uses , for decimal
so calculations are done using floating whole numbers
(see two setf statements)
A stereo widener creates the illusion that your speakers are
further apart than they really are. Stereo widening results depend
on distance of your speakers from each other, the plug-in settings,
and your location in relation to the speakers.
This stereo widener works by inverting both left and right channels
of stereo audio to some degree, then panning those inverted signals
somewhere between the center pan position and the opposite channel.
A time offset of up to 20ms can be applied to enhance the illusion.
Inverted signal volume
From -48db (minimum volume) to -6db (maximum volume), default
From 0 (center) to -100 (opposite channel), default 0.
From 0 to 20ms, default 0ms.
; Stereo Butterfly function - used to
; change the width of the stereo field.
(defun butterfly (sound width)
(sum (mult (aref sound 0) (sum width 1) 0.5)
(mult (aref sound 1) (sum width -1) -0.5))
(sum (mult (aref sound 1) (sum width 1) 0.5)
(mult (aref sound 0) (sum width -1) -0.5))))
; convert arguments to floating values
(setf offset (/ (float offset) (float 1000)))
(setf p (/ (float p) (float 100)))
; applying stereo widener
(if (arrayp s)
(sim (cue s)
(cue (butterfly (mult -1 (db-to-linear vol) s) p))))
(format nil “You must apply the stereo widener to stereo audio.”)
Is anybody of you willing to support my crazy idea and to adopt the code to the specified needs?
BTW: any better solution or suggestion are welcome
Thanks in advance