Skip to content

Routing

Routing nodes help you move signals around your patch without running long cables everywhere, and let you choose which signal gets through. "Virtual wires" let you send sound or a control signal from one place and pick it up somewhere else, even when the signal needs to loop back on itself, just by giving both ends the same wire name. You label each wire with a name you type, and both ends that share a name are connected, which makes it easy to see where a send comes from and where it goes. (Older patches that used wire numbers still work: the number simply acts as the name.) The rest of this group are pickers and traffic controllers: grab a value the moment something fires, flip between several inputs, follow whichever source you touched last, make sure a control value and its trigger arrive in the right order, pass a message through untouched, or break one message into separate outputs by type. Reach for these whenever you want tidier wiring or precise control over what goes where, and in what order.

Audio Send

Sends a sound into a named "virtual wire", like dropping it into a labelled mailbox. An Audio Receive with the same name picks it up again, arriving one tiny audio chunk later. Use it to skip long cables, send one sound to many places at once, or build your own feedback loop (where a signal feeds back into itself).

Audio Send and Audio Receive nodes

ParameterRangeDefaultDescription
Wiretext(none)Wire name. The Audio Receive that reads it must use the same name.

Inputs: In (audio fed into the virtual wire), Wire (the wire name as text; a plain number also works for older patches). Outputs: none.

The same name connects the wire anywhere in the project: the matching Audio Receive can sit in the main patch or inside any subgraph (a patch nested inside a node). If you want a wire that stays private to one subgraph, use Audio Sub Send and Audio Sub Receive instead.


Audio Receive

Picks up a sound from a named "virtual wire". It plays back exactly what the matching Audio Send put in, arriving one tiny audio chunk later. The very first chunk is silent because the wire starts out empty.

Audio Send and Audio Receive nodes

ParameterRangeDefaultDescription
Wiretext(none)Wire name. Must match the Audio Send that feeds it.

Inputs: Wire (the wire name as text; a plain number also works for older patches). Outputs: Out (audio read from the wire, one block behind the Audio Send).


Audio Sub Send

Sends a sound into a local "virtual wire". Local means the wire stays private to the subgraph (the patch nested inside a node) it lives in, or to the main patch if that is where you put it. It never leaks out to the patch around it, to a neighbour, or to a deeper nested patch. If several Audio Sub Sends use the same local wire, their sounds are mixed together.

Audio Sub Send and Audio Sub Receive nodes

ParameterRangeDefaultDescription
Wiretext(none)Wire name. The Audio Sub Receive must use the same name, in the same subgraph.

Inputs: In (audio fed into the local virtual wire), Wire (the wire name as text; a plain number also works for older patches). Outputs: none.

To send and pick up across the whole project, use Audio Send and Audio Receive instead.


Audio Sub Receive

Picks up a sound from a local "virtual wire". It plays back what the matching Audio Sub Send put in, arriving one tiny audio chunk later, and stays private to the subgraph (the patch nested inside a node) it lives in. The very first chunk is silent because the wire starts out empty.

Audio Sub Send and Audio Sub Receive nodes

ParameterRangeDefaultDescription
Wiretext(none)Wire name. Must match the Audio Sub Send in the same subgraph.

Inputs: Wire (the wire name as text; a plain number also works for older patches). Outputs: Out (audio read from the local wire, one block behind the Audio Sub Send).


CV Sample & Hold

Takes a snapshot of the control signal at the In input the instant the Trigger input crosses 0.5, then keeps that value frozen until the next trigger. This is the classic "sample and hold", great for stepped, jumping modulation, turning noise into random melodies, or freezing a moving value. Everything here runs at full audio speed.

CV Sample & Hold

Inputs: In (CV to sample, stream-capable), Trigger (a rising edge past 0.5 captures the input). Outputs: Out (the held CV value, updated on each trigger).


CV Switch

A two-way chooser. When the Cond input is above 0 it sends out A, otherwise it sends out B. Think of it as the basic "if this, then A, else B" building block for control signals. All three inputs run at full audio speed.

CV Switch

ParameterRangeDefaultDescription
Condunbounded0.0Condition. Greater than 0 selects A, 0 or less selects B.
Aunbounded1.0Value sent when the condition is true.
Bunbounded0.0Value sent when the condition is false.

Inputs: Cond (condition, accepts float, int or bool), A (value when true), B (value when false). All stream-capable. Outputs: Out (the selected value, A or B).


CV Input Select

A four-way chooser. The Index input decides which of the four inputs gets passed to the output (0 = A, 1 = B, 2 = C, 3 = D). Handy for switching between different modulation sources on the fly. Index and all inputs run at full audio speed, and if you feed Index a value with decimals it is rounded to the nearest slot and kept within 0 to 3.

CV Input Select

ParameterRangeDefaultDescription
Index0 - 30Which input is sent to Out (0 = A, 1 = B, 2 = C, 3 = D).
Aunbounded0.0CV input A.
Bunbounded0.0CV input B.
Cunbounded0.0CV input C.
Dunbounded0.0CV input D.

Inputs: Index (selector, rounded and clamped to 0 to 3), A, B, C, D (the four CV inputs). All stream-capable. Outputs: Out (the selected CV value).


Route Sequencer

Picks one of up to 128 control-signal inputs by number. It works like CV Input Select, but you choose how many inputs it has. That lets you drive the Index with a step counter or sequencer to step through many modulation sources in patterns. The inputs and Index both run at full audio speed, and if you feed Index a value with decimals it is rounded to the nearest slot and kept within the valid range.

Route Sequencer

ParameterRangeDefaultDescription
Inputs1 - 1284How many source inputs the node shows.
Index0 - (Inputs - 1)0Which source input is sent to Out.

Inputs: Inputs (source count, stream-capable), Index (selector, rounded and clamped to the valid range, stream-capable), and the source inputs In 0 to In N-1 (one per input, stream-capable). Outputs: Out (the selected CV value).


CV Last-Changed

Keeps an eye on several control-signal inputs and passes along whichever one moved most recently. Use it when several sources should control the same thing, but you want only the last one you touched to win, instead of all of them being added together. The active input keeps driving the output until a different one moves by more than the Threshold.

CV Last-Changed

ParameterRangeDefaultDescription
Inputs1 - 164How many source inputs the node shows. Set in the inspector.
Threshold0.0 - 1.00.001Dead-zone for change detection, so jitter on a static input does not steal focus.

Inputs: Threshold (change dead-zone, stream-capable), and the source inputs A, B, C and so on (1 to 16 of them). Higher-numbered inputs take priority on simultaneous changes. Outputs: Out (the value of whichever input changed most recently).


CV Send

Sends a control signal into a project-wide "virtual wire". A CV Receive with the same name picks it up again, arriving one tiny audio chunk later, so you can build control-signal feedback loops (where a signal feeds back into itself). The same name connects the wire anywhere in the project. If several CV Sends use the same wire, their signals are mixed together.

CV Send and CV Receive nodes

ParameterRangeDefaultDescription
Wiretext(none)Wire name. Must match the CV Receive on the other side.

Inputs: In (CV written into the wire), Wire (the wire name as text; a plain number also works for older patches). Outputs: none.

Control-signal wires and audio wires are kept separate: a CV wire and an audio wire with the same name never share the same storage. A CV wire carries the control value at its full range, so it can pass positions, frequencies or note numbers far outside the -1..1 audio range; audio wires keep a tighter safety range because audio is meant to sit near -1..1.


CV Receive

Picks up a control signal from a project-wide "virtual wire". It plays back exactly what the matching CV Send put in, arriving one tiny audio chunk later. The same name connects the wire anywhere in the project.

CV Send and CV Receive nodes

ParameterRangeDefaultDescription
Wiretext(none)Wire name. Must match the CV Send that feeds it.

Inputs: Wire (the wire name as text; a plain number also works for older patches). Outputs: Out (CV read from the wire, one block behind the CV Send).


CV Sub Send

Sends a control signal into a private "virtual wire" that belongs only to one subgraph (a patch nested inside a node). It only pairs with a CV Sub Receive with the same name, inside the same subgraph, so the signal never leaves that nested patch.

CV Sub Send and CV Sub Receive nodes

ParameterRangeDefaultDescription
Wiretext(none)Wire name. Must match the CV Sub Receive in the same subgraph.

Inputs: In (CV written into the wire), Wire (the wire name as text; a plain number also works for older patches). Outputs: none.


CV Sub Receive

Picks up a control signal from a private "virtual wire" that belongs only to one subgraph (a patch nested inside a node). It plays back what the matching CV Sub Send put in, arriving one tiny audio chunk later, and only pairs within the same subgraph.

CV Sub Send and CV Sub Receive nodes

ParameterRangeDefaultDescription
Wiretext(none)Wire name. Must match the CV Sub Send in the same subgraph.

Inputs: Wire (the wire name as text; a plain number also works for older patches). Outputs: Out (CV read from the wire, one block behind the CV Sub Send).


Data Send

Sends a data message into a project-wide "virtual wire". Every Data Receive with the same name receives it immediately, with no cable in between and no delay. Any kind of message passes through unchanged: a bang, a number, a true/false, or a text string. The same name connects the wire anywhere in the project.

Data Send

ParameterRangeDefaultDescription
Wiretext(none)Wire name. Must match the Data Receive on the other side.

Inputs: In (the data message sent into the wire), Wire (the wire name as text; a plain number also works for older patches). Outputs: none.

Unlike audio and CV wires, a Data Wire is a direct path with no delay, so it does not build feedback loops: a loop through a Data Wire is rejected just like a normal data cable, unless the receiving end is a Set pin. Data wires keep their own names, separate from audio and CV wires.


Data Receive

Receives the data message sent by a Data Send with the same name, immediately. Any kind of message comes through unchanged. The same name connects the wire anywhere in the project.

Data Receive

ParameterRangeDefaultDescription
Wiretext(none)Wire name. Must match the Data Send that feeds it.

Inputs: Wire (the wire name as text; a plain number also works for older patches). Outputs: Out (the data message received from the wire).


Data Sub Send

Sends a data message into a private "virtual wire" that belongs only to one subgraph (a patch nested inside a node). It only pairs with a Data Sub Receive with the same name, inside the same subgraph.

Data Sub Send

ParameterRangeDefaultDescription
Wiretext(none)Wire name. Must match the Data Sub Receive in the same subgraph.

Inputs: In (the data message sent into the wire), Wire (the wire name as text; a plain number also works for older patches). Outputs: none.


Data Sub Receive

Receives the data message sent by the matching Data Sub Send with the same name, immediately, and only pairs within the same subgraph (a patch nested inside a node).

Data Sub Receive

ParameterRangeDefaultDescription
Wiretext(none)Wire name. Must match the Data Sub Send in the same subgraph.

Inputs: Wire (the wire name as text; a plain number also works for older patches). Outputs: Out (the data message received from the local wire).


CV Order

Makes sure a control value and a trigger reach the next node in a chosen order. It fixes timing problems where, say, a sequencer's pitch and its note-on need to land at exactly the right moment. It passes both through but nudges one slightly later. Set the Order so a later oscillator or envelope sees the new value before the trigger, or the trigger before the value, whichever you need.

CV Order

ParameterRangeDefaultDescription
OrderCV -> Trigger / Trigger -> CV / Same SampleCV -> TriggerWhich path arrives first.
Delay (samples)0 - 321Sample offset used for the selected ordering.

Inputs: CV In (the CV or value to pass through, accepts float, int or bool), Trigger In (the trigger or gate to pass through, accepts an event, float, int or bool). Outputs: CV Out (the CV, optionally delayed relative to the trigger), Trigger Out (the trigger, optionally delayed relative to the CV).


Event Value

Re-orders the two parts of an incoming message: the trigger (Event) and the number (Value). You choose which one reaches the next node first. Handy when a chain needs to fire something and then receive the number, or receive the number and then fire.

Event Value

ParameterRangeDefaultDescription
OrderEvent -> Value / Value -> EventValue -> EventWhether the Event or the Value is emitted first.

Inputs: In (the message to split into Event and Value), Order (chooses the output order, 0 = Event then Value, 1 = Value then Event). Outputs: Value (the original incoming value; nothing is sent if the input was an Event), Event (one Event for each incoming message).


Pass

A cable in a box. Whatever goes in comes straight back out, unchanged, triggers (Events) included. Useful as a meeting point for cables, to keep your wiring easy to follow, or as a stand-in while you are still building a patch.

Pass

Inputs: In (any message). Outputs: Out (the same message as the input).


CV Pass

A cable in a box for control signals. Whatever control signal goes in comes straight back out, unchanged, at full audio speed. It is the CV counterpart to Sig Pass (audio) and Pass (data): use it as a tidy meeting point to gather or fan out CV connections, or as a stand-in while you are still building a patch.

CV Pass

Inputs: In (CV, stream-capable). Outputs: Out (the same CV signal as the input).


TypeSplit

Takes one incoming message and breaks it into separate outputs by type (Event, Int, Float and Any), then sends them in an order you choose. Useful for turning a single value into a little sequence of events, or whenever a later chain needs the outputs to fire in a particular order. The order is checked every time a message arrives, so any change takes effect right away.

TypeSplit

ParameterRangeDefaultDescription
OrderEvent-Int-Float-Any / Any-Float-Int-Event / Any-Event-Float-Int / Event-Any-Int-FloatEvent-Int-Float-AnyThe order the outputs fire in. Values outside 0 to 3 are clamped.

Inputs: In (any message, fires all outputs in the selected order), Order (sets the order preset by sending 0 to 3; stream-capable; an Event does nothing). Outputs: Event (always an Event), Int (input converted to Int, Event becomes 0), Float (input converted to Float, Event becomes 0.0), Any (the original message unchanged).


MNodes Documentation