X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fspeakers.cc;h=1d0bfad77807043f8cffd8f3c93e2d088a0352a9;hb=d1382a20ac73a9dbeea97f97760f3bc82333ddc5;hp=2acc9659ef3bc6aa3e683897c79456de78f883f4;hpb=7ac05ccfa562b4732070864360fab19da26854d7;p=ardour.git diff --git a/libs/ardour/speakers.cc b/libs/ardour/speakers.cc index 2acc9659ef..1d0bfad778 100644 --- a/libs/ardour/speakers.cc +++ b/libs/ardour/speakers.cc @@ -17,13 +17,12 @@ */ #include "pbd/error.h" -#include "pbd/convert.h" #include "pbd/locale_guard.h" #include "ardour/speaker.h" #include "ardour/speakers.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace ARDOUR; using namespace PBD; @@ -149,7 +148,7 @@ Speakers::move_speaker (int id, const AngularVector& new_position) void Speakers::setup_default_speakers (uint32_t n) { - double o = 90.0; + double o = 180.0; /* default assignment of speaker position for n speakers */ @@ -229,12 +228,12 @@ Speakers::setup_default_speakers (uint32_t n) */ if (n % 2) { - deg = 90.0 - degree_step; + deg = 360 + o + degree_step; } else { - deg = 90.0; + deg = 360 + o; } - for (i = 0; i < n; ++i, deg += degree_step) { - add_speaker (AngularVector (deg, 0.0)); + for (i = 0; i < n; ++i, deg -= degree_step) { + add_speaker (AngularVector (fmod(deg, 360), 0.0)); } } } @@ -244,18 +243,14 @@ XMLNode& Speakers::get_state () { XMLNode* node = new XMLNode (X_("Speakers")); - char buf[32]; - LocaleGuard lg (X_("POSIX")); + LocaleGuard lg; for (vector::const_iterator i = _speakers.begin(); i != _speakers.end(); ++i) { XMLNode* speaker = new XMLNode (X_("Speaker")); - snprintf (buf, sizeof (buf), "%.12g", (*i).angles().azi); - speaker->add_property (X_("azimuth"), buf); - snprintf (buf, sizeof (buf), "%.12g", (*i).angles().ele); - speaker->add_property (X_("elevation"), buf); - snprintf (buf, sizeof (buf), "%.12g", (*i).angles().length); - speaker->add_property (X_("distance"), buf); + speaker->set_property (X_("azimuth"), (*i).angles().azi); + speaker->set_property (X_("elevation"), (*i).angles().ele); + speaker->set_property (X_("distance"), (*i).angles().length); node->add_child_nocopy (*speaker); } @@ -267,32 +262,19 @@ int Speakers::set_state (const XMLNode& node, int /*version*/) { XMLNodeConstIterator i; - const XMLProperty* prop; - double a, e, d; - LocaleGuard lg (X_("POSIX")); - int n = 0; + LocaleGuard lg; _speakers.clear (); - for (i = node.children().begin(); i != node.children().end(); ++i, ++n) { + for (i = node.children().begin(); i != node.children().end(); ++i) { if ((*i)->name() == X_("Speaker")) { - if ((prop = (*i)->property (X_("azimuth"))) == 0) { - warning << _("Speaker information is missing azimuth - speaker ignored") << endmsg; + double a, e, d; + if (!(*i)->get_property (X_("azimuth"), a) || + !(*i)->get_property (X_("elevation"), e) || + !(*i)->get_property (X_("distance"), d)) { + warning << _("Speaker information is missing - speaker ignored") << endmsg; continue; } - a = atof (prop->value()); - - if ((prop = (*i)->property (X_("elevation"))) == 0) { - warning << _("Speaker information is missing elevation - speaker ignored") << endmsg; - continue; - } - e = atof (prop->value()); - - if ((prop = (*i)->property (X_("distance"))) == 0) { - warning << _("Speaker information is missing distance - speaker ignored") << endmsg; - continue; - } - d = atof (prop->value()); add_speaker (AngularVector (a, e, d)); }