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

constexpr std::string_view Ui::MidiDisplay::mode_names[]
inlineconstexpr
Initial value:
{
"Piano roll", "Event list", "Controllers", "Activity", "Expression"}