• If I read it correctly, the mapper will score fingering based on how many frets the hand needs to stretch:

    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.

    • There's quite a bit more involved in the scoring, such as string hopping, runs on the same string, etc. I invite you to run --help and look at the mapper config tunables. Ideas for improvement are welcome.
  • I looked for similar tools;

    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

  • OP here. I need to update the readme, but running it with --help will show you all of the alternate tunings and such. The mapper algorithm is nearly 100% tunable.

    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...

  • Nice! This reminds me of my PhD research! I built some similar tools to go the other way (for comparing similarity with scores) but probably nowhere near as reliable as this. QQ How do you handle repeat segments? I remember having to extrapolate the x2's etc but in your you could detect patterns and do the reverse for compactness.
    • Thanks! TBH I hadn't thought about handling repeating segments yet - in either direction. Because the tab-to-midi direction is mostly a novelty I haven't done much of it except with tabs generated by gtrsnipe, and since it doesn't handle repeats specially, I haven't had to parse any "x2" type notation, but now that you mention it I should. Thanks again.
  • Awesome OP. I'll give it a shot because I've been considering doing something similar for chord charts. Glad to see abc notation support.
  • Hi @ycombiredd, could this be used to turn MIDI into http://strudel.cc mini-notation?

    Previous effort: https://github.com/TylerMclaughlin/midi_to_tidalcycles

    • I hadn't heard of Strudel before but I'll look into it. Thanks!
  • Looks interesting, too bad it's limited to 6 strings and 3 tunings, that excludes a lot of music
    • Here's the current supported tunings:

        $ gtrsnipe  --list-tunings                                                   
        Available Tunings:
        - STANDARD              : E4 B3 G3 D3 A2 E2
        - E_FLAT                : Eb4 Bb3 Gb3 Db3 Ab2 Eb2
        - DROP_D                : E4 B3 G3 D3 A2 D2
        - D_STANDARD            : D4 A3 F3 C3 G2 D2
        - DROP_C                : D4 A3 F3 C3 G2 C2
        - OPEN_G                : D4 B3 G3 D3 G2 D2
        - OPEN_E                : E4 B3 G#3 E3 B2 E2
        - DADGAD                : D4 A3 G3 D3 A2 D2
        - OPEN_D                : D4 A3 F#3 D3 A2 D2
        - OPEN_C6               : E4 C4 G3 C3 A2 C2
        - C_SHARP               : C#4 F#3 B2 E2 C#2
        - BASS_STANDARD         : G2 D2 A1 E1
        - BASS_DROP_D           : G2 D2 A1 D1
        - BASS_E_FLAT           : Gb2 Db2 Ab1 Eb1
        - SEVEN_STRING_STANDARD : E4 B3 G3 D3 A2 E2 B1
        - SEVEN_STRING_DROP_A   : E4 B3 G3 D3 A2 E2 A1
        - BARITONE_B            : B3 F#3 D3 A2 E2 B1
        - BARITONE_A            : A3 E3 C3 G2 D2 A1
        - BARITONE_C            : C4 G3 Eb3 Bb2 F2 C2
    • I probably need to update the documentation. Since I posted I've added many alternate tunings and it supports from four to seven strings. I'm still improving it. Thanks for checking it out.