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
This commit is contained in:
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user