Skip to content

More scales/modes: Whole Tone, Gypsy Minor, Phrygian Dominant #9

Description

@philoking

Summary

Widen the scale palette in js/theory.js. Modular Riffs ships 12 scales/modes; add a few more colours cheaply — Whole Tone, Gypsy / Hungarian Minor, and Phrygian Dominant to start — since they're just interval arrays.

Why it fits

Scales are pure data here (SCALES = { key: { name, intervals } }), and every note choice is already filtered to the scale's pitch classes, so new scales propagate to all four parts for free. These three open up exotic, cinematic, and Mediterranean/Middle-Eastern flavours the current church-mode + pentatonic set can't reach.

Proposed scope

Data (js/theory.js)

  • wholeTone[0, 2, 4, 6, 8, 10]
  • gypsyMinor (Hungarian minor) — [0, 2, 3, 6, 7, 8, 11]
  • phrygianDominant[0, 1, 4, 5, 7, 8, 10]
  • (Optional later: a couple of wider-interval experimental scales.)

Validate chord building

  • Chord stacking builds thirds within the scale (js/theory.js). Confirm degenerate cases behave: Whole Tone has no diatonic 3rd/7th distinction (every triad is augmented) — make sure the stacker and the pentatonic special-case path don't choke, and that the arp still spells something musical.
  • Spot-check roman-numeral instantiation and the borrowed-chord "lead borrows the chord's scale" logic against the new scales.

UI

  • They appear automatically in the scale dropdown (data-driven), so mostly just labels.

Where

js/theory.js (data + chord-build sanity), quick check in js/generator.js (arp/pad over symmetric scales).

Done when

  • The three scales are selectable and constrain all parts to key.
  • Chord building and arpeggiation produce musical output (no errors) for symmetric/exotic scales.
  • Existing scales unaffected.

Open questions

  • For Whole Tone, should chords fall back to a sensible default (aug triads / dom7♯5) rather than the generic third-stack?

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions