* Because of this MIDI controllers and automatable controllers/widgets/etc
* are easily interchangeable.
*/
-class LIBARDOUR_API MidiModel : public AutomatableSequence<Evoral::MusicalTime> {
+class LIBARDOUR_API MidiModel : public AutomatableSequence<Evoral::Beats> {
public:
- typedef Evoral::MusicalTime TimeType;
+ typedef Evoral::Beats TimeType;
MidiModel (boost::shared_ptr<MidiSource>);
static Variant::Type value_type (Property prop);
- private:
struct NoteChange {
NoteDiffCommand::Property property;
NotePtr note;
Variant new_value;
};
- typedef std::list<NoteChange> ChangeList;
- ChangeList _changes;
-
+ typedef std::list<NoteChange> ChangeList;
typedef std::list< boost::shared_ptr< Evoral::Note<TimeType> > > NoteList;
- NoteList _added_notes;
- NoteList _removed_notes;
+
+ const ChangeList& changes() const { return _changes; }
+ const NoteList& added_notes() const { return _added_notes; }
+ const NoteList& removed_notes() const { return _removed_notes; }
+
+ private:
+ ChangeList _changes;
+ NoteList _added_notes;
+ NoteList _removed_notes;
std::set<NotePtr> side_effect_removals;
private:
struct Change {
+ Change () : sysex_id (0) {}
boost::shared_ptr<Evoral::Event<TimeType> > sysex;
- gint sysex_id;
+ gint sysex_id;
SysExDiffCommand::Property property;
TimeType old_time;
TimeType new_time;
bool write_section_to(boost::shared_ptr<MidiSource> source,
const Glib::Threads::Mutex::Lock& source_lock,
- Evoral::MusicalTime begin = Evoral::MinMusicalTime,
- Evoral::MusicalTime end = Evoral::MaxMusicalTime);
+ Evoral::Beats begin = Evoral::MinBeats,
+ Evoral::Beats end = Evoral::MaxBeats);
// MidiModel doesn't use the normal AutomationList serialisation code
// since controller data is stored in the .mid
boost::shared_ptr<Evoral::Control> control_factory(const Evoral::Parameter& id);
void insert_silence_at_start (TimeType);
- void transpose (TimeType, TimeType, int);
+ void transpose (NoteDiffCommand *, const NotePtr, int);
+
+ std::set<WeakNotePtr>& active_notes() { return _active_notes; }
protected:
int resolve_overlaps_unlocked (const NotePtr, void* arg = 0);
public:
WriteLock edit_lock();
- WriteLock write_lock();
private:
friend class DeltaCommand;
// We cannot use a boost::shared_ptr here to avoid a retain cycle
boost::weak_ptr<MidiSource> _midi_source;
InsertMergePolicy _insert_merge_policy;
+
+ std::set<WeakNotePtr> _active_notes;
};
} /* namespace ARDOUR */