Skip to content

v1.2.0 — Palestrina Proteus

Choose a tag to compare

@github-actions github-actions released this 12 May 00:00
· 300 commits to main since this release

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_mode and counterpoint_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).
  • voiceCount now restores before voicePosition so the backend doesn't clamp Bass→Alto on startup.
  • SETTINGS_DEFAULTS are 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.app from Terminal.

Full diff: v1.1.1...v1.2.0