diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc index b80f6217cf..108dcb21a5 100644 --- a/libs/ardour/midi_diskstream.cc +++ b/libs/ardour/midi_diskstream.cc @@ -1487,19 +1487,20 @@ MidiDiskstream::get_playback(MidiBuffer& dst, nframes_t start, nframes_t end, nf // Check only events added this offset cycle MidiBuffer::iterator this_cycle_start = dst.end(); - + // Translates stamps to be relative to start, but add offset. - _playback_buf->read(dst, start, end, offset); + const size_t events_read = _playback_buf->read(dst, start, end, offset); - gint32 data_read = end-start; - //cout << "data read = " << data_read << " e=" << end << " s=" << start << "off= " << offset - // << " readspace " << _playback_buf->read_space() << " writespace " << _playback_buf->write_space() << endl; - g_atomic_int_add(&_frames_read_from_ringbuffer, data_read); + gint32 frames_read = end-start; + cout << "frames read = " << frames_read << " events read = " << events_read << " end=" << end << " start=" << start << " offset= " << offset + << " readspace " << _playback_buf->read_space() << " writespace " << _playback_buf->write_space() << endl; + g_atomic_int_add(&_frames_read_from_ringbuffer, frames_read); // Now feed the data through the MidiStateTracker. // In case it detects a LoopEvent it will add necessary note // offs. - if (_midistate_tracker.track(this_cycle_start, dst.end())) + if (_midistate_tracker.track(this_cycle_start, dst.end())) { _midistate_tracker.resolve_notes(dst, end-start - 1 + offset); + } } diff --git a/libs/ardour/midi_ring_buffer.cc b/libs/ardour/midi_ring_buffer.cc index 6327ab45c2..e93ca51b25 100644 --- a/libs/ardour/midi_ring_buffer.cc +++ b/libs/ardour/midi_ring_buffer.cc @@ -98,13 +98,22 @@ MidiRingBuffer::read(MidiBuffer& dst, nframes_t start, nframes_t end, nframes ev_time -= start; ev_time += offset; + // this writes the timestamp to write_loc[0] uint8_t* write_loc = dst.reserve(ev_time, ev_size); if (write_loc == NULL) { cerr << "MRB: Unable to reserve space in buffer, event skipped"; continue; } - + + // write MIDI buffer contents success = Evoral::EventRingBuffer::full_read(ev_size, write_loc); + + cerr << "wrote MidiEvent to Buffer: "; + for (size_t i=0; i < ev_size; ++i) { + printf("%X ", write_loc[i]); + } + printf("\n"); + if (success) { if (is_channel_event(status) && get_channel_mode() == ForceChannel) {