diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-09-07 16:53:53 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-09-07 16:53:53 +0000 |
commit | 539c8361de35364effe804e2db184790226b340a (patch) | |
tree | 279f579faa714c666251b928ded743354f9b4610 /libs/ardour | |
parent | 79dc191d6bcd61a81765ce2563a9c325b97c4ed8 (diff) |
use diff commands for quantize, with infrastructure changes as required
git-svn-id: svn://localhost/ardour2/branches/3.0@5639 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/midi_operator.h | 8 | ||||
-rw-r--r-- | libs/ardour/ardour/quantize.h | 2 | ||||
-rw-r--r-- | libs/ardour/quantize.cc | 20 |
3 files changed, 18 insertions, 12 deletions
diff --git a/libs/ardour/ardour/midi_operator.h b/libs/ardour/ardour/midi_operator.h index e3ed6aabfd..64ceaad841 100644 --- a/libs/ardour/ardour/midi_operator.h +++ b/libs/ardour/ardour/midi_operator.h @@ -26,14 +26,18 @@ #include "evoral/types.hpp" #include "evoral/Sequence.hpp" +class Command; + namespace ARDOUR { +class MidiModel; + class MidiOperator { public: - MidiOperator() {} + MidiOperator () {} virtual ~MidiOperator() {} - virtual int operator() (std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes>&) = 0; + virtual Command* operator() (boost::shared_ptr<ARDOUR::MidiModel>, std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes>&) = 0; virtual std::string name() const = 0; }; diff --git a/libs/ardour/ardour/quantize.h b/libs/ardour/ardour/quantize.h index 57e5467294..8db7e4185f 100644 --- a/libs/ardour/ardour/quantize.h +++ b/libs/ardour/ardour/quantize.h @@ -36,7 +36,7 @@ public: float strength, float swing, float threshold); ~Quantize (); - int operator() (std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes>&); + Command* operator() (boost::shared_ptr<ARDOUR::MidiModel>, std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes>&); std::string name() const { return std::string ("quantize"); } private: diff --git a/libs/ardour/quantize.cc b/libs/ardour/quantize.cc index becb3bd491..7aedb98a4d 100644 --- a/libs/ardour/quantize.cc +++ b/libs/ardour/quantize.cc @@ -24,12 +24,14 @@ #include "ardour/quantize.h" #include "ardour/session.h" #include "ardour/smf_source.h" +#include "ardour/midi_model.h" #include "ardour/midi_region.h" #include "ardour/tempo.h" #include "i18n.h" using namespace std; +using namespace PBD; using namespace ARDOUR; /** Quantize notes @@ -57,18 +59,17 @@ Quantize::~Quantize () { } -int -Quantize::operator () (std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes>& seqs) +Command* +Quantize::operator () (boost::shared_ptr<MidiModel> model, std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes>& seqs) { bool even; + MidiModel::DiffCommand* cmd = new MidiModel::DiffCommand (model, "quantize"); - for (std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes>::iterator s = seqs.begin(); - s != seqs.end(); ++s) { + for (std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes>::iterator s = seqs.begin(); s != seqs.end(); ++s) { even = false; - 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; double new_end = round ((*i)->end_time() / _end_grid) * _end_grid; @@ -101,7 +102,8 @@ Quantize::operator () (std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes> if (fabs (delta) >= _threshold) { if (_snap_start) { delta *= _strength; - (*i)->set_time ((*i)->time() + delta); + cmd->change ((*i), MidiModel::DiffCommand::StartTime, + (*i)->time() + delta); } } @@ -115,7 +117,7 @@ Quantize::operator () (std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes> new_dur = _end_grid; } - (*i)->set_length (new_dur); + cmd->change ((*i), MidiModel::DiffCommand::Length, new_dur); } } @@ -123,5 +125,5 @@ Quantize::operator () (std::vector<Evoral::Sequence<Evoral::MusicalTime>::Notes> } } - return 0; + return cmd; } |