From 6effcc7723d2b49e69c2d0d13cdd8a22dcba593d Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 17 Mar 2021 11:27:34 -0600 Subject: [PATCH] reimplement quantization without (much) floating point (GUI edition) --- gtk2_ardour/quantize_dialog.cc | 20 +++++++++++--------- gtk2_ardour/quantize_dialog.h | 6 +++--- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/gtk2_ardour/quantize_dialog.cc b/gtk2_ardour/quantize_dialog.cc index 42f99383d0..64e22155d0 100644 --- a/gtk2_ardour/quantize_dialog.cc +++ b/gtk2_ardour/quantize_dialog.cc @@ -29,6 +29,7 @@ #include "public_editor.h" #include "pbd/i18n.h" +#include "pbd/integer_division.h" using namespace std; using namespace Gtk; @@ -135,42 +136,43 @@ QuantizeDialog::~QuantizeDialog() { } -double +Temporal::Beats QuantizeDialog::start_grid_size () const { return grid_size_to_musical_time (start_grid_combo.get_active_text ()); } -double +Temporal::Beats QuantizeDialog::end_grid_size () const { return grid_size_to_musical_time (end_grid_combo.get_active_text ()); } -double +Temporal::Beats QuantizeDialog::grid_size_to_musical_time (const string& txt) const { if ( txt == _grid_strings[0] ) { //"Main Grid" bool success; - Temporal::DoubleableBeats b = editor.get_grid_type_as_beats (success, timepos_t (0)); + Temporal::Beats b = editor.get_grid_type_as_beats (success, timepos_t (0)); if (!success) { - return 1.0; + return Temporal::Beats (1, 0); } - return b.to_double(); + return b; } - double divisor = 1.0; + Temporal::Beats b (1, 0); + for (size_t i = 1; i < grid_strings.size(); ++i) { if (txt == grid_strings[i]) { assert (_grid_beats[i] != 0); - divisor = 1.0 / _grid_beats[i]; + b = Temporal::Beats::ticks (int_div_round (Temporal::Beats::PPQN, (int32_t) i)); break; } } - return divisor; + return b; } float diff --git a/gtk2_ardour/quantize_dialog.h b/gtk2_ardour/quantize_dialog.h index b72a25931c..d012dd0085 100644 --- a/gtk2_ardour/quantize_dialog.h +++ b/gtk2_ardour/quantize_dialog.h @@ -46,8 +46,8 @@ public: QuantizeDialog (PublicEditor&); ~QuantizeDialog (); - double start_grid_size() const; - double end_grid_size() const; + Temporal::Beats start_grid_size() const; + Temporal::Beats end_grid_size() const; bool snap_start() const { return snap_start_button.get_active(); } bool snap_end() const { return snap_end_button.get_active(); } float strength() const; @@ -74,7 +74,7 @@ private: static std::vector grid_strings; static std::vector type_strings; - double grid_size_to_musical_time (const std::string&) const; + Temporal::Beats grid_size_to_musical_time (const std::string&) const; }; #endif /* __ardour_gtk2_quantize_dialog_h_ */