NOW
UNTITLED SCORE
VOL
75
STANDBY
EMPTY TIMELINE — TONE ADDS ONE, OR TYPE ROWS IN THE CODE BELOW
CODE
—
sidebar: click a row = load here · ▶ = audition only · the code below edits live ·
ROLL EDITOR
click a block = select + audition · drag ↕ pitch (snaps to semitones) · drag ↔ timing — it slides through gaps and pushes neighbors on collision · drag edges = tone length · first tone dragged right creates a lead-in delay
COPY / PASTE
Ctrl+C copies the selected tone — frequency, length and its trailing gap · Ctrl+V pastes it after the selection (or at the end) · the clipboard survives switching presets — lift a tone from one callsign, drop it into another
CODE PANEL
Kotlin, live both ways: dragging rewrites the code instantly; typing
intArrayOf(f, dur, pause) rows redraws the timeline · the val name you type is kept · // lead-in: N is honoredADD TONE
new 440 Hz tone lands at the start of the timeline — drag it up/down/left/right into place, stretch its sides
TRANSPORT
SPEED 0.5×–4× scales playback · LOOP forces endless repeat · REPEAT in the meta row sets the pattern's own repeat · VOL slider = monitor level
DOCK — SCORE
"=== NAME" starts a preset · lines: FREQ DUR PAUSE · directives: title / repeat / volume / attack / release / lead · comments # or //
DOCK — KOTLIN
paste
val x = arrayOf( intArrayOf(...) ) — each val becomes a preset named after it · "ring" in the name auto-sets loopFAVORITES
star moves an entry from the bank · per-entry TG (Kotlin copy) / WAV / OGG · COPY TG = all keepers as Kotlin · COPY ALL = score batch · loops export LOOP CYC cycles
KEYS
Space play/stop · Ctrl+C/V note copy/paste · Del removes selected tone · ⌘/Ctrl+Enter play · Esc stop + clear selection