SATB Part-Writer

Output to File




Highlight elements of chords

Root-position M and m triads

Create settings with errors




  • contrary
  • oblique
  • parallel
  • similar
  • static


About SATB Part-Writer

This tool writes harmonic progressions in four voices (SATB) from Roman numerals such as music students are taught to do in harmony courses. It is an educational tool for visualizing the many ways chord progressions can be expressed in music. The results are free of a number of conventional errors such as parallel perfect intervals, voice-crossing, and poor leading-tone treatment.

DISCLAIMER: There is plenty of variation in part-writing rules. Accordingly, there is no guarantee that the productions of this tool are error-free from everyone's perspective, nor that they include all settings which might be considered acceptable. No claim is made as to the quality of melodic writing—though it is hoped that the user will find appealing results among the possibilities!

Documentation (in progress) of the various constraints followed by the part-writer may be found here.


The musical notation seen on this page is created with the music notation engraving library Verovio. Music to be typeset is encoded as a MEI string, which is then passed to the Verovio JavaScript toolkit. No modifications have been made to the Verovio toolkit, and other versions of the toolkit may be substituted by changing the link in the main HTML file. Verovio is licensed under the LGPL v3; see also the GPL v3. MEI is licensed under the ECL-2.0.

This program can produce output in MusicXML format. MusicXML 3.1 is licensed under the W3C Community Final Specification Agreement.

This program also exports output readable by the program LilyPond. LilyPond is licensed under the GPL v3.

The piano samples used in playback are adapted from the FreePats Upright Piano KW soundbank. These samples are licensed under the Creative Commons CC0 1.0


Example progressions
  • Major keys
    • I ‒ IV ‒ V ‒ I
    • I ‒ I6 ‒ ii65 ‒ V7 ‒ I
    • I ‒ V42/IV ‒ IV6 ‒ Fr+6 ‒ I64 ‒ V7
  • Minor keys
    • i ‒ ii⌀65 ‒ V ‒ i
    • i ‒ V64 ‒ i6 ‒ iio6 ‒ i64 ‒ V ‒ i
  • Enter progressions into the part-writer with the Roman-numeral entry tool.
  • To get started, try one of the examples shown in the box. Enter it using the buttons. (You can't type directly into the input window.) Press next RN between each chord. Select a major or minor key from the drop-down menu. Check that Show multiple settings is selected. Finally, click Go.
  • You will see a number of different settings of your progression, all beginning with the first chord in the same configuration.
  • There may be (many) more possibilities beginning with that same chord. The From this opening buttons will let you page through them.
  • There likely are settings beginning with different voicings of the opening chord. Use the Change opening buttons to see them.
  • Try selecting different keys.
  • Click Go whenever you make a change to the key or the progression.
  • A lowercase Roman numeral creates a chord with a minor third between the root and third; an uppercase numeral, a chord with a major third. For example, an uppercase I always produces a major triad, whether the key is major or minor.
  • To distinguish MM7 from Mm7, you must enter a MM7 chord with an M: IVM7, IM65. Without the M, a Mm7 (dominant seventh) chord is assumed: IV7 will always refer to a Mm7 chord.
  • Use the forward slash for secondary chords: V7/V viio43/IV
  • Lower a root with ♭: ♭VI V7/♭III
  • Raise a root with : ♯vi
  • Modulations may be represented (for the time being) using the notation for secondary chords. For example, the pivot-chord modulation C:I vi6=G:ii6 V I might be entered as I vi6 V/V I/V or I ii6/V V/V I/V. (This progression could also be written I vi6 II V.)
  • At the moment, the cadential six-four chord is entered using a old-fashioned notation, that is with I64 followed by the dominant chord. A more expressive means of entry is planned.

See all available realizations of your progression.

  • The longer your progression, the more solutions can be found. Realizations can easily number in the thousands for a six or seven-chord progression.
  • For faster display, results are shown in groups of fifteen at a time. See all settings using the navigation buttons.
  • By default, settings are organized by the voicing of the first chord. You can turn this off under Options.
  • Results are ordered by smoothness, with the smoothest first. You can turn sorting off under Options.
  • Prepare to search for the best settings: some will not be particularly musical.
  • Highlight a setting by clicking on it; deselect it by clicking it again. Highlighting enables you to export selected realizations to a file.

Create your own setting by choosing from alternatives.

  • Enter a progression with the entry tool and select a key. Select Build your own setting, followed by Go. You will see a single chord representing a possible voicing for the first harmony.
  • There is a blue asterix over the currently active chord, and its Roman numeral analysis is colored red.
  • Use the up and down arrows to choose a voicing for the active chord. The choices available are restricted by the chord's context.
  • Use the right and left arrows to move forwards and backwards in the progression.
  • Use the rest button to change a chord back to rests.
  • You can solve the progression from left to right, from right to left, inwards from the ends, etc.
  • Your choices will limit your options for other chords. Sometimes there won't be any chord available which can fit into position with good voice-leading. When this happens, or you want other possibilities, try choosing a different voicing before or after the chord in question, or changing a chord to rests.
  • The voicings given as choices will fit into the growing setting without creating errors such as parallel fifths and voice overlap. It is up to you, however, to choose combinations that form good melodic lines.
  • You may listen to settings using the playback controls.
  • Playback uses the Web Audio API, which may not work on older browsers. (You may need to update to a newer browser release.)
  • Playback is limited to on-screen results. To hear settings selected (by highlighting), first choose show selected under Options.
  • During playback, the notes of the currently sounding chord will change color.
  • Playback may be adjusted in the Play menu. Available settings are tempo and the volume of individual voices.
  • For more advanced handling of sound, import results as a MusicXML file into software with MIDI editing and playback capabilities (a music notation program, for example).

Change default part-writing guidelines, filter the results, and control presentation.

  • Important: When you make changes to any options, you need to press Go on the progression entry tool to see the new results.
  • Selecting keyboard style will output results with three-note chords in the right hand against single notes in the left. Note: tessitura settings will be ignored.
  • Allowing other doublings of root-position triads opens up more melodic possibilities.
  • Filtering by tessitura yields settings that lie mostly within each voice's comfortable range. There will still be pitches at the low or high end, but these are kept to a minimum.
  • If you don't want these high or low outliers at the opening, select First chord within tessitura. Set this with or without Comfortable average range (tessitura).
  • Greater permissiveness or selectivity can significantly increase or decrease the number of solutions in multiple realization mode. In fact, you can filter out all results by applying too many restrictions.

Sorting results

  • By default, settings are sorted in order from the smoothest to the least smooth. This may be turned off.
  • You may sort results according to a weight assigned to contrary, oblique, similar, and parallel motion, as well as simple repetition. The larger a number is in relation to the others, the more prominent that feature will be in the sorted results. The settings which score highest according to your recipe (or the default) appear first.
  • Select Show settings with the least movement to discover ways to write your progression in the most economical way possible. Settings are shown from all available openings. Finding the shortest distance between two points has the effect of flattening lines, so don't look for melodically interesting results here!

Analytical Information

  • Clicking on a note will display a basic analytical description. Click on the note again to remove the annotation.
  • Information included is scientific pitch name, scale degree, voice part, intervallic role in the chord (root, third, etc.), and whether the note is a (secondary) leading tone. Note: the dominant scale degree is considered the root of the cadential six-four.
  • Notes may be shown in color depending on their functional role. Currently, chord roots, chord sevenths, leading tones, and doublings may be highlighted.

Intentional errors

  • While this program is designed to provide error-free settings, it can also create solutions with errors. Currently, this is limited to consecutive perfect intervals.

Output to file

Musical output can be saved as a simple text file in three formats.

File Formats
  • This type of file can be opened as musical notation with a number of other music notation programs, allowing you to modify, play, and print the results.

  • The music notation in this application is created by feeding MEI output to the software library Verovio.

  • LilyPond is a powerful program with beautiful typography and a marvelous online community. LilyPond may be downloaded here.

    LilyPond is a desktop program, but you can use the program online with a smartphone or tablet using LilyBin.

    Including the file roman_numeral_analysis_tool.ily allows you to incorporate analysis symbols into your file. If you are using LilyBin, copy and paste the contents of the file at the head of your input. Otherwise, save it to the same directory as your output file. Uncomment several lines in the LY file: remove the % from the line that begins \include. Change the two instances of %{ to read %%{. You can read more about the tool here.

Different subsets of the available solutions may be saved to file.

Choosing content to export
  • Settings which correspond to visual display.

  • Use this with Options→Separate by initial voicing to export all settings with the current opening.

  • Output the measures you have clicked on. They appear with a blue background in the visual display, but normally in the file output.

  • Output can easily overwhelm music notation software, so this option is only recommended for short progressions (perhaps no more than four chords long).