ukebox
is a ukulele chord finder for the command line written in Rust.
- shows you how to play a given chord on a ukulele by printing a chord chart in ASCII art
- presents the chord name(s) corresponding to a chord fingering given in numeric chord notation
- supports different ukulele tunings (C, D and G)
- can present each chord in different positions along the fretbord
- allows you to transpose a chord by any number of semitones
ukebox
is intended to be a stand-alone command-line application but for the time being you need Rust to build and run the program. The easiest way to install ukebox
is to use cargo
.
$ cargo install ukebox
Alternatively, get the source code by cloning the repo from Github.
$ git clone https://github.com/noeddl/ukebox
Downloadable binaries for different platforms will be provided in upcoming releases.
USAGE:
ukebox [OPTIONS] <SUBCOMMAND>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-t, --tuning <TUNING> Type of tuning to be used [default: C] [possible values: C, D, G]
SUBCOMMANDS:
chart Chord chart lookup
help Prints this message or the help of the given subcommand(s)
name Chord name lookup
When running the program with Rust, replace the command ukebox
with cargo run --release
, e.g. cargo run --release -- chart G
.
Use the subcommand chart
to look up the chart for a given chord name. By default, the first matching chord voicing is presented. Use the flag --all
to get all possible voicings of the same chord. You can use additional options to further filter the result, e.g. by specifying a minimal or a maximal fret that should be involved in the chord voicing.
USAGE:
ukebox chart [FLAGS] [OPTIONS] <chord>
FLAGS:
-a, --all Print out all voicings of <chord> that fulfill the given conditions
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
--max-fret <FRET_ID> Maximal fret up to which to play <chord> [default: 12]
--max-span <FRET_COUNT> Maximal span between the first and the last fret pressed down when playing <chord>
[default: 4]
--min-fret <FRET_ID> Minimal fret (= minimal position) from which to play <chord> [default: 0]
--transpose <SEMITONES> Number of semitones to add (e.g. 1, +1) or to subtract (e.g. -1) [default: 0]
-t, --tuning <TUNING> Type of tuning to be used [default: C] [possible values: C, D, G]
ARGS:
<CHORD> Name of the chord to be shown
Some examples:
$ ukebox chart G
[G - G major]
A ||---|-o-|---|---|- B
E ||---|---|-o-|---|- G
C ||---|-o-|---|---|- D
G o||---|---|---|---|- G
$ ukebox chart --tuning D G
[G - G major]
B o||---|---|---|---|- B
F# ||-o-|---|---|---|- G
D o||---|---|---|---|- D
A ||---|-o-|---|---|- B
$ ukebox chart --min-fret 3 G
[G - G major]
A -|---|-o-|---|---|- D
E -|---|---|---|-o-|- B
C -|---|---|---|-o-|- G
G -|-o-|---|---|---|- B
4
$ ukebox chart --tuning D --min-fret 3 G
[G - G major]
B -|-o-|---|---|---|- D
F# -|---|---|-o-|---|- B
D -|---|---|-o-|---|- G
A -|---|---|-o-|---|- D
3
$ ukebox chart --transpose 1 C
[C# - C# major]
A ||---|---|---|-o-|- C#
E ||-o-|---|---|---|- F
C ||-o-|---|---|---|- C#
G ||-o-|---|---|---|- G#
$ ukebox chart --transpose -2 C
[Bb - Bb major]
A ||-o-|---|---|---|- Bb
E ||-o-|---|---|---|- F
C ||---|-o-|---|---|- D
G ||---|---|-o-|---|- Bb
$ ukebox chart --all --max-fret 5 C
[C - C major]
A ||---|---|-o-|---|- C
E o||---|---|---|---|- E
C o||---|---|---|---|- C
G o||---|---|---|---|- G
A ||---|---|-o-|---|- C
E o||---|---|---|---|- E
C ||---|---|---|-o-|- E
G o||---|---|---|---|- G
A ||---|---|-o-|---|- C
E ||---|---|-o-|---|- G
C ||---|---|---|-o-|- E
G o||---|---|---|---|- G
A -|-o-|---|---|---|- C
E -|-o-|---|---|---|- G
C -|---|-o-|---|---|- E
G -|---|---|-o-|---|- C
3
Use the subcommand name
to look up the chord name(s) corresponding to a given chord fingering.
USAGE:
ukebox name [OPTIONS] <FRET_PATTERN>
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-t, --tuning <TUNING> Type of tuning to be used [default: C] [possible values: C, D, G]
ARGS:
<FRET_PATTERN> A compact chart representing the finger positions of the chord to be looked up
Some examples:
$ ukebox name 2220
D - D major
$ ukebox name --tuning D 2220
E - E major
$ ukebox name 0233
Csus2 - C suspended 2nd
Gsus4 - G suspended 4th
If the fret pattern contains fret numbers greater than 9 you have to add spaces between the fret numbers and embed them in quotes:
$ ukebox name "7 7 7 10"
G - G major
Currently, ukebox
can handle the following types of chords:
- major chords, e.g.
C
,D#
,Eb
- minor chords, e.g.
Cm
,D#m
,Ebm
- suspended second chords, e.g.
Csus2
,D#sus2
,Ebsus2
- suspended fourth chords, e.g.
Csus4
,D#sus4
,Ebsus4
- augmented triads, e.g.
Caug
,D#aug
,Ebaug
- diminished triads, e.g.
Cdim
,D#dim
,Ebdim
- dominant 7th chords, e.g.
C7
,D#7
,Eb7
- minor 7th chords, e.g.
Cm7
,D#m7
,Ebm7
- major 7th chords, e.g.
Cmaj7
,D#maj7
,Ebmaj7
- minor/major 7th chords, e.g.
CmMaj7
,D#mMaj7
,EbmMaj7
- augmented 7th chords, e.g.
Caug7
,D#aug7
,Ebaug7
- augmented major 7th chords, e.g.
CaugMaj7
,D#augMaj7
,EbaugMaj7
- diminished 7th chords, e.g.
Cdim7
,D#dim7
,Ebdim7
- half-diminished 7th chords, e.g.
Cm7b5
,D#m7b5
,Ebm7b5
More types of chords will be supported in future versions (see #35).
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.