diff options
author | David Robillard <d@drobilla.net> | 2007-06-08 23:03:32 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-06-08 23:03:32 +0000 |
commit | 0605f98fdce1ad456e3da6f6ae391ad394b3edfb (patch) | |
tree | 7ff7bb610e46a43bf1c89bd1c27b65bb2ec2c95c | |
parent | cc18cf3516cd67a1eec0f1e7ed188969c0c646f1 (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
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 5 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_ring_buffer.h | 3 | ||||
-rw-r--r-- | libs/ardour/smf_source.cc | 7 |
3 files changed, 11 insertions, 4 deletions
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index b4b3f18e3b..918505b123 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -150,12 +150,13 @@ MidiRegionView::end_write() void MidiRegionView::add_event (const MidiEvent& ev) { - /*printf("Event, time = %u, size = %zu, data = ", + printf("Event, time = %u, size = %zu, data = ", ev.time, ev.size); for (size_t i=0; i < ev.size; ++i) { printf("%X ", ev.buffer[i]); } - printf("\n");*/ + printf("\n\n"); + double y1 = trackview.height / 2.0; if ((ev.buffer[0] & 0xF0) == MIDI_CMD_NOTE_ON) { const Byte& note = ev.buffer[1]; 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); |