String Fingering


Automatic String Fingering v0.61

Older version: Automatic String Fingering v0.52

Small collection of ABC scores

Automatic String Fingering is a project to automatically finger music for violin, viola or cello. The program can be used to check if passages are at all playable: certain chords on the violin, eg, are not. It can also be used to evaluate difficulty and propose easiest fingerings for entire pieces of music, which can be read in as files using ABC notation. It can propose voicings for pitch collections. It generates random playable chords. Compositional experiments are possible. Discover how to write for strings in a new way that sits upon the instrument as butter on toast.

How it works

Automatic String Fingering models the position of a player's hand on the fingerboard, keeping track of where the fingers are placed. It requires fingers to be placed "legally", classifying positions as topologies: ease of transition from one hand position to the next is theorized as the "smoothness" of a topological transformation. The difficulty metric supposes that a certain amount of time is needed to perform that transformation.

What it currently does

  • It can read in a score, in ABC notation.
  • It has three modes: chordal, positional and transitional (which can be used together).
  • In chordal step mode, it works out all possible fingerings for each note or chord.
  • In chordal extend-forward mode, it works out the longest passage that can be played in exactly one chordal position. This mode detects arpeggiation, bariolage and the like --- ie, cross-string performance possibilities.
  • In positional mode, it will work out the longest passage that can be played in a single position (including chords).

What it will do

When completed, the program will be able to propose fingerings for entire pieces of music. Especially in chordal music there is sometimes only one way to finger the music--see the opening of the Bach Chaconne. If there is more than one way, as is more generally the rule, the program will accept interpretive constraints.

Who can use it

It can be a helpful assistant for the human composer.

It can be used for musicological/pedagogical research.

It is a necessary component of an automatic composition system, Jack & Jill. It is part of large scale experiment about relation between performance and composition.

Use ABC files for input

ABC is an easy-to-understand text notation for music. Here is the specification . To specify an instrument, use the I field in the header like this:


The program defaults to violin if no I field is specified. See the ABC scores linked above for examples.

Short Tutorial

In the program under File, select Read ABC file, pointing it to, which contains the opening of the Bach solo violin Chaconne. This appears in the right (larger) window with a box drawn around the first chord. The box shows what is being fingered.

The chord that is being fingered appears in the notation window to the left, written in whole notes. These are annotated with roman numerals indicating which string each is to played on, and "0" for the open string. The fingerboard in the middle shows this fingering, with open strings drawn in blue, and stops in red. In this view, the nut is at the top, bridge at the bottom; the low string is to the left. The view is that of a violinist looking down the fingerboard, with the left hand at the top of the screen.

Locate the Next button in the leftmost (fingering) panel. Notice that it is lit up: there are more fingerings to look at. In this case, There are 2 ways to play the opening d- chord, as seen in "2 solutions (0 bad)." Hit the Next button to show the other way to finger this particular chord.

Now look at the at the bottom of big score panel (on the right side of the application). There are a few radio buttons: Step 1 is currently selected. Select Extend forward, and look at the notation window above: the box around the first chord has extended itself to include the next a. This shows that the whole can be played in one chord position, shown in the chord notation window. Later we will see more interesting examples.

Click on Step 1 again (noticing how the box shrinks back to the preceding chord) and then hit the Next button at the bottom of the big notation window. The box jumps to the a, showing how that could be played. You can navigate through the whole score in this way, seeing the fingerings on the left.

Next, load up "" (Ignore the funny notation, which is an artifact of the notation library the program uses). The box is drawn around the first note. Now click the Extend Forward radio button. The box extends to the whole first measure, with a G minor chord showing in the chord window. This shows that it is possible to play the first measure without moving the left hand. Try using the Shrink and Expand buttons to see what they do.

Now load up, an excerpt of the 2nd quartet in which I have not attempted to realize the rhythm at all. The first chord has a topology (in red) of "bad_trianglebar": this warns that the chord, as written, is considered by the program as probably unplayable or very awkward. Indeed our consulting violinists concur. The lower three notes make up the "triangle bar," a triangular shape with 2 lower outer pitches at the same height on the fingerboard. These must be played by fingers 1 and 3, so that the 2nd finger must make a stretch of a major 3rd. We regard this as too great a stretch, and conclude that composers of New Complexity, and others, will benefit from the analysis Automated String Fingering provides.

Type in your own chords

You can also use the program to work out all playable versions of chords that you enter as text.

For the 21st century version of inspiration, hit the Random button. This will find a playable chord of either 2, 3 or 4 notes. It will also put the input notation in the text box, so you can see examples of how to use it. Under menu Random, select the option to make only 4 note chords. You can also select "2 chords," which will generate 2 random chords and display both. Currently, there is no analysis but you can use this to eyeball transition difficulty, which the program will soon do automatically.

The input text representation is very simple: "C#5" is the "c#" just above middle C. Use ABCDEFG for notes. Use "#" or "s" for sharps and "b" or "f" for flats. Case doesn't matter. Specify an octave with a number: C5 is middle C, C6 an octave able, C4 an octave below. Type in up to 4 notes in either of the two text boxes: hit thefinger button (or hit return). The random button will randomly add pitch classes; in this case there will generally be a large number of solutions, which you can see with Next and Prev buttons.

Discover playable voicings

In the chord input box, if you leave out the octave, the program will treat the note as a pitch class, finding all possible transpositions that can be performed on the selected instrument in combination with any other notes you specified (with or without octaves). Use the prev and next buttons to see them. "C# Bb5" displays all possible chords combining the Bb above middle-C and any c#: there are 3 possible chords for the violin, 4 for the viola, and 3 for the cello.

Fingers violin, viola and cello

The program works equally well for violin, viola and cello, although currently violin works best. Select the desired instrument under the Instrument menu.

How to run it

You will need java version 1.6.0_0 or greater. Download the application. In Windows. you can double click the jar file. In Linux, you can run it from a shell like this:

java -jar fingering.jar

I believe that java programs do not run on macs, or so I was told by a "Mac Store Genius," but you can try opening a terminal and using the command above. If that doesn't work, you may have to download the java SDK. If you know how to get the program running on Mac OSX, please let me know.


Notation is provided by abc4j.

String Fingering is released under the LGPL. For more information, or for bug reports and feature requests, write to Eliot.


Consulting violinist: Emily Westell
Programming assistant: Jean-Benoit Chasles

  • Home
  • Jack 1
  • Analysis online
  • Articulation
  • Orchestration
  • String Fingering
  • Research
  • Blog
  • Contact