reimplement quantization without (much) floating point (GUI edition)
This commit is contained in:
parent
b276254551
commit
6effcc7723
@ -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
|
||||||
|
@ -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_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user