temporal: fix up creating/resetting tempo map state via XML
This commit is contained in:
parent
d1c695a1a6
commit
47aa232f60
@ -84,12 +84,16 @@ Point::time() const
|
|||||||
Tempo::Tempo (XMLNode const & node)
|
Tempo::Tempo (XMLNode const & node)
|
||||||
{
|
{
|
||||||
assert (node.name() == xml_node_name);
|
assert (node.name() == xml_node_name);
|
||||||
if (!node.get_property (X_("scpnt-start"), _superclocks_per_note_type)) {
|
|
||||||
throw failed_constructor ();
|
|
||||||
}
|
node.get_property (X_("npm"), _npm);
|
||||||
if (!node.get_property (X_("scpnt-end"), _end_superclocks_per_note_type)) {
|
node.get_property (X_("enpm"), _enpm);
|
||||||
throw failed_constructor ();
|
|
||||||
}
|
_superclocks_per_note_type = double_npm_to_scpn (_npm);
|
||||||
|
_end_superclocks_per_note_type = double_npm_to_scpn (_enpm);
|
||||||
|
_super_note_type_per_second = double_npm_to_snps (_npm);
|
||||||
|
_end_super_note_type_per_second = double_npm_to_snps (_enpm);
|
||||||
|
|
||||||
if (!node.get_property (X_("note-type"), _note_type)) {
|
if (!node.get_property (X_("note-type"), _note_type)) {
|
||||||
throw failed_constructor ();
|
throw failed_constructor ();
|
||||||
}
|
}
|
||||||
@ -99,6 +103,11 @@ Tempo::Tempo (XMLNode const & node)
|
|||||||
if (!node.get_property (X_("active"), _active)) {
|
if (!node.get_property (X_("active"), _active)) {
|
||||||
throw failed_constructor ();
|
throw failed_constructor ();
|
||||||
}
|
}
|
||||||
|
#warning NUTEMPO set these
|
||||||
|
// _locked_to_meter = ;
|
||||||
|
// _clamped = ;_
|
||||||
|
|
||||||
|
cerr << "Loaded Tempo from XML: " << *this << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -120,12 +129,16 @@ Tempo::get_state () const
|
|||||||
{
|
{
|
||||||
XMLNode* node = new XMLNode (xml_node_name);
|
XMLNode* node = new XMLNode (xml_node_name);
|
||||||
|
|
||||||
node->set_property (X_("scpnt-start"), superclocks_per_note_type());
|
node->set_property (X_("npm"), note_types_per_minute());
|
||||||
node->set_property (X_("scpnt-end"), end_superclocks_per_note_type());
|
node->set_property (X_("enpm"), end_note_types_per_minute());
|
||||||
node->set_property (X_("note-type"), note_type());
|
node->set_property (X_("note-type"), note_type());
|
||||||
node->set_property (X_("type"), type());
|
node->set_property (X_("type"), type());
|
||||||
node->set_property (X_("active"), active());
|
node->set_property (X_("active"), active());
|
||||||
|
|
||||||
|
#warning NUTEMPO get these
|
||||||
|
// _locked_to_meter = ;
|
||||||
|
// _clamped = ;_
|
||||||
|
|
||||||
return *node;
|
return *node;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,12 +149,24 @@ Tempo::set_state (XMLNode const & node, int /*version*/)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
node.get_property (X_("scpnt-start"), _superclocks_per_note_type);
|
node.get_property (X_("npm"), _npm);
|
||||||
node.get_property (X_("scpnt-end"), _end_superclocks_per_note_type);
|
node.get_property (X_("enpm"), _enpm);
|
||||||
|
|
||||||
|
_superclocks_per_note_type = double_npm_to_scpn (_npm);
|
||||||
|
_end_superclocks_per_note_type = double_npm_to_scpn (_enpm);
|
||||||
|
_super_note_type_per_second = double_npm_to_snps (_npm);
|
||||||
|
_end_super_note_type_per_second = double_npm_to_snps (_enpm);
|
||||||
|
|
||||||
node.get_property (X_("note-type"), _note_type);
|
node.get_property (X_("note-type"), _note_type);
|
||||||
node.get_property (X_("type"), _type);
|
node.get_property (X_("type"), _type);
|
||||||
node.get_property (X_("active"), _active);
|
node.get_property (X_("active"), _active);
|
||||||
|
|
||||||
|
#warning NUTEMPO set these
|
||||||
|
// _locked_to_meter = ;
|
||||||
|
// _clamped = ;_
|
||||||
|
|
||||||
|
cerr << "Loaded Tempo from XML: " << *this << endl;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1484,6 +1509,7 @@ TempoMap::dump (std::ostream& ostr) const
|
|||||||
void
|
void
|
||||||
TempoMap::dump_locked (std::ostream& ostr) const
|
TempoMap::dump_locked (std::ostream& ostr) const
|
||||||
{
|
{
|
||||||
|
ostr << "\n\nTEMPO MAP:\n";
|
||||||
for (Tempos::const_iterator t = _tempos.begin(); t != _tempos.end(); ++t) {
|
for (Tempos::const_iterator t = _tempos.begin(); t != _tempos.end(); ++t) {
|
||||||
ostr << &*t << ' ' << *t << endl;
|
ostr << &*t << ' ' << *t << endl;
|
||||||
}
|
}
|
||||||
@ -1491,6 +1517,11 @@ TempoMap::dump_locked (std::ostream& ostr) const
|
|||||||
for (Meters::const_iterator m = _meters.begin(); m != _meters.end(); ++m) {
|
for (Meters::const_iterator m = _meters.begin(); m != _meters.end(); ++m) {
|
||||||
ostr << &*m << ' ' << *m << endl;
|
ostr << &*m << ' ' << *m << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (MusicTimes::const_iterator m = _bartimes.begin(); m != _bartimes.end(); ++m) {
|
||||||
|
ostr << &*m << ' ' << *m << endl;
|
||||||
|
}
|
||||||
|
ostr << "------------\n\n\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1832,7 +1863,11 @@ std::operator<<(std::ostream& str, Meter const & m)
|
|||||||
std::ostream&
|
std::ostream&
|
||||||
std::operator<<(std::ostream& str, Tempo const & t)
|
std::operator<<(std::ostream& str, Tempo const & t)
|
||||||
{
|
{
|
||||||
return str << t.note_types_per_minute() << " 1/" << t.note_type() << " notes per minute [" << t.super_note_type_per_second() << " sntpm] (" << t.superclocks_per_note_type() << " sc-per-1/" << t.note_type() << ')';
|
if (t.ramped()) {
|
||||||
|
return str << t.note_types_per_minute() << " 1/" << t.note_type() << " RAMPED notes per minute [" << t.super_note_type_per_second() << " sntpm] (" << t.superclocks_per_note_type() << " sc-per-1/" << t.note_type() << ')';
|
||||||
|
} else {
|
||||||
|
return str << t.note_types_per_minute() << " 1/" << t.note_type() << " notes per minute [" << t.super_note_type_per_second() << " sntpm] (" << t.superclocks_per_note_type() << " sc-per-1/" << t.note_type() << ')';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream&
|
std::ostream&
|
||||||
@ -2134,16 +2169,27 @@ TempoMap::set_state (XMLNode const & node, int /*version*/)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
TempoMap::set_music_times_from_state (XMLNode const& tempos_node)
|
TempoMap::set_music_times_from_state (XMLNode const& mt_node)
|
||||||
{
|
{
|
||||||
|
XMLNodeList const & children (mt_node.children());
|
||||||
|
|
||||||
|
try {
|
||||||
|
_bartimes.clear ();
|
||||||
|
for (XMLNodeList::const_iterator c = children.begin(); c != children.end(); ++c) {
|
||||||
|
MusicTimePoint* mp = new MusicTimePoint (*this, **c);
|
||||||
|
_bartimes.push_back (*mp);
|
||||||
|
}
|
||||||
|
} catch (...) {
|
||||||
|
_bartimes.clear (); /* remove any that were created */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
TempoMap::set_tempos_from_state (XMLNode const& tempos_node)
|
TempoMap::set_tempos_from_state (XMLNode const& tempos_node)
|
||||||
{
|
{
|
||||||
/* CALLER MUST HOLD LOCK */
|
|
||||||
|
|
||||||
XMLNodeList const & children (tempos_node.children());
|
XMLNodeList const & children (tempos_node.children());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -2163,8 +2209,6 @@ TempoMap::set_tempos_from_state (XMLNode const& tempos_node)
|
|||||||
int
|
int
|
||||||
TempoMap::set_meters_from_state (XMLNode const& meters_node)
|
TempoMap::set_meters_from_state (XMLNode const& meters_node)
|
||||||
{
|
{
|
||||||
/* CALLER MUST HOLD LOCK */
|
|
||||||
|
|
||||||
XMLNodeList const & children (meters_node.children());
|
XMLNodeList const & children (meters_node.children());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
Loading…
Reference in New Issue
Block a user