X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Fbeats_frames_converter.cc;h=f35e2c757ae2a82aed10fdf3a95da41d4c92d5c2;hb=b23d7d9170a12cbcd788e1c2cbcf688f376752ed;hp=f5d1794abb07c00bbaac4aca73a6512b23b88e86;hpb=e02e25e3f31bafbdbb12cb76dcde4b34917a939d;p=ardour.git diff --git a/libs/ardour/beats_frames_converter.cc b/libs/ardour/beats_frames_converter.cc index f5d1794abb..f35e2c757a 100644 --- a/libs/ardour/beats_frames_converter.cc +++ b/libs/ardour/beats_frames_converter.cc @@ -19,23 +19,55 @@ $Id: midiregion.h 733 2006-08-01 17:19:38Z drobilla $ */ +#include "pbd/stacktrace.h" + #include "ardour/beats_frames_converter.h" #include "ardour/tempo.h" namespace ARDOUR { -framecnt_t -BeatsFramesConverter::to (double beats) const +/** Takes a positive duration in quarter-note beats and considers it as a distance from the origin + * supplied to the constructor. Returns the equivalent number of frames, + * taking tempo changes into account. + */ +framepos_t +BeatsFramesConverter::to (Evoral::Beats beats) const +{ + if (beats < Evoral::Beats()) { + std::cerr << "negative beats passed to BFC: " << beats << std::endl; + PBD::stacktrace (std::cerr, 30); + return 0; + } + return _tempo_map.framepos_plus_qn (_origin_b, beats) - _origin_b; +} + +/** Takes a duration in frames and considers it as a distance from the origin + * supplied to the constructor. Returns the equivalent number of quarter-note beats, + * taking tempo changes into account. + */ +Evoral::Beats +BeatsFramesConverter::from (framepos_t frames) const { - assert (beats >= 0); + return _tempo_map.framewalk_to_qn (_origin_b, frames); +} - return _tempo_map.framepos_plus_beats (_origin_b, beats) - _origin_b; +/** As above, but with quarter-note beats in double instead (for GUI). */ +framepos_t +DoubleBeatsFramesConverter::to (double beats) const +{ + if (beats < 0.0) { + std::cerr << "negative beats passed to BFC: " << beats << std::endl; + PBD::stacktrace (std::cerr, 30); + return 0; + } + return _tempo_map.framepos_plus_qn (_origin_b, Evoral::Beats(beats)) - _origin_b; } +/** As above, but with quarter-note beats in double instead (for GUI). */ double -BeatsFramesConverter::from (framecnt_t frames) const +DoubleBeatsFramesConverter::from (framepos_t frames) const { - return _tempo_map.framewalk_to_beats (_origin_b, frames); + return _tempo_map.framewalk_to_qn (_origin_b, frames).to_double(); } } /* namespace ARDOUR */