summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/midi_track.h
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-09-30 23:16:04 +0200
committerRobin Gareus <robin@gareus.org>2017-09-30 23:16:04 +0200
commiteb0dded0954782768834e1d3a494f45cc4a118a1 (patch)
tree7f67841c0c04354f4b20f2f9510493000679e18d /libs/ardour/ardour/midi_track.h
parent97c637e39914a8b68f1d0c83d3f8c37d81fc43c2 (diff)
Immediate-event/out-of-band injection update & tweak clearing buffers
Immediate events are used for MIDI-Panic and to inject GUI generated events e.g. patch-changes, note-events from the track-header (scroomer-keyboard) and patch-change audition. Current behavior: - snapshot copy immediate events from ringbuffer into a buffer at the beginning of each the cycle. - Inject immediate events into input-buffer directly after reading the input - process "normally" - pass immediate event-buffer to disk-writer, so it can skip them (don't write immediate events to disk) - if the Route is not monitoring input: clear buffer before disk-reader and re-inject (original) immediate events after the disk-reader - immediate events process normally and are also sent to outputs.
Diffstat (limited to 'libs/ardour/ardour/midi_track.h')
-rw-r--r--libs/ardour/ardour/midi_track.h21
1 files changed, 13 insertions, 8 deletions
diff --git a/libs/ardour/ardour/midi_track.h b/libs/ardour/ardour/midi_track.h
index dfd5a42d13..93856282c4 100644
--- a/libs/ardour/ardour/midi_track.h
+++ b/libs/ardour/ardour/midi_track.h
@@ -126,6 +126,8 @@ public:
MonitorState monitoring_state () const;
+ MidiBuffer const& immediate_event_buffer () const { return _immediate_event_buffer; }
+
void set_input_active (bool);
bool input_active () const;
PBD::Signal0<void> InputActiveChanged;
@@ -136,16 +138,19 @@ protected:
void act_on_mute ();
void monitoring_changed (bool, PBD::Controllable::GroupControlDisposition);
+ void snapshot_out_of_band_data (samplecnt_t nframes);
+ void write_out_of_band_data (BufferSet& bufs, samplecnt_t /* nframes */) const;
+
+
private:
MidiRingBuffer<samplepos_t> _immediate_events;
+ MidiBuffer _immediate_event_buffer;
MidiRingBuffer<samplepos_t> _step_edit_ring_buffer;
- NoteMode _note_mode;
- bool _step_editing;
- bool _input_active;
- MidiChannelFilter _playback_filter;
- MidiChannelFilter _capture_filter;
-
- void write_out_of_band_data (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sample, samplecnt_t nframes);
+ NoteMode _note_mode;
+ bool _step_editing;
+ bool _input_active;
+ MidiChannelFilter _playback_filter;
+ MidiChannelFilter _capture_filter;
void set_state_part_two ();
void set_state_part_three ();
@@ -157,7 +162,7 @@ private:
void map_input_active (bool);
/** Update automation controls to reflect any changes in buffers. */
- void update_controls (const BufferSet& bufs);
+ void update_controls (BufferSet const& bufs);
void restore_controls ();
};