Automatic fingerings/tabulature for guitar, bass etc.
Holdsworth is a QT4-based C++ library that intelligently deduces fingerings for a piece of music (the usual source would be a MIDI track.)
The library is designed to be very extensible - abstract base classes map out the basic concepts of an instrument (a number of tuned, fretted strings), the physical constraints of the hand (what notes fall under which fingers at a given position) and an approach (a scoring mechanism to decide between alternative fingerings.)
The basic library provides concrete classes that cover the standard guitar, three different hand models (the traditional one-finger-per-fret, and two extension-based fingerings) and my current algorithm for non-chordal material. A simple example program, "FING", is also included so that you can try out the library and experiment with your own approaches - it can input notes from MusicXML and includes a Lilypond dump feature:
You can give Holdsworth "hints" about how to render the input music: for example, that one note should slide into the next or that the next note is a good point to change left-hand position. You can also dictate the fingering of certain notes and Holdsworth will try to work with the constraints you have given.
The library is released under the Gnu General Public Licence and is primarily being written for inclusion in the music sequencing/scoring software Rosegarden, although the sample program is quite useful in itself to the programming-literate guitarist.
Download the latest snapshot test results (currently offline as they were out of date :)
Browse the online API documentation (coming soon)