Signal Source

Shipping
signal_source

Forwards workspace signal from memory registry by handle ID

Signature

Outputs

  • signalAny

Description

Signal Source is a terminal input node that forwards a signal held in the engine's workspace MEMORY_REGISTRY, resolved by a runtime handle ID. It has no input ports and a single signal output of type Any — the emitted value is exactly whatever the referenced registry slot currently holds (Signal, Scalar, Matrix, SignalBundle, and so on). It is the generic sibling of the specialized live sources (audio_source, gbf_source, hardware_source), which bind fixed per-channel handles; signal_source instead exposes an arbitrary named workspace entry.

The handle is runtime-bound, not a declared parameter: nothing is configured on the node face itself, and the binding is supplied by the surrounding graph/capture control. Resolution is non-blocking — a missing, unbound, or idle handle yields an empty Signal rather than raising an error, so a partially wired or not-yet-populated workspace never faults the graph.

Signal Source is a pure passthrough: it neither transforms samples nor rescales values, so physical units and per-sample uncertainty ($\sigma$) are carried through byte-for-byte from the registry entry. Timestamps, sample rate, and unit metadata are preserved unchanged.

The node is declared stateless — it holds no internal buffer and computes no history. Any apparent state (the changing contents of the referenced slot) lives in the registry, not in the node.

Examples

Forwarding a workspace entry

A capture routine writes a decimated acceleration trace into workspace slot accel_raw. A signal_source bound to that handle emits it downstream unchanged, preserving unit m/s^2 and its channel:

signal_source[accel_raw] --> smoothing --> fft

If accel_raw has not been populated yet, the output is an empty Signal and the chain simply produces no samples this evaluation.

Type-agnostic reference

Because the output port is typed Any, the same node can forward a Matrix on one run and a Signal on another depending on what the bound handle holds. Downstream nodes see the concrete CaptyseValue and dispatch accordingly.

Applications

  • Re-injecting a previously captured or intermediate workspace buffer into a live processing graph without recomputing it.
  • Decoupling data acquisition (which populates the registry) from analysis graphs (which read it), enabling reusable pipelines.
  • Bridging externally produced results — e.g. a scripted import or a prior simulation run stored under a handle — into node-based post-processing.
  • Building parameterizable dashboards where a single control rebinds many sources to different workspace entries.

Neat

Its output port is typed `Any`, so a single Signal Source can forward Scalars, Matrices, or full SignalBundles interchangeably — the type is determined entirely by the registry slot, not the node.

It is one of the few source nodes with an empty `param_specs`: the handle is injected by capture/runtime control rather than edited on the node, so two identical-looking nodes can reference different data.

Known issues

An unbound, missing, or idle handle silently yields an empty Signal instead of an error, so a mistyped handle ID produces no output rather than a diagnostic — verify the binding if a downstream chain is unexpectedly empty.

See also

sourceworkspaceregistryhandlepassthrough