mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 15:54:57 +01:00
parent
d67d4d129f
commit
089c334d0c
7 changed files with 33 additions and 3 deletions
|
|
@ -72,6 +72,7 @@ class LIBARDOUR_API MidiDiskstream : public Diskstream
|
|||
void set_record_enabled (bool yn);
|
||||
|
||||
void reset_tracker ();
|
||||
void resolve_tracker (Evoral::EventSink<framepos_t>& buffer, framepos_t time);
|
||||
|
||||
boost::shared_ptr<MidiPlaylist> midi_playlist ();
|
||||
|
||||
|
|
|
|||
|
|
@ -56,6 +56,7 @@ public:
|
|||
|
||||
void reset_tracker ();
|
||||
void resolve_tracker (MidiBuffer& dst, framepos_t);
|
||||
void resolve_tracker (Evoral::EventSink<framepos_t>& dst, framepos_t);
|
||||
|
||||
private:
|
||||
MidiStateTracker _tracker;
|
||||
|
|
|
|||
|
|
@ -1554,6 +1554,19 @@ MidiDiskstream::reset_tracker ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiDiskstream::resolve_tracker (Evoral::EventSink<framepos_t>& buffer, framepos_t time)
|
||||
{
|
||||
_playback_buf->resolve_tracker(buffer, time);
|
||||
|
||||
boost::shared_ptr<MidiPlaylist> mp (midi_playlist());
|
||||
|
||||
if (mp) {
|
||||
mp->reset_note_trackers ();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
boost::shared_ptr<MidiPlaylist>
|
||||
MidiDiskstream::midi_playlist ()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -303,6 +303,13 @@ MidiRingBuffer<T>::resolve_tracker (MidiBuffer& dst, framepos_t t)
|
|||
_tracker.resolve_notes (dst, t);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
void
|
||||
MidiRingBuffer<T>::resolve_tracker (Evoral::EventSink<framepos_t>& dst, framepos_t t)
|
||||
{
|
||||
_tracker.resolve_notes(dst, t);
|
||||
}
|
||||
|
||||
template class MidiRingBuffer<framepos_t>;
|
||||
|
||||
} // namespace ARDOUR
|
||||
|
|
|
|||
|
|
@ -892,7 +892,7 @@ MidiTrack::act_on_mute ()
|
|||
return;
|
||||
}
|
||||
|
||||
if (muted()) {
|
||||
if (muted() || _mute_master->muted_by_others_at(MuteMaster::AllPoints)) {
|
||||
/* only send messages for channels we are using */
|
||||
|
||||
uint16_t mask = get_playback_channel_mask();
|
||||
|
|
@ -904,10 +904,14 @@ MidiTrack::act_on_mute ()
|
|||
DEBUG_TRACE (DEBUG::MidiIO, string_compose ("%1 delivers mute message to channel %2\n", name(), channel+1));
|
||||
uint8_t ev[3] = { ((uint8_t) (MIDI_CMD_CONTROL | channel)), MIDI_CTL_SUSTAIN, 0 };
|
||||
write_immediate_event (3, ev);
|
||||
ev[1] = MIDI_CTL_ALL_NOTES_OFF;
|
||||
write_immediate_event (3, ev);
|
||||
|
||||
/* Note we do not send MIDI_CTL_ALL_NOTES_OFF here, since this may
|
||||
silence notes that came from another non-muted track. */
|
||||
}
|
||||
}
|
||||
|
||||
/* Resolve active notes. */
|
||||
midi_diskstream()->resolve_tracker(_immediate_events, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,9 @@
|
|||
using namespace ARDOUR;
|
||||
using namespace std;
|
||||
|
||||
const MuteMaster::MutePoint MuteMaster::AllPoints = MuteMaster::MutePoint(
|
||||
PreFader|PostFader|Listen|Main);
|
||||
|
||||
MuteMaster::MuteMaster (Session& s, const std::string&)
|
||||
: SessionHandleRef (s)
|
||||
, _mute_point (MutePoint (0))
|
||||
|
|
|
|||
|
|
@ -3022,6 +3022,7 @@ Session::route_solo_changed (bool self_solo_change, void* /*src*/, boost::weak_p
|
|||
|
||||
for (RouteList::iterator i = uninvolved.begin(); i != uninvolved.end(); ++i) {
|
||||
DEBUG_TRACE (DEBUG::Solo, string_compose ("mute change for %1, which neither feeds or is fed by %2\n", (*i)->name(), route->name()));
|
||||
(*i)->act_on_mute ();
|
||||
(*i)->mute_changed (this);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue