bahn::Node
One node in a Bahn song's signal-flow graph: a processor, its patterns and its drawing.
| Declared in | src/libs/libbahn/bahn/tracker/node/Node.hpp |
| Inherits | media::graph::GraphNode |
| Group | bahn |
Detailed description
A node extends the generic media::graph::GraphNode with what the tracker needs. The type name given to the constructor selects the processor from the ProcessorFactory, and the processor makes the sound. The node keeps the patterns that the sequencer plays on it, and it draws itself, with its mute, solo, input and output indicators, in the node editor.
Mute and solo are flags on the node, but the processor does the silencing. A change to either flag recomputes the silence for the whole graph.
A change to the name, the position, mute or solo, and an added pattern, mark the song as changed.
See also Bahn.
Member function documentation
applySilenceAcrossGraph
[protected] void Node::applySilenceAcrossGraph()
Recompute which nodes are heard, for the whole graph.
specs/bahn-live-feedback §BLD-2c. One sentence is the whole rule: if any node is soloed, a node is silent unless it is soloed; otherwise a node is silent when it is muted.
That keeps `mute()` the single audible authority and makes `solo()` a filter over it, rather than a second flag the engine also has to consult. Two authorities disagree eventually.
It runs over the whole graph because solo is a statement about the graph, not about one node. A node cannot know whether it is the soloed one without asking its siblings.
The result is pushed onto each processor as `setSilenced`, which is what `AudioJob` reads. Before 2026-09-26 nothing read mute at all: the menu item and the indicator both worked, and the sound never changed.