Guide
Inline views
Piano roll, punch card, and other event views read the score; scope, frequency scope, and spectrum read measured audio.
Inline views sit in a pipeline next to the code they describe. Some read the score and some read measured sound; this page covers both kinds and the difference between them.
Pattern views query temporal events. Signal views analyze measured audio. One kind of view can work while the other is unavailable, and a signal view never substitutes a generated waveform for a missing signal.
Both views allocate one row per pitch or sample identity actually present, rather than a row for the entire MIDI range. Notes are solid rectangles whose horizontal extent represents duration; the underlying grid is outlined.
piano-rollkeeps the note grid stationary and moves the playhead.punch-cardmoves notes from right to left beneath a fixed playhead at the left edge.:gridspecifies edit/insertion resolution.:note-lengthspecifies the initial duration of newly inserted notes independently of that resolution.
(d1! (>> (notes "f3 ab3 c4 eb4")
(s "psin")
(piano-roll :cycles 2
:grid 16
:note-length 1/8
:labels t)
(punch-card :cycles 2
:grid 8
:labels t)))The inspector’s own piano roll is separate from these inline views: for a stem-stack, it keeps one row per lane in authored order, labelled with the stem type, or type/id when a lane’s explicit :id differs.
- Painting stays in the row where the drag began. Its initial cell determines whether the drag adds or removes cells.
- Plain painting edits source. Command painting evaluates the associated form once on release.
- Dragging a note’s trailing edge changes that note’s length.
Inline editing works on supported source representations, such as literal mini-notation. A pattern produced by an arbitrary Lisp generator cannot always be edited this way.
pitch-wheel, event-spiral, and word-fall offer other event-based readings.
The :observe keyword chooses what a view reads:
| Value | Observes |
|---|---|
:observe :here | The pattern at the view’s pipeline position |
:observe :final | The installed result |
scope, frequency-scope, and spectrum read measured signal taps.
:tap :inputis the shared captured input.- An optional SuperDirt orbit-tap service exposes explicitly selected dry orbit measurements. Orbit taps are dry mono windows of the whole orbit, so stems that share an orbit are measured together, and a tap is not the final stereo output.
(d1! (>> (notes "f3 ab3 c4 eb4")
(s "psin")
(scope :tap :input
:samples 1024)
(frequency-scope :tap :input
:min-hz 30
:max-hz 16000
:mode :line)))The pattern produces events either way; the signal views draw from a configured, current return signal.
Visuals can use the same two sources of information; see two forms of linkage.
Source references
Repository-relative paths in the Mora source where these mechanisms are implemented.
-
src/studio/piano-gestures.lisp -
src/studio/pianoroll-data.lisp -
src/studio/render-inline-*.lisp -
src/analysis/ -
src/runtime/orbit-taps.lisp