Better MidiModel command framework, ready to go for all your canvas editing needs.

Rewrote MidiEvent to be a well-behaved self-contained object that optionally owns it's buffer, has proper copying semantics, etc.
Fixed crazy bugs triggered by adding lots of events with varying times to a region.
Speed up initial session display significantly (don't redraw each MIDI region tons of times, though still happens more than once and can use fixing...).


git-svn-id: svn://localhost/ardour2/trunk@2213 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2007-08-01 20:50:09 +00:00
parent 3f421ac450
commit d7db3f757f
22 changed files with 319 additions and 181 deletions

View file

@ -382,10 +382,10 @@ SMFSource::write_unlocked (MidiRingBuffer& src, nframes_t cnt)
for (MidiBuffer::iterator i = buf.begin(); i != buf.end(); ++i) {
MidiEvent& ev = *i;
assert(ev.time >= _timeline_position);
ev.time -= _timeline_position;
assert(ev.time >= _last_ev_time);
const uint32_t delta_time = (uint32_t)((ev.time - _last_ev_time) / frames_per_beat * _ppqn);
assert(ev.time() >= _timeline_position);
ev.time() -= _timeline_position;
assert(ev.time() >= _last_ev_time);
const uint32_t delta_time = (uint32_t)((ev.time() - _last_ev_time) / frames_per_beat * _ppqn);
/*printf("SMF - writing event, delta = %u, size = %zu, data = ",
delta_time, ev.size);
@ -395,12 +395,12 @@ SMFSource::write_unlocked (MidiRingBuffer& src, nframes_t cnt)
printf("\n");
*/
size_t stamp_size = write_var_len(delta_time);
fwrite(ev.buffer, 1, ev.size, _fd);
fwrite(ev.buffer(), 1, ev.size(), _fd);
_track_size += stamp_size + ev.size;
_write_data_count += ev.size;
_track_size += stamp_size + ev.size();
_write_data_count += ev.size();
_last_ev_time = ev.time;
_last_ev_time = ev.time();
}
fflush(_fd);