Show HN: React Guitar – A guitar component for React
react-guitar.com
react-guitar.com
It‘s a work in progress but you can already play around with scales and different tunings
In fact react-guitar is the end result of a very similar project that I never finished.
I needed to reuse the guitar component for another project I am working on now so I decided to make it open source.
Here's mine http://firemeinterns.com/fretter/
Here is the source code [1], only updated to compile cleanly with a modern C compiler and not to depend on any libraries or functions that were specific to THINK C, plus one bug fix and some reformatting.
Here are some usage examples:
$ ./chord
c
C: C E G
<3>|-----|-----|-<5>-|-----|-----|-----|-----|-<1>-|-----|-----|-----|-<3>-|
|-<1>-|-----|-----|-----|-<3>-|-----|-----|-<5>-|-----|-----|-----|-----|
<5>|-----|-----|-----|-----|-<1>-|-----|-----|-----|-<3>-|-----|-----|-<5>-|
|-----|-<3>-|-----|-----|-<5>-|-----|-----|-----|-----|-<1>-|-----|-----|
|-----|-----|-<1>-|-----|-----|-----|-<3>-|-----|-----|-<5>-|-----|-----|
<3>|-----|-----|-<5>-|-----|-----|-----|-----|-<1>-|-----|-----|-----|-<3>-|
c7
C7: C E G A#
<3>|-----|-----|-<5>-|-----|-----|-<7>-|-----|-<1>-|-----|-----|-----|-<3>-|
|-<1>-|-----|-----|-----|-<3>-|-----|-----|-<5>-|-----|-----|-<7>-|-----|
<5>|-----|-----|-<7>-|-----|-<1>-|-----|-----|-----|-<3>-|-----|-----|-<5>-|
|-----|-<3>-|-----|-----|-<5>-|-----|-----|-<7>-|-----|-<1>-|-----|-----|
|-<7>-|-----|-<1>-|-----|-----|-----|-<3>-|-----|-----|-<5>-|-----|-----|
<3>|-----|-----|-<5>-|-----|-----|-<7>-|-----|-<1>-|-----|-----|-----|-<3>-|
c#m
C#m: C# E G#
<3>|-----|-----|-----|-<5>-|-----|-----|-----|-----|-<1>-|-----|-----|-<3>-|
|-----|-<1>-|-----|-----|-<3>-|-----|-----|-----|-<5>-|-----|-----|-----|
|-<5>-|-----|-----|-----|-----|-<1>-|-----|-----|-<3>-|-----|-----|-----|
|-----|-<3>-|-----|-----|-----|-<5>-|-----|-----|-----|-----|-<1>-|-----|
|-----|-----|-----|-<1>-|-----|-----|-<3>-|-----|-----|-----|-<5>-|-----|
<3>|-----|-----|-----|-<5>-|-----|-----|-----|-----|-<1>-|-----|-----|-<3>-|
You simply type chord names, and it shows you what notes are in the chord and where you can find them on the guitar fretboard. The first example is a C chord. It tells you the notes you want are C E G. In the diagram a <1> means that is a place you can play the root of the chord, a <3> is the third, a <5> is the fifth. For the C chord, then, we see that on open first string would give us <3>, the third fret <5>, the root is on the 8th fret, and the <3> is also on the 12th fret.Chord names are the root note (with # for sharp or b for flat), and modifiers 'm' for minor, '6', '7', or '9' for a 6th, 7th, or 9th chord. (I have no idea why I did not include diminished chords).
If a line starts with '-' it is a command to change settings. Commands are "-cN" to set a capo on the Nth fret
Here are the commands. "-cN" for a capo on the Nth fret. "-t<notes>" to set the tuning for each string, where <notes> is a list of 6 note names (which can each be followed by # or b). "-Td" or "-TD" for D tuning. "-sN" to transpose by N half-steps (N can be negative). "-n" to switch to a narrower display and "-w" to switch back to normal. Narrow display looks like this:
C: C E G
3 |---|---|-5-|---|---|---|---|-1-|---|---|---|-3-|---|---|-5-|---|
|-1-|---|---|---|-3-|---|---|-5-|---|---|---|---|-1-|---|---|---|
5 |---|---|---|---|-1-|---|---|---|-3-|---|---|-5-|---|---|---|---|
|---|-3-|---|---|-5-|---|---|---|---|-1-|---|---|---|-3-|---|---|
|---|---|-1-|---|---|---|-3-|---|---|-5-|---|---|---|---|-1-|---|
3 |---|---|-5-|---|---|---|---|-1-|---|---|---|-3-|---|---|-5-|---|
It's always amusing to look at one's old code. Much of it seems like it was written by someone else. For instance, I see a lot more spaces around punctuation than I would use today. I think that is probably because the editor I used back then did not have syntax highlighting, so extra space was needed to make sure you didn't confuse consecutive tokens.You should properly release it and possibly publish it in the main package managers.
I didn't end up finishing the project but created some fun visuals...
https://user-images.githubusercontent.com/42359/88242522-6bb...
https://user-images.githubusercontent.com/42359/88242530-724...
I got a basic page up that lets you draw Freboard shapes (and play sounds using Tone.js) declaratively:
<div class="pattern" data-notes="1, b3, 4^, 5, b7^, 8"></div>
Where the notes represent scale degrees and the caret is a string skip:https://intuitivemusic.com/fretboard.js/
Using a similar framework I also created a page where I attempted to make sense of saxophone fingerings (you can hold down on shapes to hear sounds):
Made the front page of HN a couple of years ago too: https://news.ycombinator.com/item?id=18037657
Any chance that the fingering indicators can take text or color? I use that a lot in my current tool. Not to rush you with feature requests or anything :p
You can customise the content of the indicators with the "renderFinger" prop and render whatever you want inside.
See https://github.com/4lejandrito/react-guitar/blob/master/pack...
Feel free to create an issue if that's not enough for you. I'll be more than happy to help.
Except for the stringiest instrument of all: the piano. :)
Edit: _Obviously_ this project looks really cool and I love react so I'll be playing around with it for sure. Props to the author.
Phone screen with multi touch will get you that,
Invite your friends to same network it's even more fun. :)
Thank you for your great work! I see some wonderful potential educational uses for this. If you'd like further feedback, please don't hesitate to get in touch!
Thanks for your comment :)
According to https://en.wikipedia.org/wiki/List_of_guitar_tunings
You might be referring to:
Neil Young -> "B-F-B-E-G-B" or "D-A-D-G-B-D"
Joni Mitchel -> "D-A-D-F-A-D" or "G-G-D-G-B-D"
Which ones are the correct ones?