From 0605f98fdce1ad456e3da6f6ae391ad394b3edfb Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 8 Jun 2007 23:03:32 +0000 Subject: Fix time skew after MIDI recording (added missing conversion from delta time to audio frames). Fix crash bug in MIDI recording. git-svn-id: svn://localhost/ardour2/trunk@1980 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/ardour/midi_ring_buffer.h | 3 +-- libs/ardour/smf_source.cc | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) (limited to 'libs') diff --git a/libs/ardour/ardour/midi_ring_buffer.h b/libs/ardour/ardour/midi_ring_buffer.h index 86319ad4b2..657ec0852a 100644 --- a/libs/ardour/ardour/midi_ring_buffer.h +++ b/libs/ardour/ardour/midi_ring_buffer.h @@ -300,8 +300,7 @@ MidiRingBuffer::read(MidiBuffer& dst, nframes_t start, nframes_t end) // priv_read_ptr); // } else { - printf("MRB - SKIPPING - %#X %d %d with time %u\n", - ev.buffer[0], ev.buffer[1], ev.buffer[2], ev.time); + printf("MRB - SKIPPING EVENT (with time %u)\n", ev.time); break; } diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc index 11b62e488f..b046ad6fca 100644 --- a/libs/ardour/smf_source.cc +++ b/libs/ardour/smf_source.cc @@ -790,10 +790,17 @@ SMFSource::load_model(bool lock) nframes_t time = 0; MidiEvent ev; + // FIXME: assumes tempo never changes after start + const double frames_per_beat = _session.tempo_map().tempo_at(_timeline_position).frames_per_beat( + _session.engine().frame_rate()); + int ret; while ((ret = read_event(ev)) >= 0) { time += ev.time; ev.time = time; + + ev.time = (nframes_t)(ev.time * frames_per_beat / (double)_ppqn); + if (ret > 0) { // didn't skip (meta) event //cerr << "ADDING EVENT TO MODEL: " << ev.time << endl; _model->append(ev); -- cgit v1.2.3