Fix mute of MIDI tracks with channel forcing

Multimedia / Ardour - David Robillard [drobilla.net] - 28 March 2015 23:51 UTC

This moves MIDI channel filtering into a reusable class and moves filtering to the source, rather than modifying the buffer afterwards. This is necessary so that the playlist trackers reflect the emitted notes (and thus are able to stop them in situations like mute).

As a perk, this is also faster because events are just dropped on read, rather than pushed into a buffer then later removed (which is very slow).

Really hammering on mute or solo still seems to produce stuck notes occasionally (perhaps related to multiple-on warnings). I am not yet sure why, but occasional beats always.

c9023ae Fix mute of MIDI tracks with channel forcing.
gtk2_ardour/midi_channel_selector.cc | 9 +-
gtk2_ardour/midi_region_view.cc | 2 +-
gtk2_ardour/midi_time_axis.cc | 28 +++---
libs/ardour/ardour/midi_channel_filter.h | 97 +++++++++++++++++++
libs/ardour/ardour/midi_playlist.h | 4 +-
libs/ardour/ardour/midi_playlist_source.h | 3 +-
libs/ardour/ardour/midi_region.h | 13 ++-
libs/ardour/ardour/midi_source.h | 5 +-
libs/ardour/ardour/midi_track.h | 67 +++-----------
libs/ardour/ardour/smf_source.h | 3 +-
libs/ardour/midi_channel_filter.cc | 143 +++++++++++++++++++++++++++++
libs/ardour/midi_diskstream.cc | 47 +++-------
libs/ardour/midi_playlist.cc | 8 +-
libs/ardour/midi_playlist_source.cc | 3 +-
libs/ardour/midi_region.cc | 14 ++-
libs/ardour/midi_source.cc | 15 ++-
libs/ardour/midi_track.cc | 86 +++--------------
libs/ardour/smf_source.cc | 14 ++-
libs/ardour/wscript | 1 +
19 files changed, 359 insertions(+), 203 deletions(-)

  • Share