Guitar Bot - The automated guitar player
GuitarBot was a program I wrote as a proof of concept demo for a guitar teaching application. It was designed to show the hand movements and arrangements required for playing songs, with a human hand. Its input was a MusicXML loader (written by a friend of mine) and an automated tab arranger which would arrange notes (only when played one at a time, so it would not rearrange chords) according to the difficulty in various parameters (sweeping, changing strings, horizontal distance between notes, etc).
Designed to load multiple tracks, it would analyze notes for all input tracks, using the first available track as the "master" track through which to navigate and display. The hand solver itself has a basic algorithm when it comes to single-note frames where it looks ahead to determine automatic finger arrangement.
With chords, the solver uses a custom IK solution mixed in with human hand movement (in which the fingers are unable to move completely independantly of one another) with a human hand modelled after a real one (mine). This happens in two steps. The first step is to determine the endpoints for each finger, and if any finger may "flatten" to press the same fret on the strings above it, if all frets above it are pressed either at that fret, or at a higher note (first screenshot, index finger). The second step is to relax the hand model until each finger with an endpoint may comfortably reach that endpoint through IK with some restrictions. This also includes rotating the base of the hand, as you may notice by closely examining the last screenshot.
Below are some screenshots of some chords