mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-30 17:03:06 +01:00
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:
parent
39ebb427b3
commit
428aabdcfc
4 changed files with 13 additions and 13 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue