set_block_size (_session.get_block_size());
allocate_temporary_buffers ();
- _playback_buf = new MidiRingBuffer (_session.midi_diskstream_buffer_size());
- _capture_buf = new MidiRingBuffer (_session.midi_diskstream_buffer_size());
+ const size_t size = _session.midi_diskstream_buffer_size();
+ _playback_buf = new MidiRingBuffer<nframes_t>(size);
+ _capture_buf = new MidiRingBuffer<nframes_t>(size);
_n_channels = ChanCount(DataType::MIDI, 1);
// Pump entire port buffer into the ring buffer (FIXME: split cycles?)
MidiBuffer& buf = _source_port->get_midi_buffer(nframes, offset);
for (MidiBuffer::iterator i = buf.begin(); i != buf.end(); ++i) {
- const Evoral::MIDIEvent ev(*i, false);
+ const Evoral::MIDIEvent<MidiBuffer::TimeType> ev(*i, false);
assert(ev.buffer());
_capture_buf->write(ev.time() + transport_frame, ev.type(), ev.size(), ev.buffer());
}
*/
try {
- boost::shared_ptr<Region> rx (RegionFactory::create (srcs, _write_source->last_capture_start_frame(), total_capture,
- whole_file_region_name,
- 0, Region::Flag (Region::DefaultFlags|Region::Automatic|Region::WholeFile)));
+ boost::shared_ptr<Region> rx (RegionFactory::create (srcs, 0,
+ total_capture, whole_file_region_name, 0,
+ Region::Flag (Region::DefaultFlags|Region::Automatic|Region::WholeFile)));
region = boost::dynamic_pointer_cast<MidiRegion> (rx);
region->special_set_position (capture_info.front()->start);
XMLNode &before = _playlist->get_state();
_playlist->freeze ();
- for (buffer_position = _write_source->last_capture_start_frame(), ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
+ for (buffer_position = 0, ci = capture_info.begin(); ci != capture_info.end(); ++ci) {
string region_name;
// 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);
-
- 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);
+ #if 1
+ _playback_buf->read(dst, start, end, offset);
+ #else
+ const size_t events_read = _playback_buf->read(dst, start, end, offset);
+ 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;
+ #endif
- // 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()))
- _midistate_tracker.resolve_notes(dst, end-start - 1 + offset);
+ gint32 frames_read = end - start;
+ g_atomic_int_add(&_frames_read_from_ringbuffer, frames_read);
+
+ // Feed the data through the MidiStateTracker
+ // If it detects a LoopEvent it will add necessary note offs
+ if (_midi_state_tracker.track(this_cycle_start, dst.end())) {
+ _midi_state_tracker.resolve_notes(dst, end-start - 1 + offset);
+ }
}