libtemporal: MusicTimePoint now IS-A Point,Tempo and Meter, all at once
This commit is contained in:
parent
cc0d065443
commit
d6d0eb0d9e
|
@ -435,8 +435,8 @@ TempoPoint::get_state () const
|
||||||
}
|
}
|
||||||
|
|
||||||
TempoPoint::TempoPoint (TempoMap const & map, XMLNode const & node)
|
TempoPoint::TempoPoint (TempoMap const & map, XMLNode const & node)
|
||||||
: Tempo (node)
|
: Point (map, node)
|
||||||
, Point (map, node)
|
, Tempo (node)
|
||||||
, _omega (0)
|
, _omega (0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -527,8 +527,8 @@ TempoPoint::quarters_at_superclock (superclock_t sc) const
|
||||||
}
|
}
|
||||||
|
|
||||||
MeterPoint::MeterPoint (TempoMap const & map, XMLNode const & node)
|
MeterPoint::MeterPoint (TempoMap const & map, XMLNode const & node)
|
||||||
: Meter (node)
|
: Point (map, node)
|
||||||
, Point (map, node)
|
, Meter (node)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,6 +596,8 @@ TempoMetric::superclock_at (BBT_Time const & bbt) const
|
||||||
|
|
||||||
MusicTimePoint::MusicTimePoint (TempoMap const & map, XMLNode const & node)
|
MusicTimePoint::MusicTimePoint (TempoMap const & map, XMLNode const & node)
|
||||||
: Point (map, node)
|
: Point (map, node)
|
||||||
|
, TempoPoint (map, node)
|
||||||
|
, MeterPoint (map, node)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -626,7 +628,7 @@ TempoMap::TempoMap (Tempo const & initial_tempo, Meter const & initial_meter)
|
||||||
{
|
{
|
||||||
TempoPoint* tp = new TempoPoint (*this, initial_tempo, 0, Beats(), BBT_Time());
|
TempoPoint* tp = new TempoPoint (*this, initial_tempo, 0, Beats(), BBT_Time());
|
||||||
MeterPoint* mp = new MeterPoint (*this, initial_meter, 0, Beats(), BBT_Time());
|
MeterPoint* mp = new MeterPoint (*this, initial_meter, 0, Beats(), BBT_Time());
|
||||||
MusicTimePoint* mtp = new MusicTimePoint (*this, 0, Beats(), BBT_Time());
|
MusicTimePoint* mtp = new MusicTimePoint (*this, 0, Beats(), BBT_Time(), *tp, *mp);
|
||||||
|
|
||||||
_tempos.push_back (*tp);
|
_tempos.push_back (*tp);
|
||||||
_meters.push_back (*mp);
|
_meters.push_back (*mp);
|
||||||
|
@ -887,7 +889,7 @@ TempoMap::set_bartime (BBT_Time const & bbt, timepos_t const & pos)
|
||||||
|
|
||||||
superclock_t sc (pos.superclocks());
|
superclock_t sc (pos.superclocks());
|
||||||
TempoMetric metric (metric_at (sc));
|
TempoMetric metric (metric_at (sc));
|
||||||
MusicTimePoint* tp = new MusicTimePoint (bbt, Point (*this, sc, metric.quarters_at_superclock (sc), bbt));
|
MusicTimePoint* tp = new MusicTimePoint (*this, sc, metric.quarters_at_superclock (sc), bbt, metric.tempo(), metric.meter());
|
||||||
|
|
||||||
ret = add_or_replace_bartime (*tp);
|
ret = add_or_replace_bartime (*tp);
|
||||||
|
|
||||||
|
@ -2014,6 +2016,16 @@ std::operator<<(std::ostream& str, TempoPoint const & t)
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::ostream&
|
||||||
|
std::operator<<(std::ostream& str, MusicTimePoint const & p)
|
||||||
|
{
|
||||||
|
str << "MP@";
|
||||||
|
str << *((Point*) &p);
|
||||||
|
str << *((Tempo*) &p);
|
||||||
|
str << *((Meter*) &p);
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
std::ostream&
|
std::ostream&
|
||||||
std::operator<<(std::ostream& str, TempoMetric const & tm)
|
std::operator<<(std::ostream& str, TempoMetric const & tm)
|
||||||
{
|
{
|
||||||
|
@ -2516,7 +2528,7 @@ TempoMap::insert_time (timepos_t const & pos, timecnt_t const & duration)
|
||||||
|
|
||||||
TempoPoint current_tempo = *t;
|
TempoPoint current_tempo = *t;
|
||||||
MeterPoint current_meter = *m;
|
MeterPoint current_meter = *m;
|
||||||
MusicTimePoint current_time_point (*this, 0, Beats(), BBT_Time());
|
MusicTimePoint current_time_point (*this, 0, Beats(), BBT_Time(), current_tempo, current_meter);
|
||||||
|
|
||||||
if (_bartimes.size() > 0) {
|
if (_bartimes.size() > 0) {
|
||||||
current_time_point = *b;
|
current_time_point = *b;
|
||||||
|
|
|
@ -516,11 +516,11 @@ class LIBTEMPORAL_API TempoMetric {
|
||||||
* position is given by a Point that might use superclock or Beats, and the
|
* position is given by a Point that might use superclock or Beats, and the
|
||||||
* Point's BBT time member is overwritten.
|
* Point's BBT time member is overwritten.
|
||||||
*/
|
*/
|
||||||
class LIBTEMPORAL_API MusicTimePoint : public virtual Point
|
class LIBTEMPORAL_API MusicTimePoint : public virtual TempoPoint, public virtual MeterPoint
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
MusicTimePoint (TempoMap const & map, superclock_t sc, Beats const & b, BBT_Time const & bbt) : Point (map, sc, b, bbt) {}
|
MusicTimePoint (TempoMap const & map, superclock_t sc, Beats const & b, BBT_Time const & bbt, Tempo const & t, Meter const & m) : Point (map, sc, b, bbt), TempoPoint (t, *this), MeterPoint (m, *this) {}
|
||||||
MusicTimePoint (BBT_Time const & bbt_time, Point const & p) : Point (p) { _bbt = bbt_time; }
|
// MusicTimePoint (BBT_Time const & bbt_time, Point const & p) : Point (p), TempoPoint (p.map().tempo_at (p.sclock()), p), MeterPoint (p.map().meter_at (p.sclock()), p) { _bbt = bbt_time; }
|
||||||
MusicTimePoint (TempoMap const & map, XMLNode const &);
|
MusicTimePoint (TempoMap const & map, XMLNode const &);
|
||||||
|
|
||||||
boost::intrusive::list_member_hook<> _bartime_hook;
|
boost::intrusive::list_member_hook<> _bartime_hook;
|
||||||
|
@ -867,6 +867,7 @@ std::ostream& operator<<(std::ostream& str, Temporal::Meter const &);
|
||||||
std::ostream& operator<<(std::ostream& str, Temporal::Point const &);
|
std::ostream& operator<<(std::ostream& str, Temporal::Point const &);
|
||||||
std::ostream& operator<<(std::ostream& str, Temporal::TempoPoint const &);
|
std::ostream& operator<<(std::ostream& str, Temporal::TempoPoint const &);
|
||||||
std::ostream& operator<<(std::ostream& str, Temporal::MeterPoint const &);
|
std::ostream& operator<<(std::ostream& str, Temporal::MeterPoint const &);
|
||||||
|
std::ostream& operator<<(std::ostream& str, Temporal::MusicTimePoint const &);
|
||||||
std::ostream& operator<<(std::ostream& str, Temporal::TempoMetric const &);
|
std::ostream& operator<<(std::ostream& str, Temporal::TempoMetric const &);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user