summaryrefslogtreecommitdiff
path: root/libs/ardour/beats_samples_converter.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2017-09-18 12:39:17 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2017-09-18 12:39:17 -0400
commit30b087ab3d28f1585987fa3f6ae006562ae192e3 (patch)
tree620ae0250b5d77f90a18f8c2b83be61e4fe7b0b5 /libs/ardour/beats_samples_converter.cc
parentcb956e3e480716a3efd280a5287bdd7bee1cedc5 (diff)
globally change all use of "frame" to refer to audio into "sample".
Generated by tools/f2s. Some hand-editing will be required in a few places to fix up comments related to timecode and video in order to keep the legible
Diffstat (limited to 'libs/ardour/beats_samples_converter.cc')
-rw-r--r--libs/ardour/beats_samples_converter.cc74
1 files changed, 74 insertions, 0 deletions
diff --git a/libs/ardour/beats_samples_converter.cc b/libs/ardour/beats_samples_converter.cc
new file mode 100644
index 0000000000..67b13cd05f
--- /dev/null
+++ b/libs/ardour/beats_samples_converter.cc
@@ -0,0 +1,74 @@
+/*
+ Copyright (C) 2009 Paul Davis
+ Author: David Robillard
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ $Id: midiregion.h 733 2006-08-01 17:19:38Z drobilla $
+*/
+
+#include "pbd/stacktrace.h"
+
+#include "ardour/beats_samples_converter.h"
+#include "ardour/tempo.h"
+
+namespace ARDOUR {
+
+/** 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 samples,
+ * taking tempo changes into account.
+ */
+samplepos_t
+BeatsSamplesConverter::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.samplepos_plus_qn (_origin_b, beats) - _origin_b;
+}
+
+/** Takes a duration in samples 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
+BeatsSamplesConverter::from (samplepos_t samples) const
+{
+ return _tempo_map.framewalk_to_qn (_origin_b, samples);
+}
+
+/** As above, but with quarter-note beats in double instead (for GUI). */
+samplepos_t
+DoubleBeatsSamplesConverter::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.samplepos_plus_qn (_origin_b, Evoral::Beats(beats)) - _origin_b;
+}
+
+/** As above, but with quarter-note beats in double instead (for GUI). */
+double
+DoubleBeatsSamplesConverter::from (samplepos_t samples) const
+{
+ return _tempo_map.framewalk_to_qn (_origin_b, samples).to_double();
+}
+
+} /* namespace ARDOUR */
+