Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
150 changes: 143 additions & 7 deletions MANUAL.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ no installation. This manual is also built into the app (Setup > Manual).
Snap, Setup.

**Tab bar:** BUS 1–4 and IN (focus view per bus), PLAY (playing surfaces),
PTN (patterns, autopilot, looper). The LEDs in the bus tabs always show which
effects are on.
PTN (patterns, autopilot, looper), JAM (your own pinned controls). The LEDs
in the bus tabs always show which effects are on.

## Focus view: one bus, six faders

Expand All @@ -47,6 +47,14 @@ effects are on.
- **‹ / ›** step through favorites (falling back to recent/all).
- **RND** randomizes the continuous parameters (LEVEL/SEND/GAIN are spared);
right afterwards the button becomes **UNDO** for 6 seconds.
- **SAVE** captures this bus's current effect + all six values + on/off as a
JAM bus-scene pad in one tap — opens the JAM editor pre-filled (label
already set, mode defaults to Momentary) so you just confirm or tweak it.
- **Scene sidebar:** any bus-scene pads captured for the bus you're looking
at appear as small buttons on the left of the faders — hold to preview,
release to return to exactly what was playing before (including the
effect itself, not just its values), no need to leave Focus. A small
**✎** on each one opens its editor (rename, re-capture, delete).

## Overview

Expand All @@ -58,11 +66,19 @@ view.
## Choosing effects

Tap the effect name to open the picker: "Recent", "Favorites" (star an entry
by **holding** it), then categories with a jump bar. Note: **the three bus
types have different effect sets** (Roland's spec) — e.g. Sync Delay,
Isolator and Resonator only exist on BUS 3/4, the voice effects only on
by **holding** it), then categories with a jump bar — RECENT and FAVORITES
get their own jump-bar shortcuts too. Note: **the three bus types have
different effect sets** (Roland's spec) — e.g. Sync Delay, Isolator,
Resonator and Filter+Drive only exist on BUS 3/4, the voice effects only on
INPUT.

Favorited effects for the bus you're looking at also show as small chips
right under the header in Focus view — a one-tap shortcut that skips the
picker entirely. Scrolls sideways if you have more than fit. Tapping a chip
always lands with EFX off, even if it was on before — the point is loading
an effect to dial it in, not punching it in live; hit EFX yourself once
you're happy with it.

**Direct FX (BUS 1/2):** the five DFX slots are freely assignable on the
device. Mirror the assignment in Setup ("Direct FX assignment") — the faders
then show real parameter names (e.g. "DFX3 · Sync Delay") and values are
Expand All @@ -79,15 +95,52 @@ Eight slots for the full state of all five buses (effect, values, on/off).
**Tap loads** (an empty slot saves), **hold saves** and lets you type the
name right in the slot, ✕ deletes. The panel shows what would be saved;
each slot lists its content ("1● Tape Echo · 3○ Lo-fi": ● on, ○ off).
**Export/Import:** JSON for backups and for moving snapshots between
devices or sharing them.

**Recipes:** the same full 5-bus shape as a snapshot, but *typed in*
instead of captured from live state — and not capped at 8. Meant for
transcribing chains from recipe cards/packs (the kind that list an effect
and six control values per bus) straight into the app, no fader-dragging
required. Open via **Library** in the top status bar (visible from any
view) or **"Open Recipes"** below the snapshot grid — same panel either
way. **+ New Recipe** (or ✎ on an existing one) opens the editor: pick an
effect per bus from a dropdown, and the value fields that appear are
labeled with that effect's real parameter names and units — type what's
printed on the card (dB, ms, %, a note value, "L12"/"R12"/"CTR" for pan,
"80:20" or "80/20" for a balance split) and it converts to the right
underlying value automatically, the same math the app uses to display it.
Tap a saved recipe to load it onto all 5 buses, same as a snapshot. Ships
with six factory recipes transcribed from
[electronoir](https://electronoir.gumroad.com) (@noirtdc) FX Recipe
cards — House Chord Synth, "Quack" Bass, Risers, Bass Destroyer, Techno
Kick Fattener, and Top Loops Sauce. A few of the source cards give a
*range* for a field ("10 to 20") rather than one fixed number, meant as a
live-tweak/automation target rather than a strict setting; those load
with the range's midpoint as a starting value, same as everything else
in a recipe — fully editable afterward.

**Export/Import:** JSON for backups and for moving your whole setup —
snapshots, JAM, XY combos, *and* recipes — between devices, e.g. editing
on a laptop browser and bringing it to your phone: Export, copy/share the
JSON, paste it into the same field on the other device, Import. Import
overwrites matching snapshot slot numbers and replaces JAM/XY
combos/recipes entirely; tap Import again within 8 seconds to undo.

## XY pad and LFOs

**XY:** both axes freely assignable (bus + control). Absolute Kaoss-style
behavior: position = value. **MOMENTARY** springs both values back to the
pre-touch state on release.

**PRESETS:** one-tap axis assignments. **Templates** are curated pairs for
specific effects (e.g. "Isolator — LOW × HIGH", "Tape Echo — TIME ×
FEEDBACK"), built from their real parameter names — picking one asks which
bus (only buses that actually have that effect are offered), switches that
bus to the effect if it isn't already loaded, and assigns both axes. **Your
combos** are your own saved X/Y pairs: dial in an assignment, "Save current
X/Y as…", rename with the ✎, tap the name to recall it later, ✕ to delete.
Unlike templates these just re-point to whatever bus+slot you saved, no
effect-switching involved.

**LFO row:** four modulator slots (chips 1–4; orange dot = running). Per
slot: target, waveform (SIN/TRI/SQR/SAW/**RND** = drift between random
anchors), rate in note values (4/1 to 1/16), depth. The time source shows on
Expand Down Expand Up @@ -124,6 +177,89 @@ at the center. Slot 4 comes preconfigured as a slow drift.
DEL, UNDO/REDO, STOP ALL, tempo reset, BPM fader). The device must be in
looper mode itself.

## JAM: pinned controls

A tab of your own pads and faders, independent of whatever effect happens to
be loaded. Two kinds of control per slot:

- **SP-404 bus param:** pins one of a bus's six control slots (e.g. "BUS 1 ·
CTRL 1") under a name you choose, so it stays visible and adjustable no
matter which effect is currently selected on that bus — this is how a
Faderfox/TouchOSC-style fixed layout (HPF, LPF, Stopper, ...) works: the
slot always sends the same CC, its effect depends on whatever's loaded.
- **Raw MIDI:** any channel/CC/Note/Program Change to any currently connected
MIDI output — not just the SP-404. Use this to reach a second device (e.g.
an MC-101) from the same page. CC controls are two-way: turning the actual
hardware knob on that channel/CC updates the app too, from *any* connected
MIDI input (not just the one selected as the primary SP-404 input) — so a
second device just needs to reach the browser somehow, either connected
directly (e.g. the MC-101 over its own USB) or passed through another
device, whichever your setup allows.
- **Bus scene:** captures one bus's full state (effect + all six values +
on/off) into a pad. Pressing always switches EFX **on** regardless of
what was captured (the point is to hear it), even if the bus was off when
you captured it. **Momentary** mode holds the captured scene while
pressed and, on release, always restores exactly what that bus was doing
the instant before you pressed — including the effect itself, not just
its values, and not back to some fixed old state but to wherever you'd
since moved it, so it works mid-transition. Anything you tweak while
holding is just a preview; release always discards it and goes back.
**Toggle** mode applies on the first tap, restores on the second. Use it
to punch in a prepared sound (e.g. an isolator with only the mids up) for
a bar, then let go. To set one up: dial in the sound live on the bus,
open the control's editor, pick **Bus scene**, choose the bus, tap
**Capture** — or just tap **SAVE** in the Focus header to do all of that
for the bus you're currently looking at in one step.

**CLEAR** (top right) removes every control in JAM immediately — no dialog
(some Web MIDI wrapper browsers don't support them reliably); the button
becomes **UNDO** for 6 seconds instead.

**EDIT** (top right) turns the grid into an editor: tiles show a pencil
badge, tap one to change its settings or delete it, or drag it to a new
position to reorder. **Swipe a tile left** past about half its width to
arm delete (turns red with a 🗑 icon) — release to remove it, same
instant+UNDO behavior as CLEAR below. Tap **+** (outside edit mode) to add
a new control. Fader values and pad on/off state are remembered per slot,
same as everywhere else in the app (`localStorage`, nothing is ever sent
on load).

**SELECT** (top right) turns the grid into a multi-select picker: tap
tiles to check them (a bar appears above the grid showing how many are
selected), then either type a **channel** number and tap **Apply** to
set that channel on every selected raw-MIDI control in one go (bus params
and bus scenes don't carry a channel, so they're skipped), or tap
**Delete** to remove all selected tiles at once — again instant with a
6-second **UNDO** via CLEAR. Handy for retuning a whole preset (e.g. an
MC-101 template) to different track channels without opening each tile.

**PRESETS:** factory templates that add a set of controls in one tap, built
from the target device's actual MIDI implementation chart rather than
guesswork. Currently ships one: **MC-101 — 4 tracks × Sound/Filter/Mod/FX**
(CC 80–83, the four hardware knobs, one row per track, in the device's own
left-to-right knob order). Picking a preset
asks which connected output to route it to (so it doesn't silently reuse
whatever the SP-404 is on), then appends the controls to your existing JAM
grid — nothing is removed. Track channels default to 1–4; verify against
the device's own Track MIDI Channel setting (SHIFT + TRACK SEL on the
MC-101) since every control's channel is still editable afterward if it
doesn't match.

## Display: theme and fader orientation

Setup has two display toggles:

- **Theme:** dark (default) or light.
- **Horizontal faders:** switches the Focus-view faders from a column of
vertical bars to full-width horizontal strips stacked top to bottom —
useful on a wide/landscape tablet where a sideways drag has more travel to
work with than a narrow vertical one.
- **JAM style:** bars (default) or rotary knobs for every fader-type control
in the JAM tab — same drag behavior (relative drag, fine-tune pull,
double-tap default, wheel ±1), just drawn as a balance-style dial: pointer
straight up at the center value (64), tilts right and fills orange toward
127, tilts left toward 0.

## Tempo and Ableton Link

The BPM display reads MIDI clock from **any** connected port — AUM, Ableton
Expand Down
28 changes: 24 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,34 @@ HTML file, no installation, no dependencies, no account.
with real parameter names from the reference manual, six touch faders with
relative drag and fine-tune pull-out, bidirectional sync with the hardware
encoders.
- **Snapshots** (8 slots) with JSON export/import.
- **XY pad** (Kaoss-style, freely mappable, momentary spring-back) and
**four beat-synced LFOs** (incl. random drift), clocked by incoming MIDI
clock or tap tempo.
- **Snapshots** (8 slots) plus an unlimited **Recipes** library (Library
button, top bar) — type in a full 5-bus chain directly (e.g. from an
SP-404 recipe card), with each field labeled in the effect's own real
units so a card's printed values go straight in. Ships with six factory
recipes from [electronoir](https://electronoir.gumroad.com)'s FX Recipe
cards. JSON export/import for both.
- **XY pad** (Kaoss-style, freely mappable, momentary spring-back) with
**presets** — curated axis pairs for specific effects (built from real
parameter names, auto-switches the bus's effect if needed) plus your own
saved combos — and **four beat-synced LFOs** (incl. random drift), clocked
by incoming MIDI clock or tap tempo.
- **Play surfaces:** chromatic keyboard (CH 16), scale pads with isometric
Move-style layout, vocoder keyboard with pitch bend (CH 11), and a pad
board incl. a freely assignable custom layout.
- **Pattern grid** with a quantized markov autopilot, plus a looper remote.
- **JAM tab:** your own pinned pads/faders — SP-404 bus parameters that stay
put regardless of the loaded effect, raw MIDI (any channel/CC/Note/PC,
two-way for CC controls) to any connected device (e.g. a second synth),
or a captured **bus scene** (a whole bus's state momentarily recalled on
hold, reverting to whatever was playing on release). Drag to reorder or
swipe-to-delete in edit mode, multi-select to batch-set a MIDI channel or
delete several at once, CLEAR to start over. **Presets** add a whole set
of controls in one tap, built from real MIDI implementation charts (ships
with an MC-101 4-track × Sound/Filter/Mod/FX template, in the device's own
knob order).
- **Light/dark theme**, an optional horizontal fader layout for wide
tablets, and balance-style rotary knobs as an alternative to bars for JAM
controls, all in Setup.

## Requirements

Expand Down
Binary file added docs/pr-assets/focus-favorites.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/pr-assets/focus-scenes-horizontal.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/pr-assets/jam-grid-iphone.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/pr-assets/jam-knobs.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/pr-assets/light-theme-jam.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/pr-assets/xy-presets.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading