Loading...
Searching...
No Matches
Ui::MidiDisplay Namespace Reference
MIDI display: a scrolling monitor for whatever goes through a MIDI port. More...
Detailed Description
MIDI display: a scrolling monitor for whatever goes through a MIDI port.
Cable any MIDI outlet to it to see the raw message stream; outlets fan out, so it taps a chain without interrupting it. It is primarily meant to debug note lifetime issues: a note whose note-off is never sent is drawn as a bar that never ends, in red, and counted in the "stuck" readout in the header. Retriggers without an intervening note-off, and note-offs for notes that were not held, are also flagged, as those are the usual symptoms of a broken note-off path.
Implementation notes:
- Messages reach the view through an event ring on the process monitor, none lost while the view keeps up; the node also publishes which notes are held, so that a view opened during playback starts from the right state.
- Note pairing (held / stuck / retriggered / unmatched note-off) is done in the node, not in the layer, and shipped as a per-event flag. The layer only only holds what came while it was shown, and is rebuilt from scratch when playback restarts; deriving pairing from such a window reports the note-ons whose note-off fell before it as stuck, and the note-offs whose note-on fell before it as unmatched. Both are artifacts of the window, not of the stream.
- Caveat: avendish drops incoming messages whose timestamp falls outside [tick_start; tick_start + frames[ (see port_run_preprocess.hpp). Messages emitted by an upstream node with an out-of-tick timestamp are therefore invisible here as well as to every other avnd process.
Classes | |
| struct | HeldNotes |
| Which notes are held on each channel. More... | |
| struct | MidiEvent |
| One message as the node saw it. More... | |
| struct | MidiMonitor |
| struct | Node |
Enumerations | |
| enum class | Mode { PianoRoll , EventList , Controllers , Activity , Expression } |
| enum class | NotePalette { Green , Inferno , Viridis , Magma , Turbo , Channels } |
Variables | |
| constexpr std::string_view | mode_names [] |
Variable Documentation
◆ mode_names
|
inlineconstexpr |
Initial value:
{
"Piano roll", "Event list", "Controllers", "Activity", "Expression"}