/
BPM
Duration
Click the staff to add a note · click a note to select it · drag a note up/down to re-pitch it · ↑/↓ nudge pitch · ←/→ move selection
Marks
Chord
Click the lane above the staff to add/replace a chord (snaps to the nearest beat) · click a chord to select it
Ready. Autosaved ✓ 0 notes

Selected note(s)

Click a note on the staff to edit it here.

Selected chord

Click a chord in the lane above the staff to edit it here.

Key, tempo, time & rehearsal marks

Lyrics

Words go on the selected stave (or the melody), one syllable per note; rests are skipped. Split a word with hyphens (lit-tle). An underscore holds a syllable over another note: are__ or a separate _. To type note by note, click a note and use the Lyric box in Selected: Space or Tab moves on, - ends a syllable mid-word, _ holds, Enter finishes (or press Enter on a selected note to start).

Melody text

Typing reference
Each note: letter + optional accidental (# b n) + octave (0–8, middle C = C4) + duration (w h q e s; s = sixteenth) + optional dot (.) + optional /lyric.
Example: C4q/Twin C4q/kle G4q/lit G4q/tle A4h./how G4e F4e/der F4h/
Omit accidental to use the key signature's default. Omit octave/duration to repeat the previous note's. Rests: Rq, Rh.
Triplets: wrap three notes in parentheses followed by 3, e.g. (C4e D4e E4e)3.

Chords

Each word is a chord symbol: root (A–G, optional #/b) + optional quality (m, dim, aug, 7, maj7, m7, dim7, sus2, sus4 — blank means major), e.g. C G7 Am Fmaj7. This replaces all chords, one per measure, in order. For anything off the downbeat grid, click the chord lane directly instead.

Suggest chords guesses one diatonic chord per measure from the current key and whatever melody notes fall in that measure — a starting point to edit, not a final answer. Chords from voices instead reads every stave's notes and names the chord beat by beat (or per half measure or measure, from the menu beside it), using major, minor, seventh, diminished, augmented and sus chords and favouring the lowest voice as the root.

About

Harmonizer. Melody entry & playback: whole/half/quarter/eighth notes, dots, and simple (3:2) triplets — no bar-line math or beaming beyond eighths, by design, since this is for roughing out vocal lines rather than engraving a score. Click the staff to add a note, or drag an existing notehead up/down to re-pitch it (with a mouse, a pen, or a finger on a tablet). Treble, Tenor (treble clef sounding an octave lower, marked with the small "8"), and Bass clefs are available. Chords: a chord lane above the staff, click any beat to place or replace a chord (a chord holds until the next one), or Suggest chords for a diatonic guess from the key and melody, played back under the tune. Use the Staves setting in the header to show 1–8 vocal parts (4 defaults to SATB); each stave's Part and Clef can be reassigned above the staff, and the Melody radio there picks which one holds the tune, translating its octave to fit that part when it's not the top line. Generate parts fills the other staves with a close-harmony draft from the melody and chords — each voice keeps its own rhythm, holding through ornamental notes rather than restriking every beat — and every note — melody or generated — can be selected (including multi-select and range-select), dragged, nudged, swapped between staves, or bumped an octave; hand-editing a generated note locks it so the next Generate parts leaves it alone. Save your work as .json (to reopen here), .musicxml (to open in real notation software) or .mid (for rehearsal apps and DAWs).

Piano playback uses the Salamander Grand Piano samples (Alexander Holm, CC BY 3.0), full 88-key range, loaded from harmonizer-piano-samples.json in the same folder as this file. The Choir Aahs, Organ, Strings and Flute sounds (3.0) come from GeneralUser GS by S. Christian Collins, one file each (harmonizer-bank-choir-aah.json, -organ, -strings, -flute), loaded only when a stave plays them. Keep these files together, and open this page through a local server rather than double-clicking it — like the portfolio site, file:// pages aren't allowed to fetch a sibling file. python3 -m http.server in that folder works fine.

Work autosaves to this browser, per song — use the Song dropdown in the header to switch between songs in progress, or start another with New. Use Save → as .json / Open… to keep a song as its own file, or Export library in Settings to back up every song at once. See ? Help in the header for a quick-start guide, or the full user guide.