Apply MIDI playback filter to immediate note audition events

This commit is contained in:
Robin Gareus
2025-11-25 17:08:02 +01:00
parent 7893b348a8
commit f85ead942b

View File

@@ -46,8 +46,12 @@ NotePlayer::add (std::shared_ptr<NoteType> note)
void
NotePlayer::on ()
{
for (Notes::iterator n = notes.begin(); n != notes.end(); ++n) {
track->write_immediate_event (Evoral::MIDI_EVENT, (*n)->on_event().size(), (*n)->on_event().buffer());
MidiChannelFilter& filter = track->playback_filter ();
for (auto const& n : notes) {
Evoral::Event ev (n->on_event(), true);
if (!filter.filter(ev.buffer(), ev.size())) {
track->write_immediate_event (Evoral::MIDI_EVENT, ev.size(), ev.buffer());
}
}
}
@@ -75,7 +79,11 @@ NotePlayer::_off (NotePlayer* np)
void
NotePlayer::off ()
{
for (Notes::iterator n = notes.begin(); n != notes.end(); ++n) {
track->write_immediate_event (Evoral::MIDI_EVENT, (*n)->off_event().size(), (*n)->off_event().buffer());
MidiChannelFilter& filter = track->playback_filter ();
for (auto const& n : notes) {
Evoral::Event ev (n->off_event(), true);
if (!filter.filter(ev.buffer(), ev.size())) {
track->write_immediate_event (Evoral::MIDI_EVENT, ev.size(), ev.buffer());
}
}
}