if (ev.time() >= start) {
ev.time() -= start;
+ // TODO: Right now there come MIDI Events with empty buffer
+ if(!ev.buffer()) {
+ std::cerr << "MidiRingBuffer::read WARNING: Skipping MIDI Event with NULL buffer pointer "
+ << " and length " << int(ev.size()) << std::endl;
+ return 0;
+ }
+
Byte* write_loc = dst.reserve(ev.time(), ev.size());
+
success = MidiRingBufferBase<Byte>::full_read(ev.size(), write_loc);
if (success) {
while (_read_iter != end() && _read_iter->time() < start + nframes) {
assert(_read_iter->size()> 0);
+ assert(_read_iter->buffer());
dst.write(_read_iter->time() + stamp_offset - negative_stamp_offset,
_read_iter->size(), _read_iter->buffer());
} else {
MidiBuffer& output_buf = bufs.get_midi(0);
- write_controller_messages(output_buf, start_frame, end_frame, nframes, offset);
+ // TODO this crashes: (sends events with NULL buffer pointer)
+ // Is this necessary anyway here? Dont know.
+ //write_controller_messages(output_buf, start_frame, end_frame, nframes, offset);
+
deliver_output(bufs, start_frame, end_frame, nframes, offset);
}
}
MidiTrack::write_controller_messages(MidiBuffer& output_buf, nframes_t start_frame, nframes_t end_frame,
nframes_t nframes, nframes_t offset)
{
+#if 0
BufferSet& mix_buffers = _session.get_mix_buffers(ChanCount(DataType::MIDI, 2));
/* FIXME: this could be more realtimey */
MIDI::Event ev(0, 3, buf, false);
// Write track controller automation
-#if 0
// This now lives in MidiModel. Any need for track automation like this?
// Relative Velocity?
if (_session.transport_rolling()) {