reimplement quantization without (much) floating point (GUI edition)

This commit is contained in:
Paul Davis 2021-03-17 11:27:34 -06:00
parent b276254551
commit 6effcc7723
2 changed files with 14 additions and 12 deletions

View File

@ -29,6 +29,7 @@
#include "public_editor.h" #include "public_editor.h"
#include "pbd/i18n.h" #include "pbd/i18n.h"
#include "pbd/integer_division.h"
using namespace std; using namespace std;
using namespace Gtk; using namespace Gtk;
@ -135,42 +136,43 @@ QuantizeDialog::~QuantizeDialog()
{ {
} }
double Temporal::Beats
QuantizeDialog::start_grid_size () const QuantizeDialog::start_grid_size () const
{ {
return grid_size_to_musical_time (start_grid_combo.get_active_text ()); return grid_size_to_musical_time (start_grid_combo.get_active_text ());
} }
double Temporal::Beats
QuantizeDialog::end_grid_size () const QuantizeDialog::end_grid_size () const
{ {
return grid_size_to_musical_time (end_grid_combo.get_active_text ()); 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 QuantizeDialog::grid_size_to_musical_time (const string& txt) const
{ {
if ( txt == _grid_strings[0] ) { //"Main Grid" if ( txt == _grid_strings[0] ) { //"Main Grid"
bool success; 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) { 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) { for (size_t i = 1; i < grid_strings.size(); ++i) {
if (txt == grid_strings[i]) { if (txt == grid_strings[i]) {
assert (_grid_beats[i] != 0); 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; break;
} }
} }
return divisor; return b;
} }
float float

View File

@ -46,8 +46,8 @@ public:
QuantizeDialog (PublicEditor&); QuantizeDialog (PublicEditor&);
~QuantizeDialog (); ~QuantizeDialog ();
double start_grid_size() const; Temporal::Beats start_grid_size() const;
double end_grid_size() const; Temporal::Beats end_grid_size() const;
bool snap_start() const { return snap_start_button.get_active(); } bool snap_start() const { return snap_start_button.get_active(); }
bool snap_end() const { return snap_end_button.get_active(); } bool snap_end() const { return snap_end_button.get_active(); }
float strength() const; float strength() const;
@ -74,7 +74,7 @@ private:
static std::vector<std::string> grid_strings; static std::vector<std::string> grid_strings;
static std::vector<std::string> type_strings; static std::vector<std::string> 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_ */ #endif /* __ardour_gtk2_quantize_dialog_h_ */