From d1b799a2a2e226f2757941f4d6159e25a24f4d04 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 3 Nov 2016 23:32:46 +0000 Subject: [PATCH] don't pass around event_id_t's so much when adding events to a Sequence --- libs/ardour/midi_stretch.cc | 2 +- libs/ardour/smf_source.cc | 35 ++++---- libs/evoral/evoral/Note.hpp | 1 + libs/evoral/evoral/Sequence.hpp | 13 ++- libs/evoral/src/Note.cpp | 8 ++ libs/evoral/src/Sequence.cpp | 142 +++++++++++++++++--------------- 6 files changed, 107 insertions(+), 94 deletions(-) diff --git a/libs/ardour/midi_stretch.cc b/libs/ardour/midi_stretch.cc index 0c7c682ef5..01af88e6ce 100644 --- a/libs/ardour/midi_stretch.cc +++ b/libs/ardour/midi_stretch.cc @@ -100,7 +100,7 @@ MidiStretch::run (boost::shared_ptr r, Progress*) boost::shared_ptr > ev (new Evoral::Event (**i, true)); ev->set_time (new_time); - new_model->append (ev, Evoral::next_event_id()); + new_model->insert (ev); } new_model->end_write (Evoral::Sequence::DeleteStuckNotes); diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index 42a85f4fe4..fd58062e1b 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -425,16 +425,8 @@ SMFSource::append_event_beats (const Glib::Threads::Mutex::Lock& lock, } } - Evoral::event_id_t event_id; - - if (ev->id() < 0) { - event_id = Evoral::next_event_id(); - } else { - event_id = ev->id(); - } - if (_model) { - _model->append (ev, event_id); + _model->insert (ev); } _length_beats = max(_length_beats, time); @@ -442,7 +434,7 @@ SMFSource::append_event_beats (const Glib::Threads::Mutex::Lock& lock, const Evoral::Beats delta_time_beats = time - _last_ev_time_beats; const uint32_t delta_time_ticks = delta_time_beats.to_ticks(ppqn()); - Evoral::SMF::append_event_delta(delta_time_ticks, ev->size(), ev->buffer(), event_id); + Evoral::SMF::append_event_delta(delta_time_ticks, ev->size(), ev->buffer(), ev->id()); _last_ev_time_beats = time; _flags = Source::Flag (_flags & ~Empty); } @@ -470,18 +462,16 @@ SMFSource::append_event_frames (const Glib::Threads::Mutex::Lock& lock, BeatsFramesConverter converter(_session.tempo_map(), position); const Evoral::Beats ev_time_beats = converter.from(ev->time()); - Evoral::event_id_t event_id; - - if (ev->id() < 0) { - event_id = Evoral::next_event_id(); - } else { - event_id = ev->id(); - } if (_model) { boost::shared_ptr > beat_ev (new Evoral::Event (ev->event_type(), ev_time_beats, ev->size(), const_cast(ev->buffer()))); - _model->append (beat_ev, event_id); + + if (ev->id() >= 0) { + beat_ev->set_id (ev->id()); + } + + _model->insert (beat_ev); } _length_beats = max(_length_beats, ev_time_beats); @@ -490,7 +480,7 @@ SMFSource::append_event_frames (const Glib::Threads::Mutex::Lock& lock, const Evoral::Beats delta_time_beats = ev_time_beats - last_time_beats; const uint32_t delta_time_ticks = delta_time_beats.to_ticks(ppqn()); - Evoral::SMF::append_event_delta (delta_time_ticks, ev->size(), ev->buffer(), event_id); + Evoral::SMF::append_event_delta (delta_time_ticks, ev->size(), ev->buffer(), ev->id()); _last_ev_time_frames = ev->time(); _flags = Source::Flag (_flags & ~Empty); } @@ -685,7 +675,12 @@ SMFSource::load_model (const Glib::Threads::Mutex::Lock& lock, bool force_reload boost::shared_ptr > ev ( new Evoral::Event (event_type, event_time, size, buf, true)); - _model->append (ev, event_id); + + if (event_id >= 0) { + ev->set_id (event_id); + } + + _model->insert (ev); // Set size to max capacity to minimize allocs in read_event scratch_size = std::max (size, scratch_size); diff --git a/libs/evoral/evoral/Note.hpp b/libs/evoral/evoral/Note.hpp index 87c8a9fe83..fe4d05ac7c 100644 --- a/libs/evoral/evoral/Note.hpp +++ b/libs/evoral/evoral/Note.hpp @@ -40,6 +40,7 @@ class LIBEVORAL_TEMPLATE_API Note { #endif public: Note(uint8_t chan=0, Time time=Time(), Time len=Time(), uint8_t note=0, uint8_t vel=0x40); + Note(MIDIEvent