diff --git a/libs/ardour/ardour/delivery.h b/libs/ardour/ardour/delivery.h index a684c112c9..7e1c83920c 100644 --- a/libs/ardour/ardour/delivery.h +++ b/libs/ardour/ardour/delivery.h @@ -160,7 +160,7 @@ protected: std::shared_ptr _amp; gain_t target_gain (); - void maybe_merge_midi_mute (BufferSet&); + void maybe_merge_midi_mute (BufferSet&, bool always); private: bool _no_outs_cuz_we_no_monitor; diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc index 76f5de50d0..39a1564fe3 100644 --- a/libs/ardour/delivery.cc +++ b/libs/ardour/delivery.cc @@ -281,14 +281,14 @@ Delivery::configure_io (ChanCount in, ChanCount out) } void -Delivery::maybe_merge_midi_mute (BufferSet& bufs) +Delivery::maybe_merge_midi_mute (BufferSet& bufs, bool always) { if (bufs.available().n_midi()) { int mask = _midi_mute_mask.load(); /* atomic */ MidiBuffer& pmbuf (bufs.get_midi (0)); - if (mask && (_current_gain < GAIN_COEFF_SMALL)) { + if ((always || mask) && (_current_gain < GAIN_COEFF_SMALL)) { /* mask set, and we have just been muted */ @@ -296,7 +296,7 @@ Delivery::maybe_merge_midi_mute (BufferSet& bufs) for (uint8_t channel = 0; channel <= 0xF; channel++) { - if ((1< ev (Evoral::MIDI_EVENT, 0, 3, buf); @@ -388,7 +388,7 @@ Delivery::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sample _amp->run (bufs, start_sample, end_sample, speed, nframes, true); } - maybe_merge_midi_mute (bufs); + maybe_merge_midi_mute (bufs, false); RTABufferListPtr rtabuffers = _rtabuffers; if (_rta_active.load () && rtabuffers && !rtabuffers->empty ()) { diff --git a/libs/ardour/internal_send.cc b/libs/ardour/internal_send.cc index 2d5cc42d4b..07a1495520 100644 --- a/libs/ardour/internal_send.cc +++ b/libs/ardour/internal_send.cc @@ -333,7 +333,7 @@ InternalSend::run (BufferSet& bufs, samplepos_t start_sample, samplepos_t end_sa Amp::apply_simple_gain (mixbufs, nframes, tgain); } - maybe_merge_midi_mute (mixbufs); + maybe_merge_midi_mute (mixbufs, tgain == GAIN_COEFF_ZERO); /* apply fader gain automation */ _amp->set_gain_automation_buffer (_session.send_gain_automation_buffer ());