noeddl / ukebox Goto Github PK
View Code? Open in Web Editor NEWA ukulele chord toolbox in Rust
License: Apache License 2.0
A ukulele chord toolbox in Rust
License: Apache License 2.0
Chord finding the other way around:
The user inputs a chord pattern in a simple format (e.g. 2220
) and is presented the name of the chord (in this case D
).
This probably starts making sense and fun once we can handle enough different types of chords.
Add a command line option to specify a minimal fret from which to show the requested chord and display the chord accordingly.
For example, cargo run -- --min-fret 3 C
should give
[C]
A -+-●-+---+---+---+ C
E -+-●-+---+---+---+ G
C -+---+-●-+---+---+ E
G -+---+---+-●-+---+ C
3
Add minor chord quality and handle chord names such as Cm
, C#m
etc.
Present the correct note name depending on the name of the chord and its intervals, e.g.
[F#]
A ||-●-+---+---+---+ A#
E ||---+-●-+---+---+ F#
C ||-●-+---+---+---+ C#
G ||---+---+-●-+---+ A#
vs.
[Gb]
A ||-●-+---+---+---+ Bb
E ||---+-●-+---+---+ Gb
C ||-●-+---+---+---+ Db
G ||---+---+-●-+---+ Bb
Some chord shapes are okay to play in the basic position (with one or more open strings) but would require spreading your fingers across five frets in higher positions (see e.g. G#mMaj7
or some diminished chords). This is a problem because a) it makes the chords hard to play and b) ukebox cannot display them correctly because currently, it only shows a diagram of four frets.
These cases should be handled somehow, either by showing them correctly (and extending the diagram to five frets) or by allowing the corresponding chord shapes in the basic positions but ignoring everything that would require more than four frets.
Add option/subcommand to transpose a chord a given number of semitones up or down.
Add a command line option for choosing a type of tuning. Let's start by providing the options C
and D
, C
being the default.
Some of the chords generated with the help of the chord shapes could be played in a simpler way with one of the strings being left open. I noticed this at least for Em
and F#m
. The respective fret could be marked as optional with brackets, e.g. something like that:
A ||---+-●-+---+---+ B
E ||---+---+-●-+---+ G
C ||---+---+---+-●-+ E
G ||---+---+---+(●)+ G (B)
Some chords can have several names, e.g. Caug
is also called C+
(see also #31). Allow at least some common variants.
The idea is that the user inputs a sequence of chord names and is presented a diagram showing the most convenient way to play these chords. I'm not sure how (and if at all) this can be computed reliably but it will probably involve some kind of distance measure between different chord shapes.
For this, the compact representation described in #16 would probably be helpful ad easier to read.
Something similar could also be useful for melodies.
Split into several files and clean up.
Currently, G#
is not generated correctly. The "chord" computed only contains two of the necessary notes.
[G#]
A ||---+---+-●-+---+ C
E ||---+---+---+-●-+ G#/Ab
C ○||---+---+---+---+ C
G ||-●-+---+---+---+ G#/Ab
The correct result would be this:
[G#]
A ||---+---+-●-+---+ C
E ||---+---+---+-●-+ G#/Ab
C ||---+---+-●-+---+ D#/Eb
G ||-●-+---+---+---+ G#/Ab
So I realized that my "ASCII art" output in fact uses Unicode characters which may look different depending on the font used and which are destroyed if the encoding of the shell is e.g. latin-1 instead of utf8.
The obvious thing is to use o instead of ○ to mark open strings. Instead of ● we could use # or maybe @. (I will probably change my mind about this several times, anyway.)
Hi @noeddl! 👋 I find this project super cool, I just would like to know if it's being maintained, is it?
The chord shapes 2020
for D7
and 2010
for Dm7
are technically "wrong" because they both lack the root note D
. I included them anyway because these were the ways I knew how to play these chords but now I think I should remove them from the program and start playing the "real" D7
and Dm7
. 🙂
See also the discussion here: https://ukulele-chords.com/D7
It could be handy to have an alternative, more compact representation of a chord, something like that:
D
A |--0--
E |--2--
C |--2--
G |--2--
It could be presented when a command line option is used, e.g. --compact
.
Δ#4
Δ#11
', 'lydian'],dominant #9
'],major #11 (lydian)
'],(#5)add9
M#5add9 +add9', ''],List copied from https://github.com/hyvyys/chord-fingering/blob/master/src/CHORD_DATA.js
Old list with links:
C6
C7sus2
C7sus4
C5
Cadd9
/C2
Cadd11
/C4
There's still more that could be added later, see e.g. extended and altered chords.
More chords, more fun:
Caug
/C+
Cdim
/C0
Caug7
/C+7
Cdim7
/C07
Cm7b5
Cmaj7
/CM7
CmMaj7
/CmM7
CaugM7
/C+M7
Csus2
Csus4
To come up with this list, I used mainly these two sources:
e.g. with C --all
to show C
in all positions.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.