summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-06-08 23:03:32 +0000
committerDavid Robillard <d@drobilla.net>2007-06-08 23:03:32 +0000
commit0605f98fdce1ad456e3da6f6ae391ad394b3edfb (patch)
tree7ff7bb610e46a43bf1c89bd1c27b65bb2ec2c95c /libs
parentcc18cf3516cd67a1eec0f1e7ed188969c0c646f1 (diff)
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
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/midi_ring_buffer.h3
-rw-r--r--libs/ardour/smf_source.cc7
2 files changed, 8 insertions, 2 deletions
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);