fix BeatFramesConverter so that it at least works even if its not optimally named/designed

git-svn-id: svn://localhost/ardour2/branches/3.0@8290 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2010-12-17 01:51:12 +00:00
parent 39ebb427b3
commit 428aabdcfc
4 changed files with 13 additions and 13 deletions

View file

@ -29,18 +29,19 @@ namespace ARDOUR {
class TempoMap;
/** Converter between beats and frames. Takes `distances' in beats or frames
/** Converter between beats and frames. Takes durations in beats or frames
* and converts them using the tempo at the \a origin supplied to the constructor.
* Note that this does not covert positions, only durations.
*/
class BeatsFramesConverter : public Evoral::TimeConverter<double,framepos_t> {
public:
BeatsFramesConverter(const TempoMap& tempo_map, framepos_t origin)
: Evoral::TimeConverter<double, framepos_t> (origin)
, _tempo_map(tempo_map)
{}
BeatsFramesConverter (const TempoMap& tempo_map, framepos_t origin)
: Evoral::TimeConverter<double, framepos_t> (origin)
, _tempo_map(tempo_map)
{}
framepos_t to(double beats) const;
double from(framepos_t frames) const;
framepos_t to (double beats) const;
double from (framepos_t frames) const;
private:
const TempoMap& _tempo_map;

View file

@ -25,9 +25,9 @@
namespace ARDOUR {
framecnt_t
BeatsFramesConverter::to(double beats) const
BeatsFramesConverter::to (double beats) const
{
return _tempo_map.framepos_plus_bbt (_origin_b, Timecode::BBT_Time(beats));
return _tempo_map.framepos_plus_bbt (_origin_b, Timecode::BBT_Time(beats)) - _origin_b;
}
double

View file

@ -134,7 +134,7 @@ void
MidiRegion::update_length_beats ()
{
cerr << name() << " Updating length beats, currently = " << _length_beats << " w/length = " << _length << endl;
BeatsFramesConverter converter (_session.tempo_map(), _position - _start);
BeatsFramesConverter converter (_session.tempo_map(), _position);
_length_beats = converter.from (_length);
cerr << "\tnew value: " << _length_beats << endl;
}
@ -151,7 +151,6 @@ MidiRegion::set_position_internal (framepos_t pos, bool allow_bbt_recompute)
at the new position (tempo map may dictate a different number of frames
*/
BeatsFramesConverter converter (_session.tempo_map(), _position - _start);
cerr << name() << " change frame length to " << converter.to (_length_beats) << endl;
Region::set_length_internal (converter.to (_length_beats));
}
}

View file

@ -2067,7 +2067,7 @@ TempoMap::framewalk_to_beats (framepos_t pos, framecnt_t distance) const
*/
if (ddist < frames_per_beat) {
beats += BBT_Time::ticks_per_beat * (ddist/frames_per_beat);
beats += (1.0/BBT_Time::ticks_per_beat) * (ddist/frames_per_beat);
break;
}
@ -2076,7 +2076,7 @@ TempoMap::framewalk_to_beats (framepos_t pos, framecnt_t distance) const
ddist -= frames_per_beat;
dpos += frames_per_beat;
beats += 1.0;
/* check if we need to use a new metric section: has adding frames moved us
to or after the start of the next metric section? in which case, use it.
*/