summaryrefslogtreecommitdiff
path: root/libs/panners
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2011-02-25 03:20:47 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2011-02-25 03:20:47 +0000
commit6dcb20af785df2dfeb0657b711266dbbaaa2dbbf (patch)
treeacf127c930708568d3424fe1327509adf6096f67 /libs/panners
parent36f9a82cefeba9c189b7e65d9dacc8cb5b7a3b5f (diff)
take reverse width into account when labelling signals in panner2d ; better way to draw the width arc
git-svn-id: svn://localhost/ardour2/branches/3.0@8956 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/panners')
-rw-r--r--libs/panners/vbap/vbap.cc24
1 files changed, 18 insertions, 6 deletions
diff --git a/libs/panners/vbap/vbap.cc b/libs/panners/vbap/vbap.cc
index eff8a5ee43..b053b670f9 100644
--- a/libs/panners/vbap/vbap.cc
+++ b/libs/panners/vbap/vbap.cc
@@ -99,7 +99,8 @@ VBAPanner::update ()
/* panner width control is [-1.0 .. 1.0]; we ignore sign, and map to [0 .. 360] degrees
so that a width of 1 corresponds to a signal equally present from all directions,
- and a width of zero corresponds to a point source from the "center" (above)
+ and a width of zero corresponds to a point source from the "center" (above) point
+ on the perimeter of the speaker array.
*/
double w = fabs (_pannable->pan_width_control->get_value()) * 360.0;
@@ -123,13 +124,24 @@ VBAPanner::update ()
double degree_step_per_signal = (max_dir - min_dir) / (_signals.size() - 1);
double signal_direction = min_dir;
- for (vector<Signal*>::iterator s = _signals.begin(); s != _signals.end(); ++s) {
+ if (w >= 0.0) {
+ for (vector<Signal*>::iterator s = _signals.begin(); s != _signals.end(); ++s) {
- Signal* signal = *s;
+ Signal* signal = *s;
+
+ signal->direction = AngularVector (signal_direction, 0.0);
+ compute_gains (signal->desired_gains, signal->desired_outputs, signal->direction.azi, signal->direction.ele);
+ signal_direction += degree_step_per_signal;
+ }
+ } else {
+ for (vector<Signal*>::reverse_iterator s = _signals.rbegin(); s != _signals.rend(); ++s) {
- signal->direction = AngularVector (signal_direction, 0.0);
- compute_gains (signal->desired_gains, signal->desired_outputs, signal->direction.azi, signal->direction.ele);
- signal_direction += degree_step_per_signal;
+ Signal* signal = *s;
+
+ signal->direction = AngularVector (signal_direction, 0.0);
+ compute_gains (signal->desired_gains, signal->desired_outputs, signal->direction.azi, signal->direction.ele);
+ signal_direction += degree_step_per_signal;
+ }
}
} else if (_signals.size() == 1) {