13
0

fix midi quantization - part two

include position offset in rounding
This commit is contained in:
Robin Gareus 2013-10-23 02:12:50 +02:00
parent 98f53d11b3
commit 9b086e18b5

View File

@ -62,7 +62,7 @@ Quantize::operator () (boost::shared_ptr<MidiModel> model,
to quantize relative to actual session beats (etc.) rather than from the to quantize relative to actual session beats (etc.) rather than from the
start of the model. start of the model.
*/ */
const double round_pos = ceil(position / _start_grid) * _start_grid; const double round_pos = round(position / _start_grid) * _start_grid;
const double offset = round_pos - position; const double offset = round_pos - position;
bool even; bool even;
@ -74,8 +74,8 @@ Quantize::operator () (boost::shared_ptr<MidiModel> model,
for (Evoral::Sequence<MidiModel::TimeType>::Notes::iterator i = (*s).begin(); i != (*s).end(); ++i) { for (Evoral::Sequence<MidiModel::TimeType>::Notes::iterator i = (*s).begin(); i != (*s).end(); ++i) {
double new_start = round ((*i)->time() / _start_grid) * _start_grid + offset; double new_start = round (((*i)->time() - offset) / _start_grid) * _start_grid + offset;
double new_end = round ((*i)->end_time() / _end_grid) * _end_grid + offset; double new_end = round (((*i)->end_time() - offset) / _end_grid) * _end_grid + offset;
if (_swing > 0.0 && !even) { if (_swing > 0.0 && !even) {