patch for CUE file formatting from Andreas Ruge
[ardour.git] / libs / panners / vbap / vbap_speakers.cc
index 7e70e5df66b6d3d8fb7f0c35849d3c74b428208d..b84698bbd9420e11c4805e6a61ad0b046287e518 100644 (file)
@@ -43,23 +43,14 @@ using namespace ARDOUR;
 using namespace PBD;
 using namespace std;
 
-VBAPSpeakers* VBAPSpeakers::_instance = 0;
+const double VBAPSpeakers::MIN_VOL_P_SIDE_LGTH = 0.01;
 
-VBAPSpeakers& 
-VBAPSpeakers::instance (Speakers& s)
-{
-       if (_instance == 0) {
-               _instance = new VBAPSpeakers (s);
-       }
-
-       return *_instance;
-}
-
-VBAPSpeakers::VBAPSpeakers (Speakers& s)
+VBAPSpeakers::VBAPSpeakers (boost::shared_ptr<Speakers> s)
        : _dimension (2)
-       , _speakers (s.speakers())
+        , _parent (s)
 {
-       s.Changed.connect_same_thread (speaker_connection, boost::bind (&VBAPSpeakers::update, this));
+       _parent->Changed.connect_same_thread (speaker_connection, boost::bind (&VBAPSpeakers::update, this));
+        update ();
 }
 
 VBAPSpeakers::~VBAPSpeakers ()
@@ -70,10 +61,11 @@ void
 VBAPSpeakers::update ()
 {
        int dim = 2;
-        
+
+        _speakers = _parent->speakers();
+
        for (vector<Speaker>::const_iterator i = _speakers.begin(); i != _speakers.end(); ++i) {
                if ((*i).angles().ele != 0.0) {
-                       cerr << "\n\n\nSPEAKER " << (*i).id << " has ele = " << (*i).angles().ele << "\n\n\n\n";
                        dim = 3;
                        break;
                }
@@ -81,8 +73,6 @@ VBAPSpeakers::update ()
 
        _dimension = dim;
 
-       cerr << "update with dimension = " << dim << " speakers = " << _speakers.size() << endl;
-
        if (_speakers.size() < 2) {
                /* nothing to be done with less than two speakers */
                return;
@@ -523,7 +513,6 @@ VBAPSpeakers::choose_speaker_pairs (){
        int pair;
        int speaker;
 
-       cerr << "CHOOSE PAIRS\n";
 
        if (n_speakers == 0) {
                return;
@@ -539,14 +528,6 @@ VBAPSpeakers::choose_speaker_pairs (){
        /* adjacent loudspeakers are the loudspeaker pairs to be used.*/
        for (speaker = 0; speaker < n_speakers-1; speaker++) {
 
-               cerr << "Looking at " 
-                    << _speakers[sorted_speakers[speaker]].id << " @ " << _speakers[sorted_speakers[speaker]].angles().azi  
-                    << " and "
-                    << _speakers[sorted_speakers[speaker+1]].id << " @ " << _speakers[sorted_speakers[speaker+1]].angles().azi  
-                    << " delta = " 
-                    << _speakers[sorted_speakers[speaker+1]].angles().azi - _speakers[sorted_speakers[speaker]].angles().azi
-                    << endl;
-
                if ((_speakers[sorted_speakers[speaker+1]].angles().azi - 
                     _speakers[sorted_speakers[speaker]].angles().azi) <= AZIMUTH_DELTA_THRESHOLD_DEGREES) {
                        if (calc_2D_inv_tmatrix( _speakers[sorted_speakers[speaker]].angles().azi, 
@@ -588,8 +569,6 @@ VBAPSpeakers::choose_speaker_pairs (){
                        _speaker_tuples[pair][0] = sorted_speakers[speaker];
                        _speaker_tuples[pair][1] = sorted_speakers[speaker+1];
 
-                       cerr << "PAIR[" << pair << "] = " << sorted_speakers[speaker] << " + " << sorted_speakers[speaker+1] << endl;
-
                        pair++;
                }
        }
@@ -602,9 +581,6 @@ VBAPSpeakers::choose_speaker_pairs (){
 
                _speaker_tuples[pair][0] = sorted_speakers[n_speakers-1];
                _speaker_tuples[pair][1] = sorted_speakers[0];
-
-               cerr << "PAIR[" << pair << "] = " << sorted_speakers[n_speakers-1] << " + " << sorted_speakers[0] << endl;
-
        }
 }
 
@@ -620,7 +596,6 @@ VBAPSpeakers::sort_2D_lss (int* sorted_speakers)
 
        for (n = 0, s = tmp.begin(); s != tmp.end(); ++s, ++n) {
                sorted_speakers[n] = (*s).id;
-               cerr << "Sorted[" << n << "] = " << (*s).id << endl;
        }
 }
 
@@ -630,10 +605,10 @@ VBAPSpeakers::calc_2D_inv_tmatrix (double azi1, double azi2, double* inverse_mat
        double x1,x2,x3,x4;
        double det;
 
-       x1 = cos (azi1);
-       x2 = sin (azi1);
-       x3 = cos (azi2);
-       x4 = sin (azi2);
+       x1 = cos (azi1 * (M_PI/180.0));
+        x2 = sin (azi1 * (M_PI/180.0));
+       x3 = cos (azi2 * (M_PI/180.0));
+       x4 = sin (azi2 * (M_PI/180.0));
        det = (x1 * x4) - ( x3 * x2 );
 
        if (fabs(det) <= 0.001) {