ChordPro / chordpro

Reference implementation of the ChordPro standard for musical lead sheets.
Other
324 stars 51 forks source link

Submit your chord definitions for ukulele here #220

Open sciurius opened 2 years ago

sciurius commented 2 years ago

Are you missing specific chord definitions for ukulele?

Please create new definitions and add them here as a reply to this issue.

Desired format:

{ "name"  : "Dbdim", "base"  : 1, "frets" : [ 0, 1, 0, 1 ], "fingers" : [ 0, 2, 0, 1 ] },

Do you want to add a new name to an existing chord definition, use "copy":

{ "name" : "C#dim", "copy" : "Dbdim" },

Thanks on behalf of the community!

gwyndaf commented 2 years ago

My current versions attached for the main C, G and D ukulele tunings, both with and without fingering. They've been fairly thoroughly tested, but might still have the odd mistake: ChordPro_Ukulele_Configs.zip

gwyndaf commented 2 years ago

This might also be a useful tool, which allows chords for all three ukulele tunings to be easily checked and generated. Uke Chords master v5b.ods

Only includes sharp chords (because of the logic of using the same data across three tunings), so this script quickly adds entries for the relevant flat chords:

#!/bin/bash
infile="$1"
oldfile="$infile.bak"
# Temporarily switch [ ] because sed doesn't like them
sed -i 's/\[/</g' "$infile"
sed -i 's/\]/>/g' "$infile"
cp "$infile" "$oldfile"
# Create array from lines containing sharp # symbol (only in chord name?)
readarray -t sharplines < <(grep  "name.*#" "$infile")
# Loop through array entries, i.e. each sharp line in turn
for i in "${sharplines[@]}"
    do
        sharpstring="$i"
        flatstring=$(echo "$sharpstring" | tr "ABCDEFG#"  "BCDEFGAb")
        newstring="$sharpstring\n$flatstring"
        sed -i "s|$sharpstring|$newstring|g" "$infile"
    done
# Restore [ ]
sed -i 's/</\[/g' "$infile"
sed -i 's/>/\]/g' "$infile"
nomike commented 2 years ago

I found these useful:

        { "name": "A7sus4", "base": 1, "frets": [0, 2, 0, 0], "fingers": [0, 1, 0, 0] },
        { "name": "Am6", "base": 1, "frets": [2, 0, 2, 0], "fingers": [1, 0, 2, 0] },
        { "name": "Am/B", "base": 1, "frets": [2, 0, 0, 2], "fingers": [2, 0, 0, 3] },
        { "name": "Am/E", "copy": "Am" },
        { "name": "Am/F", "base": 1, "frets": [2, 4, 1, 3], "fingers": [2, 4, 1, 3] },
        { "name": "Am/G", "copy": "Am7" },
        { "name": "Bmadd11", "base": 4, "frets": [1, 3, 0, 2], "fingers": [1, 3, 0, 2] },
        { "name": "B7sus4", "base": 1, "frets": [4, 4, 2, 0], "fingers": [3, 4, 1, 0] },
        { "name": "C/A", "base": 1, "frets": [0, 0, 0, 0], "fingers": [0, 0, 0, 0] },
        { "name": "C/B", "base": 1, "frets": [0, 0, 0, 2], "fingers": [0, 0, 0, 1] },
        { "name": "C/G", "copy": "C" },
        { "name": "Cadd9", "base": 1, "frets": [0, 2, 0, 3], "fingers": [0, 2, 0, 3] },
        { "name": "C7sus4", "base": 1, "frets": [0, 0, 1, 1], "fingers": [0, 0, 1, 1] },
        { "name": "Cadd9", "base": 1, "frets": [0, 2, 0, 3], "fingers": [0, 2, 0, 3] },
        { "name": "D/B", "base": 2, "frets": [4, 2, 2, 0], "fingers": [4, 1, 2, 0] },
        { "name": "D/C#", "base": 2, "frets": [1, 1, 1, 3], "fingers": [1, 1, 1, 3] },
        { "name": "D/F#", "copy": "D" },
        { "name": "D7/F#", "base": 2, "frets": [1, 1, 1, 2], "fingers": [1, 1, 1, 2] },
        { "name": "Dbm", "base": 1, "frets": [1, 1, 0, 4], "fingers": [1, 2, 0, 4] },
        { "name": "Dm7", "base": 1, "frets": [2, 0, 1, 3], "fingers": [2, 0, 1, 4] },
        { "name": "Dm9", "base": 5, "frets": [3, 1, 1, 3], "fingers": [3, 1, 1, 4] },
        { "name": "Dmaj9", "base": 2, "frets": [1, 3, 1, 4], "fingers": [1, 3, 1, 4] },
        { "name": "D6/9", "base": 1, "frets": [4, 2, 2, 0], "fingers": [4, 2, 1, 0] },
        { "name": "D7", "base": 1, "frets": [2, 0, 2, 0], "fingers": [2, 0, 1, 0] },
        { "name": "D7sus4", "base": 1, "frets": [2, 2, 3, 3], "fingers": [1, 2, 3, 4] },
        { "name": "E", "base": 1, "frets": [1, 4, 0, 2], "fingers": [1, 4, 0, 2] },
        { "name": "E/G#", "copy": "E" },
        { "name": "Eadd9", "base": 4, "frets": [1, 3, 1, 4], "fingers": [1, 3, 1, 4] },
        { "name": "Em7sus4", "base": 3, "frets": [2, 2, 3, 3], "fingers": [1, 2, 3, 4] },
        { "name": "E7/G#", "copy": "E7" },
        { "name": "Em", "base": 1, "frets": [0, 4, 3, 2], "fingers": [0, 3, 2, 1] },
        { "name": "Em6", "base": 1, "frets": [0, 1, 0, 2], "fingers": [0, 1, 0, 2] },
        { "name": "Em9", "base": 1, "frets": [0, 4, 2, 2], "fingers": [0, 3, 2, 1] },
        { "name": "Emadd9", "base": 1, "frets": [0, 4, 2, 2], "fingers": [0, 3, 2, 1] },
        { "name": "Em/C", "base": 1, "frets": [0, 0, 0, 2], "fingers": [0, 0, 0, 1] },
        { "name": "Em/G", "base": 1, "frets": [0, 4, 0, 2], "fingers": [0, 3, 0, 1] },
        { "name": "Fm/Bb", "base": 3, "frets": [1, 3, 2, 1], "fingers": [1, 3, 2, 1] },
        { "name": "F#m11", "base": 1, "frets": [1, 4, 2, 0], "fingers": [1, 4, 2, 0] },
        { "name": "F#m7b5", "base": 2, "frets": [1, 3, 1, 2], "fingers": [1, 3, 1, 2] },
        { "name": "F7sus4", "base": 1, "frets": [3, 3, 1, 3], "fingers": [2, 3, 1, 4] },
        { "name": "Fmaj7/C", "base": 1, "frets": [2, 4, 1, 0], "fingers": [2, 4, 1, 0] },
        { "name": "F/A", "copy": "F" },
        { "name": "F/C", "copy": "F" },
        { "name": "Fadd9", "base": 1, "frets": [0, 0, 1, 0], "fingers": [0, 0, 1, 0] },
        { "name": "G/B", "copy": "G" },
        { "name": "G/C", "base": 2, "frets": [3, 1, 2, 2], "fingers": [3, 1, 2, 2] },
        { "name": "G/D", "copy": "G" },
        { "name": "G/F#", "base": 1, "frets": [0, 2, 2, 2], "fingers": [0, 1, 1, 1] },
        { "name": "G7sus4", "base": 1, "frets": [0, 2, 1, 3], "fingers": [0, 2, 1, 4] },
        { "name": "H7", "copy": "B7" },
        { "name": "NC", "base": 1, "frets": [-1, -1, -1, -1] },
        { "name": "N.C.", "copy": "NC" },
        { "name": "\\", "copy": "NC" }

I custom defined them like that in my config as ChordPro didn't support them out of the box. "NC" or "N.C." is often used in songs to show that nothing should be played and you should only sing.

sciurius commented 2 years ago

Thanks for the additions.

I will not add H7 since it is not common notation. The NC and N.C. chords should work out of the box, don't they?

As for \, since it is specific to a single song I would advise to define it locally in the song, either with a {define "\\" copy "NC"} or in a song-specific config.

sciurius commented 2 years ago

You define F/A as a copy of F, however I would play F as 1 3 3 2 1 1 and F/A as x 0 3 2 1 1.

Similar for E/G#: 4 2 2 1 0 0 instead of 0 2 2 1 0 0.

The added bass note is there for a reason.

nomike commented 2 years ago

Agreed.

And I locally defined [\] for that song as you advised.

nomike commented 2 years ago

Wait a minute.

As you only have 4 strings on a ukulele, some of the slash chords can´t be played directly and the closest approximation in this case is an F. If I remember correctly this is why I made that.

Can be ssen here: https://www.scales-chords.com/chord/ukulele/F%5CA

AFAIK there are debates about some of the slash chords and how to properly play them on a ukulele.

gwyndaf commented 2 years ago

I agree: slash chords aren't particularly useful or meaningful for ukulele, as they've only got four strings, and string 4 is often tuned up an octave (but some people play with a lower string 4), so so the idea of having a particular note in the bass becomes quite hard to achieve.

I often create songsheets to serve multiple instruments so, if there is a slash chord (e.g. from guitar arrangement), I generally add a custom voicing with {define-ukulele}. That at least gives a plausible/playable equivalent, even if it's not strictly a slash chord when played on ukulele, and sometimes it might be an ergonomic more than strictly musical choice.

sciurius commented 2 years ago

Sorry, I didn't notice they were ukulele chords. I can imagine there are debates about the slash chords, since the lowest string on the ukulele is a high one.

gwyndaf commented 4 months ago

ukulele_c.json ukulele_d.json ukulele_g.json Uke Chords master v7.ods

Updates to my ukulele chord definitions, and master spreadsheet. I've now removed 'format' settings as that's handled more elegantly by chord formatting config settings.

Subject to testing, I'll probably also remove 'display' settings at some point, as I think they might be getting in the way of transcoding.