diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2011-02-25 03:20:47 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2011-02-25 03:20:47 +0000 |
commit | 6dcb20af785df2dfeb0657b711266dbbaaa2dbbf (patch) | |
tree | acf127c930708568d3424fe1327509adf6096f67 /libs/panners | |
parent | 36f9a82cefeba9c189b7e65d9dacc8cb5b7a3b5f (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.cc | 24 |
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) { |