Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Thru::UnmutedChannels
What is this?
A new Thru Mode
UnmutedChannels
, where only the messages on channels that are not muted will be sent back.You may indicate (un)muted channels with an array of
bool
viasetThruMutedChannels()
, wheretrue
at index0
means "all channels are muted".NoteOff
messages are always sent, even on muted channels in this mode, because otherwise any presently-ringingNoteOn
events will ring out forever while the channel is muted.Why does this exist?
This new Thru Mode allows for an Arduino-powered MIDI Thru box with dedicated hardware toggles for each channel, which may be placed directly after any sequencer to provide control over global track mute state regardless of the sequencer's own track mute functionality.
Why would that be desirable?
The Alesis MMT-8 sequencer allowed for a very fluid performance workflow, where global track mute state was independent of the patterns and was not saved or recalled when switching patterns. Every modern sequencer I've encountered violates the MMT-8 behavior, and insists on being clever about saving and recalling track mute state whenever switching patterns.
This new Thru Mode provides a somewhat elaborate way to replicate the MMT-8 behavior independent of any particular sequencer.
Note: The Sequentix Cirklon provides a "mute hold" feature which would do the same thing, but the Cirklon is unobtainium.
But, does this really belong here?
Given the niche use case, the potentially surprising
NoteOff
behavior, and the reasonably easy-to-imagine desire to allow all messages other thanNoteOn
pass through a muted channel in this mode, this kind of thing may be better implemented via a custom thru filter function as discussed in issue #40 here.