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).letter + optional accidental (# b n) + octave (0–8, middle C = C4) + duration (w h q e s; s = sixteenth) + optional dot (.) + optional /lyric.C4q/Twin C4q/kle G4q/lit G4q/tle A4h./how G4e F4e/der F4h/Rq, Rh.3, e.g. (C4e D4e E4e)3.
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.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.Quickstart → · Open the full user guide →
Click anywhere on the staff to drop a note of the currently-selected duration at that pitch. Pick the duration first from the Duration buttons (whole/half/quarter/eighth/sixteenth), and toggle Dot or Triplet before clicking if you need one. Prefer typing? The Melody Text box on the right takes a shorthand like C4q D4q E4q F4h. — letter, optional #/b, octave, duration, optional dot, optional /lyric — see its own "Typing reference" for the full syntax.
The Marks row under Note entry works on the selected note(s): Tempo ▾ (tempo words like Allegro with their usual metronome mark, rit. / rall. / accel. over the selected notes, a tempo, Tempo I), fermata (or press F), breath mark and caesura after a note, dynamics and crescendo / diminuendo hairpins, accent, staccato, tenuto, marcato, slur, a boxed rehearsal letter at the start of the measure, and Text… above the stave (“hum”, “solo”, “div.”). Press a button again to take the mark off, or use Clear marks. Tick All voices to put the mark on every stave at the same beat. They all play: the tempo slows through a rit., fermatas hold, breaths leave a gap, dynamics and hairpins change the volume, staccato notes are short. In the play window, Section jumps to a rehearsal letter, and with Loop on it repeats just that section. Rename or remove rehearsal letters and tempo marks in Selected › Key, tempo, time & rehearsal marks.
Click a note and press Enter to type lyrics into the Lyric box in Selected: Space or Tab moves to the next note, - splits a word (Twin-kle), _ holds the syllable over the next note, Enter finishes. v1–v6 beside it picks the verse. The Lyrics panel fills, loads or clears a whole verse from text, and Copy lyrics to the other staves gives every voice the words, beat for beat.
A note can carry a second note on the same stem: select it and use Divisi in Selected (+ 3rd below, then set its pitch; Swap; ✕). In Staves, ↓ Combine with… folds the stave below into this one (same notes once, different notes as divisi) and Split divisi separates them again. Importing keeps a part's occasional second line on its stave as divisi unless you untick Keep divisi on one stave.
Repeat ▾ in the Marks row works on the measures holding the selected notes: Repeat these measures, start/end repeats, 1st/2nd/3rd endings, D.C., D.S., al Fine / al Coda, Segno, Fine, To Coda and Coda. Play follows them (the play window's Repeats switch plays straight through instead); Loop plays its passage as written. Change how many times a repeat plays in Selected › Key, tempo, time & rehearsal marks.
Undo / Redo on the bar above the score, or Ctrl+Z / Ctrl+Y (Ctrl+Shift+Z also works) — covers note and chord edits, Generate parts, Suggest chords, Transpose, and text-field edits like the title or a lyric (each typing session undoes as one step, not one per keystroke). Switching to a different song in the Song dropdown, or starting a New one, starts that song's undo history fresh rather than carrying over from whatever you were editing before.
Shift-click extends a contiguous range of notes on the same stave from the last note you clicked. Ctrl-click (Cmd-click on a Mac) adds or removes a single note anywhere — on any stave — without disturbing the rest of the selection. With more than one note selected, the inspector panel switches to a small set of bulk operations: Ctrl+↑/↓ bumps every selected note (that has a pitch) up or down a full octave, and — when exactly two notes on different staves are selected — Ctrl+X swaps their pitches. Plain ↑/↓ nudging also applies to the whole selection at once, not just a single note.
Set the key signature and time signature in the header; barlines are placed automatically from the time signature (toggle them off in Settings, the gear icon, if you don't want them). The score pane is black-on-white by default; untick Black on white in Settings to get the dark version (this affects only the score, and is remembered in this browser). Three clefs are available: Treble, Bass, and Tenor (a treble clef marked with a small "8" that sounds an octave lower than written — the standard notation for a tenor voice part).
Key, tempo and time changes. The header sets the song's opening key, tempo and time signature. To change any of them part-way through, select a note (or chord) in the measure where the change should happen, open the Selected panel on the right, and use Key, tempo & time changes: pick the new key, type a new tempo, and/or set a new time signature, then Apply. Changes always start at the beginning of that measure. The new key signature is drawn on every stave (naturals cancel the old one when the new key has none) and a tempo change shows as “♩ = 72” above the top stave. Every change in the song is listed underneath, each with a ✕ to remove it. Existing notes keep their pitches when you add a key change — an F that was natural stays natural and now shows a natural sign — while new notes you enter, arrow-key nudges and letters typed in Melody Text without an accidental follow the key in force where they land. Playback, Save → as .wav, rehearsal tracks, MusicXML and MIDI all follow the changes, and Transpose moves key changes along with everything else.
The Staves setting in the header shows 1–8 staves at once (five to eight add Baritone, Soprano II, Alto II and Tenor II; pick any stave's voice and clef from its dropdowns). Four defaults to SATB (Soprano and Alto on treble clef, Tenor on the "8 lower" treble clef, Bass on bass clef); three defaults to SAB; fewer just uses the top part(s). Each stave has its own Part and Clef dropdowns right above the staff, so any part can be reassigned to a different voice or clef independently. The Melody radio button in that same row picks which single stave currently holds the tune — move it off the top line and the notes' octave is automatically shifted to a reasonable starting range for that voice (a rough default, worth fine-tuning by hand afterward). Each stave also has a Play checkbox (on by default) so you can mute individual staves without losing their content. A stave with Own rhythm ticked (every non-melody stave has the checkbox) has a rhythm independent of the melody: click the staff to add notes, and insert, delete, tie, dot or re-time them there just as on the melody. Generate parts (below) always writes independent-rhythm harmony, so this switches on by itself for every stave it fills; ticking it by hand first just seeds that stave with the melody's rhythm and pitches as a manual starting point. Unticking it discards the stave's notes and leaves it blank until you generate or add notes again (it asks first). Notes on all staves line up on a shared time grid. Each stave also has an Instrument field, which (3.0) is the sound the stave plays: Piano, Choir Aahs, Organ, Strings or Flute. Other names play the nearest of these (Voice, Soprano or Choir Oohs as Choir Aahs; Violin or Cello as Strings; Oboe, Clarinet or Recorder as Flute; brass as Organ), and a name it doesn't recognise plays piano. Hover over the field to see which sound a stave will use. The name is also written into MusicXML and MIDI exports, and an instrument name that comes in with an imported file is kept, so a file of Choir Aahs parts plays as a choir. Voice parts that the file played on some other sound (MIDI files often put the singers on flute or brass) come in as Piano. Type your own or pick from the suggestions. To hear the whole score on one sound without changing any staves, use Sound in the play window (see Playback).
With more than one stave and at least one chord in place, a Generate parts button appears above the staves. It fills every non-melody stave with a draft worked out from the melody and the chords underneath it, in the style chosen in the dropdown beside the button (saved with the song): Close harmony (the default — contemporary a cappella: close spacing, doubled thirds welcome, parallel fifths tolerated), Traditional (hymn) (textbook four-part writing: no parallel fifths or octaves, the root doubled rather than the third, the upper voices within an octave of each other, smooth inner voices) or Open (wide) (open voicing: the upper voices spread a fifth to a tenth apart, with a lower tenor and bass). Pick a style, then press Generate parts; locked notes are kept whichever style you use. Every draft has a bass line planned first, sensible voice ranges and spacing, doubling logic, and a search across the whole passage for smooth voice leading that avoids parallel octaves (and, depending on the style, parallel fifths). Before writing, it reads the whole melody: it finds the phrase ends (rests, long held notes, V–I arrivals) and treats each as a cadence (root-position bass, complete chords, leading tones and sevenths resolved), recognises secondary dominants (a D7 going to G in C major is V7 of G, so its F♯ rises), and hears the local key — a passage that has moved to the dominant or the relative minor is treated as being in that key, even with no key change written. It judges each voice three notes at a time, so a leap is followed by a step back the other way where it can be, and where a chord change allows it writes suspensions: a note held over from the chord before (tied), dissonant for a moment, then resolving down by step — the classic 4–3 at a cadence. The status line afterwards says how many cadences, suspensions and secondary dominants it found and any key areas it heard. Each voice keeps its own rhythm: it holds (ties) through repeated or ornamental melody notes rather than restriking every beat, and only moves when the harmony really changes. Music that comes back — a second verse, a refrain, a phrase repeated a step higher — gets the parts it had the first time (the Repeated music menu beside the style: keep alike, vary lightly, or write fresh); the Refine report lists each repeat found, where you can switch one off or link two passages yourself. Parallel, contrary and hidden fifths and octaves, overlapping voices, cross-relations and augmented seconds are all costed (most heavily in Traditional; 2.38), and generated notes are spelled from their chord (C♯ for D minor's leading tone). It's a starting draft, not a substitute for a real voice-leading pass by ear. Generated notes are click/drag-editable just like the melody (on a stave that also holds notes of your own, a dotted cyan line with a star marks the generated ones, 2.38) — click one to re-pitch it directly, letter/octave/accidental, in the inspector panel; select two notes on different staves and press Ctrl+X to swap them. Hand-editing a generated note — drag, nudge, or the inspector — locks it automatically (a blue padlock and dashed line mark locked notes on the score; click one to select them), so the next Generate parts keeps it as written while rebuilding everything else; unlock it from its inspector, or lock/unlock a whole stave at once from the buttons in the parts bar. When a melody note doesn't fit well under any voicing of its chord, Generate parts proposes a different chord instead — accept the suggestion next to the Generate parts button to apply it and regenerate. Changing the melody, the chords, or a stave's Part/Clef clears stale harmony so you know to regenerate.
Measure numbers (2.36) sit over the top stave at each barline and print with the score; Settings can put them over every stave or turn them off.
Melody sections and Rewrite (2.35). Click a measure number in the row above the chord lane to select that measure on every stave (Shift-click or drag for more; Esc clears). The Selected panel then shows Selected measures: Melody in moves the tune to another stave for those measures (the tenors take a verse, and the sopranos above get a descant or a harmony; Bring the tune with it copies it across, octave and words adjusted), or makes them None (chords only) — every voice sings the chords, one note per chord, held, or on the beat, with the top voice still a line. Generate parts then works passage by passage and joins them up, going back over each join with both sides in place (2.37). A tune given to the bass is the bass line, with every other stave written above it (2.37). Below that, tick staves and press Rewrite to write just those staves again in just those measures, around everything else (to keep the soprano and bass and rewrite the inner parts, select all measures and untick them), or Lock / Unlock them there.
The lane above the staff holds chords, one per beat at most. Click anywhere in it to drop the chord currently set in the Chord palette (root + quality); a chord holds until the next one, so click partway through an existing chord's stretch to shorten it and start a new one there. Click near an existing chord's marker to select and edit it instead. Suggest chords guesses a reasonable one-per-measure progression from the key and melody — a starting point, not a final answer. The Chords text box on the right takes a quick shorthand line like C G7 Am F, one chord per measure. Uncheck Play chords if you just want to hear the melody alone.
Play / Stop in the header, or press Space. Playback uses real recorded samples across the full keyboard, so very high or low notes sound correctly rather than being clipped to a vocal range. Sound in the play window chooses what the staves play on: Per stave (each stave's Instrument field — see Staves, vocal parts & instruments above), Piano (every stave on piano) or Choir (every stave on Choir Aahs, so a choral arrangement can be heard sung rather than played). Press V in the play window to step through the three. Switching while playing carries on from the same spot. Chords always play on the piano. Your choice is remembered in this browser, and Save → as .wav and rehearsal tracks use it too. Each sound loads the first time it's needed, so the first Play on a new sound can take a moment. Each stave's own Play checkbox (next to its Part/Clef dropdowns) controls whether that stave is heard (the play window has the same choice as Hear buttons: click to toggle, Shift-click to hear only that stave) — on by default for every stave, including the melody. Play starts at the selected note (or selected chord); with nothing selected it starts at the first measure that has a note in it, skipping any leading rests. Pressing Play opens a centered play window showing the staves as large as your screen allows (handy on a small screen): the current measure is shaded across every stave with a thin line following the beat, and the score scrolls along to keep it in view. Space is a pause/resume toggle: press it while playing to pause (the playhead stays where the music stopped, and the Play button reads Resume), and again to carry on from that spot. To resume from somewhere else, click a note in the play window first (clicking only chooses a starting point there — it doesn't edit), and playback picks up from that note instead. Stop forgets the paused spot, so the next Play starts from the selected note or the beginning as usual; so does editing the music. When stopped or paused, the window stays open with ◀ / ▶ buttons (or the left/right arrow keys) to page through the score, and Close (Esc) to return to editing. Save → as .wav (in the header) renders the whole song, start to finish, through the same piano samples and settings currently controlling what you hear (each stave's Play checkbox and Play chords), and downloads it as a standard, lossless .wav audio file — there's no MP3 export, since that needs an encoder this app doesn't bundle; a .wav opens and converts fine in anything.
Loop & practice speed. In the play window, Loop (or press L) repeats a passage until you stop it: select one note to loop its measure, or select notes across several measures (on any stave) to loop all of them; with nothing selected it loops the whole song. The loop always covers whole measures, and the measures it will play are shown beside the button. The Speed slider slows playback down (to 40%) or speeds it up (to 150%) without changing pitch, showing the resulting tempo; [ and ] nudge it by 5%. A new speed takes effect the next time Play starts, or on the next pass of a loop. It's remembered in this browser and doesn't change the song's written tempo.
Save ▾ → Rehearsal tracks… makes part-learning tracks: one audio file per voice with that voice at full volume and the others quieter underneath (you choose how much quieter, or silent), plus an optional full mix, at any practice speed. Tick left ear / right ear to put the voice in one ear and the rest in the other, the classic learning-track layout. All the tracks download together in one .zip, named after the song and the voice (e.g. My-Song - Alto.wav), ready to hand out to the choir.
Examples ▾ (next to Open… in the header) lists the example arrangements that come with Harmonizer; pick one and it opens as a new song, through the same dialog as any other file. When Harmonizer starts with no music at all, a welcome window offers the same examples. Open… accepts MusicXML files and MIDI files (see below). The part you pick becomes the melody — its notes, rests, lyrics (verse 1), ties, chord symbols, key, tempo, pickup measure, and key, tempo and time-signature changes come across — and, for a file with several parts, the other vocal parts you choose come in as harmony staves (up to eight staves in all). Each part's instrument name (a choir patch, say) comes across as a label on its stave — see Staves, vocal parts & instruments above to view or change it — but playback and MusicXML export still always use grand piano, never that instrument's actual sound. With Keep each voice's own rhythm ticked in the dialog (the default), every imported voice keeps its own rhythm; untick it to make the harmony staves follow the melody's rhythm instead. Voice parts whose names include an instrument word, such as “Piano, Soprano”, are recognised as vocal. Rhythms from whole notes down to sixteenths (dotted if needed) and triplets are kept: longer notes are split into ties, and anything faster than a sixteenth is folded into a neighbouring note. Dynamics, slurs and grace notes are kept on every stave that keeps its own rhythm and shown on the staff (small italic marks below the staff for dynamics, curved lines for slurs, small noteheads before the main note for grace notes) — they're view-only, not editable, and they round-trip back out on Save → as .musicxml. (With Keep each voice's own rhythm unticked, only the melody keeps them.) A part that holds more than one line — a second voice on the same staff, or chords such as a divisi or a piano reduction — is split: each voice, and each note of its chords counting down from the top, is offered in the import dialog as its own stave (“Soprano – upper”, “Soprano – lower”, “Piano – voice 2”). Where a chord has fewer notes than there are lines, the lower lines share its bottom note. The lower line of an occasional divisi starts unticked; tick it to bring it in. Tenor parts on the “8” treble clef are read as sounding an octave below written, as in the score. A Tie button in the note inspector (or ~ after a note in the Melody Text, e.g. A4q~ A4e) ties a note to the next one.
Import report. After any import, the Import report button in the status bar compares what the file held (notes, lyrics, dynamics, hairpins, slurs, fermatas, articulations, marks and changes) with what's in the new song, and lists anything Harmonizer doesn't model, such as ornaments, tremolos, tuplets other than triplets, C clefs or chord-symbol extensions. It opens by itself when something came up short. Section headings written as text (“Verse 1”, “Chorus”) become named rehearsal marks, and a transposing instrument's part comes in at concert pitch.
MIDI files (.mid) open the same way: every track becomes a stave to choose in the dialog (a track that plays several notes at once is split top-down into one line per note, like chords above), with the file's tempo, key and time signatures and their changes, and any lyric events; velocities that really vary become dynamics, volume swells become hairpins, a brief deep tempo drop becomes a fermata, a run of small tempo steps becomes a rit. or accel., and marker events become rehearsal marks. Tracks named for voices get those parts; unnamed tracks get the usual choir layout, highest first. MIDI holds timings rather than notation, so rhythms are rounded to the nearest sixteenth (triplets come out as sixteenths), note spellings follow the key signature, and a file without one gets the key with the fewest accidentals for its notes.
Transpose to (in the header, beside Key) lists only keys of the same mode — other majors for a major song, other minors for a minor one — each marked with its shortest move up or down in semitones. Choosing one moves every note on every stave, plus all chords, and changes the key; it is undone by transposing back. Copy (beside the Song dropdown) makes a duplicate of the current song, named “… (copy)”, and switches to it, so you can try variations while the original stays untouched in the Song dropdown.
Everything autosaves to this browser as you go — no save button needed for that. The Save ▾ menu in the header writes the song out as a file: as .json, as .musicxml, as .mid or as .wav. The Song dropdown in the header switches between songs you're working on; New starts another one without losing the current one. To keep a song as an actual file (for backup, or to move it to another computer), use Save → as .json / Open…; an opened .json comes in as a new song, leaving the one you were on untouched. To back up every song at once, use Export library in Settings (see below). If the browser ever can't save your work (its storage for this site is limited, typically about 5 MB), an amber warning appears in the status bar at the bottom and stays until saving works again — export a backup straight away and delete songs you no longer need. Open… also imports MusicXML (.musicxml, .xml, or a compressed .mxl from MuseScore, Finale, Sibelius and the like) and MIDI (.mid) as a new song — see Importing a score above. Save → as .musicxml exports the song in the standard MusicXML interchange format, for opening in real notation software (MuseScore, Finale, Sibelius, and similar) — it includes the melody plus every stave that has notes (generated or with its own rhythm); a stave that's still blank isn't included. Save → as .mid writes a Standard MIDI File: one track per stave (named for its voice part, with a General MIDI instrument from its Instrument field), plus the tempo, key and time signatures with all their changes, lyrics as lyric events, and imported dynamics as note velocities — it opens in rehearsal apps, DAWs and notation software alike. Chord symbols and the chord accompaniment aren't included. Save → as .wav exports the audio (see Playback above). The last item in the menu, Rehearsal tracks…, makes part-learning tracks (see Playback above). Print / PDF sends just the score to your browser's print dialog — choose "Save as PDF" there for a PDF instead of paper. The score is laid out in lines (systems) across the page, broken at barlines, each starting with its clef, the key signature in force there, the part names and a measure number, and it runs onto as many pages as it needs — a line is never split across two pages. The title, composer, key and time head the first page. Lyrics, chords, ties, dynamics and key/tempo changes print as shown; a tie or slur that crosses the end of a line is cut there. Portrait fits about three four-part lines per page; landscape gives longer lines. Range warnings, partwriting marks, lock marks and generated-note marks don't print.
The gear icon in the header opens Settings: Black on white (the score pane's color scheme, remembered in this browser), Barlines (saved with this song), Range warnings (on by default: any note outside the comfortable range of its stave's voice part is tinted orange — hover it to see the range; tenor-clef notes are judged at sounding pitch) and Mark partwriting problems (off by default: a dashed line along the voices involved, labelled 5/8 for parallel fifths or octaves, c5/c8 the same by contrary motion, h5/h8 hidden fifths or octaves in the outer voices with the top voice leaping, ov a voice overlapping the note its neighbour has just left, x a cross-relation, +2 an augmented second — hover a label for the voices, and tick which kinds to look for; 2.38). Mark generated notes (2.38) puts a dotted cyan line with a star over each run of notes Generate parts wrote, on staves that also hold your own (or on every stave, or off); click it to select them. All are remembered in this browser, and none shows when you print. Play chords during playback lives in the Chords section instead, right next to the other chord controls, and is also now remembered in this browser.
Song library backup (also in Settings) shows how many songs are stored in this browser and roughly how much of its storage they use. Export library downloads every song as one .json file; Import library… (or opening that file with Open…) adds its songs back. Importing never overwrites: songs you already have are skipped, and a song that has changed since the backup comes in as a separate copy.
Score pane only. Remembered in this browser, across every song.
Automatic, from the time signature. Saved with this song, not global.
Printed on the score at each barline (and in Print / PDF). The row of numbers above the chord lane is always there — click it to select measures. Remembered in this browser.
Draws a small padlock and a dashed blue line over every run of locked notes — the notes Generate parts and Rewrite keep as they are. Hover it for details. Never prints. Remembered in this browser.
A dotted cyan line with a small star over each run of notes Generate parts wrote — so on a stave that mixes your notes with generated ones (a verse with the tune in the tenor, a Rewrite) you can tell which is which. Click one to select its notes. Never prints. Remembered in this browser.
Tints notes (orange) that lie outside the comfortable range of their stave's voice part. Hover a tinted note for the range. Remembered in this browser.
Draws a dashed line along the voices involved, with a label: 5 / 8 parallel fifths or octaves (unisons count as octaves), c5 / c8 the same by contrary motion, h5 / h8 hidden fifths or octaves (top and bottom staves moving the same way into one, the top voice leaping), ov a voice overlapping the note its neighbour has just left, x a cross-relation (F then F♯ in different voices), +2 an augmented second. Hover a label for the voices. Tick which to look for. Remembered in this browser.
After writing a draft, Generate parts works over it again as lines: breaking up long held notes, giving each voice some shape, trading notes between voices. Turn off to hear the plain draft (Refine parts still works on demand). Remembered in this browser.
"Play chords" during playback lives in the Chords section, next to the other chord controls. Warnings and marks never print.
Songs live only in this browser. Export now and then to keep a copy, or to move your songs to another computer. Import adds songs; it never replaces any.
There’s nothing here yet. Open one of these example arrangements to look around and listen, or start from scratch.
The examples are always in the Examples menu in the header.
One audio file per voice, with that voice brought forward and the others underneath it, for singers learning their parts. All the tracks download together in one .zip.