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 "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

View File

@ -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<std::string> grid_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_ */