Concept

Sound, image, and shared time

How audio patterns and visual operators share one temporal algebra, and why event-linked visuals, measured audio, and post-processing remain separate layers.

Mora brings musical patterns, programmed visuals, and measured audio into one environment. Audio and visuals can share temporal structure while remaining distinct sources of information. This page explains what is shared, what stays separate, and why.

More than audible output

A performer edits code to change relationships in time: which sounds occur, how phrases develop, how visual structures respond, and how one part interacts with another. The code is an active part of the performance, not merely a script started beforehand. Neither live coding nor Mora is limited to audible output.

Musical patterns, programmed visuals, and measured audio are related but distinct. A visual can follow the same symbolic events as the music; it can also respond to actual audio analysis. A note event is not itself a measurement of the sound that finally reaches the speakers.

A shared temporal algebra

Audio patterns and visual operators can use common temporal operations. A visual operator is also a pattern, so temporal transformations can act on its behavior.

The shared >> operator composes temporal patterns and visual operator trees. It supports both temporal pipelines and visual input threading under defined ordering rules. See Pipelines and composition for temporal pipelines and Shader composition for visual chains.

A shared algebra does not mean that every sound parameter becomes a shader parameter, or that every backend has the same capabilities.

Three distinct layers

Co-emission, measured audio analysis, and ordered image post-processing can appear in the same piece, but they are different mechanisms:

LayerWhat it works from
Co-emission (co-emit)The actual events of a pattern, linked to visual information through shared metadata.
Measured audio analysisA separate signal path: captured audio, for waveform- and spectrum-driven behavior.
Ordered post-processing (:post)The image after visual composition, processed by passes in written order.

Explicit :post chains apply post-processing in written order. ASCII rendering, pixelation, glow, scanlines, and other passes are effects to compose, not merely preset names. See Ordered post-processing.

These mechanisms let artists build their own visual instruments.

Event-linked and spectrum-reactive visuals

An event-linked visual and a spectrum-reactive visual solve different problems. The first follows the score’s event structure; the second responds to measured audio. A composition can use either or both.

The two also depend on different inputs. A token highlight or event visualization follows the installed pattern. A scope or spectral visual requires captured audio. One can work while the other is unavailable. See Machine listening for the measured path.

One channel form, several facets

The unified dN! channel form can expose audio, visual, and post-processing facets together while preserving their separate ownership. An omitted visual or post-processing facet is not an instruction to remove it: omission preserves the current facet. See Multimodal channel forms.

Re-evaluation and source memoization distinguish closed literal construction from dynamic Lisp expressions, so arbitrary code inside a form can run again when the form is re-evaluated.

Other modalities and output families

The broader language also includes the following families, each with its own backend and preparation requirements:

  • Visual-operator trees and shared >> composition; event-linked co-emit/by relationships; independent visual channels.
  • Ordered :post image-effect chains after visual composition. Explicit chains replace a renderer’s built-in post effects; omission preserves the current facet.
  • Managed instruments, audio tables, ordered insert effects, note-local envelopes and LFOs, named shared modulators, ducking, and owned audio submixes. See SuperDirtMora companion.
  • Measured PCM, spectrum, and machine-listening features through cl-mltk. Measured orbit taps are opt-in, and an orbit is not automatically an isolated stem.
  • MIDI/MPE, generic OSC, and serial output; held MIDI keys and SysEx; optional gamepad, motion, and desktop inputs. See MIDI and other outputs.
  • Optional MQTT and Csound adapters, dormant until explicitly configured and started.

Composition, not a fixed vocabulary

Mora’s Tidal-derived pattern notation is a compact semantic layer for musical time. It is useful precisely because it is familiar, expressive, and compositional. The notation sits inside a language whose objects and protocols remain open to extension. See What remains after evaluation.

Influences

Mora’s influences are distinct, and each contributes something different:

  • TidalCycles supplies an important temporal and notational lineage.
  • Common Lisp and CLOS supply the working environment and extension mechanisms.
  • The Art of the Metaobject Protocol and Ploy’s open-interpreter approach inform the architectural ambition, within the CLOS and open-implementation tradition.
  • Christopher Alexander’s pattern languages inform an interest in systems that can be altered meaningfully in their situation of use, and the aspiration that a language can remain open to situated alteration by its users.

The connection to Alexander is a design commitment. A programming language for temporal patterns is not automatically a pattern language in his sense.

Source references

Repository-relative paths in the Mora source where these mechanisms are implemented.

  • src/mini/transforms.lisp
  • src/mini/clauses.lisp
  • src/mini/d-bang-bangs.lisp

Documentation

Search the documentation

Results update as you type. Use the up and down arrow keys to choose a result and Enter to open it.