v1.2.0 — Palestrina Proteus
Contrapunk v1.2.0 — Palestrina Proteus
The Lanes & Voice Library release. This is the largest UX overhaul since the harmony engine itself — the Companion is now a real multi-lane container, voices are first-class named presets, and species-counterpoint actually does species-counterpoint.
New: dedicated Counterpoint Lane
A separate Lane sitting alongside the canon under the same Companion master. Unlike the canon's 1-input → 1-output model, this Lane subdivides time per Fux species:
- Species 1 — one harmony note per cantus note
- Species 2 — strong-beat consonance + half-beat passing tone (2 emissions per cantus)
- Species 3 — four emissions per cantus at the quarter-beat subdivisions
- Species 4 — syncopated entry (half-beat offset, suspension-ready)
Each species uses the existing CounterpointState for pitch scoring (no parallel 5ths/8ves, varied intervals, etc.) plus its own scheduling. Configurable Direction (above / below) and Interval (-7 to +7 diatonic degrees).
New: Voice Library tab
A named-preset library accessible from the new Voices tab between Companion and Chain. Built-in presets cover SATB chorale roles (Soprano / Alto / Tenor / Bass), plus Counterpoint Solo, Bach 4-Voice Chorale, Pass-Through Echo, and Diatonic Thirds.
- Create / edit / duplicate / delete user presets.
- Each preset bundles harmony mode + scale + voice-leading + octave mode + counterpoint species + voice count + voice position.
- Canon voices can bind to a preset (
★icon on user presets, plain name on built-ins). Editing the preset in the Voices tab live-updates every canon voice bound to it.
Companion tab: lane-card restructure
The Companion body is a vertical stack of peer Lane cards instead of a buried-config layout:
COMPANION HEADER [master ON/OFF]
ENGINE pill
CANON LANE [ON] · forms rail + timeline + voice cards
COUNTERPOINT LANE [ON] · species + direction + interval
Active lanes light up magenta. Adding future Lane types (Drum / Drone / Looper / etc.) slots in as additional cards.
Canon Lane improvements
- Per-voice mini-engines so stateful modes (StrictCounterpoint, ContraryMotion, BachChorale) maintain independent history per canon voice instead of cross-contaminating a global engine.
- Knobs replace sliders for delay + speed; range expanded to 0..16 beats / 0.125..8× speed.
- Draggable timeline dots — grab a voice's dot and drag it horizontally to set delay (Shift = free, default = 16th-note snap).
- Cascade "Relative" picker per voice — V2 can harmonize off V1's emitted subject (fugue chains).
- User-creatable canon forms with save / delete in the FORMS rail; persisted to localStorage.
- 8 showcase built-in forms — Bach Fugue, Modal Cascade, Pure Counterpoint, Augmentation / Diminution Canons, Functional Pillar, Barry Harris Stack, Mensuration Quartet, Contrary Mirror — each one wired to exercise the engine, not just transpose unison.
- Beat-phase pipe-through: canon voices using Species 2/3/4 in their Mode dropdown now actually run the species rules. Before this fix they silently fell back to Species 1.
Harmony tab
- Mode dropdown collapses Counterpoint into its four species variants (1:1 / 2:1 rules / 4:1 rules / syncopated rules). One click sets both
harmony_modeandcounterpoint_species. The separate Species + Strictness card is gone — Strictness is always Strict. - Shared composite-mode helper means the Harmony tab, Companion voice cards, and Voices tab editor all source the Mode dropdown from one place.
FTUX defaults
A fresh install now plays counterpoint from the first note:
- Transport auto-plays on launch.
- Reverb on at a modest mix.
- Computer-Keyboard virtual input auto-routes when no MIDI device is saved.
- Companion + Canon + CounterpointLane all enabled by default.
- Global mode is StrictCounterpoint with Palestrina voice-leading + Octave Spread + 4-voice SATB and the player as Bass.
- Default canon form is the new Pure Counterpoint (4 voices in strict counterpoint, cascading 3rds 1b apart).
Bug fixes
- Counterpoint Lane no longer hangs notes when the player releases a cantus note before scheduled passing tones fire (Species 2/3 stretto case).
voiceCountnow restores beforevoicePositionso the backend doesn't clamp Bass→Alto on startup.SETTINGS_DEFAULTSare actually applied to the backend + UI on fresh installs (previously the restore path early-returned when there was no saved payload).- Entry-timeline beat labels read consistently (
1 2 3 4 1 2 3 4 1) instead of mixing bar numbers with beat numbers. - "Counterpoint" mode label no longer doubles its "(Species 1)" suffix when the composite-mode dropdown applies its own suffix.
Platform support
macOS Intel + Apple Silicon universal .dmg is built by CI and attached below. Minimum macOS 11.0 (Big Sur), which covers Monterey 12.x on 2015+ Intel Macs.
- First launch on macOS: the .dmg is unsigned. Right-click the app → Open, or run
xattr -dr com.apple.quarantine /Applications/Contrapunk.appfrom Terminal.
Full diff: v1.1.1...v1.2.0