About seven months ago, via HN, I got nerdsniped into a silly guitar transcription problem and made a bunch of really senseless code but what came out of it was what I thought at the time could potentially be pretty useful - a guitar fretboard mapper and fingering scoring algorithm.
So as of yesterday morning I've finally put those bits of code to "good" use, creating gtrsnipe to convert between MIDI files (.mid) and ASCII tab (as well as VexTab and ABC notation) and any combination/direction among the set of formats.
gtrsnipe tries to intelligently find the best neck and fingering positions using a note to fretboard mapper and a scoring algorithm that is unavoidably shaped by my subjective opinions and skills as a player but it does its best to avoid objectively impossible fingerings.
See the example tabs and usage in the README and please, try your own transcriptions from MIDI and if you love or hate the arrangement it gives you, I'd love to hear about it so I can further refine the scoring algorithm.
Thanks!
https://github.com/scottvr/gtrsnipe/blob/4cae149e1dac766c3c3...
But this doesn't seem to account for other shape concerns. The bit I am most interested in is whether this mapper can avoid barre chords where possible.
Related, I think there should also be an option to take capo into account.
As I said, I'll put this info in the README, but last night I made a medium post that shows some of this (--bass, etc).
https://medium.com/@scott.vr/about-seven-months-ago-via-hack...
Previous effort: https://github.com/TylerMclaughlin/midi_to_tidalcycles
Looks like tayuya is also written in Python, on mido and music21. It has a "get all notes to play" feature, mentions LilyPond tab output as a todo, and has a get_key(midi) method built on music21: https://github.com/vipul-sharma20/tayuya#get-all-notes-to-pl...
tayuya.tabs:note_nearest_to_fret: https://github.com/vipul-sharma20/tayuya/blob/master/tayuya/...
Kord has a fretboard visualizer tool: https://github.com/synestematic/kord#fretboard-tool
Textual is another way to create CLIs for Python scripts.
What about tab playback and CLI-based scrubbing?
There was a post a week or so ago about an LWN article about spotify/pedalboard, which is written in Python and built on JUCE (C++) and supports VST3 and LV2 plugins like a MIDI player or a wavetable synth and a Guitarix effects rack: https://news.ycombinator.com/item?id=44604024#44648290