diff options
author | Robin Gareus <robin@gareus.org> | 2017-09-30 23:16:04 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-09-30 23:16:04 +0200 |
commit | eb0dded0954782768834e1d3a494f45cc4a118a1 (patch) | |
tree | 7f67841c0c04354f4b20f2f9510493000679e18d /libs/ardour/ardour/midi_track.h | |
parent | 97c637e39914a8b68f1d0c83d3f8c37d81fc43c2 (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.h | 21 |
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 (); }; |