Git Product home page Git Product logo

gtr-cof's Introduction

Guitar Dashboard

An interactive music theory dashboard for guitarists. http://guitardashboard.com/

The aim is to provide a graphical representation of music theory elements (scales, modes, chords etc) mapped to a guitar fretboard.

Developing with VS Code

Guitar Dashboard is written in Typescript using VS Code. Make all code changes in the src/*.ts files. Compilation outputs to the docs folder, do not edit the *.js or *.js.map files in this directory. They are included in the source repository because the website is hosted in GitHub pages which does not support Typescript compilation.

  1. Clone or fork-and-clone this repository.
  2. File -> Open folder at the root directory of the cloned repository.
  3. To develop locally using lite-server:
    • npm install
    • npm start
  4. Browse to http://localhost:10001/
  5. Edit the src/*.ts, index.html and gtr-cof.css files.
  6. Commit, push to GitHub and create a pull request :)

Developing without VS Code

First, make sure you have TypeScript installed. If not, npm install -g typescript will do the trick.

  1. Clone the repo and go into it
  2. Run npm install
  3. Open a shell and run tsc --watch so that the sources are always rebuilt automatically on source changes
  4. Open another shell and run npm start in it so that results will be visible in a browser
  5. Browse to http://localhost:10001/
  6. Edit the src/*.ts, index.html and gtr-cof.css files.
  7. Commit, push to GitHub and create a pull request :)

gtr-cof's People

Contributors

bigodines avatar damassi avatar dependabot[bot] avatar mikehadlow avatar parrker avatar shengwu avatar styfle avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gtr-cof's Issues

detail info for scale

better to have detail info for scale (the degree, the interval space, the semitone number) so that user can memorize it without calculate it from the chromatic circle
e.g. for diatonic aeolian mode
the degree : 1 2 b3 4 5 b6 b7
the interval space : W H W W H W W
the semitone number : 0 2 3 5 7 8 10 12

the logic can be translate from intervals on music-module.ts
e.g.
intervals: new mod.Mod([true, false, true, false, true, true, false, true, false, true, false, true])

6 Aeolian Mode or Natural Minor Scale or Descending Melodic Minor Scale - A

thanks

fretboard configuration

it'll be nice to have a fretboard configuration (total fret shown on guitar and fret custom to elimiate unused frets)
case for fret custom
there are pattern that repeated on fretboard guitar, and for newbie who want to learn A Minor Pentatonic using 6 Strings Standard Tuning
can be focused on pattern 1 (for example) which is start from fret 5 - fret 8, so the other fretboards not shown and they can focused just on that fret

thanks

scale relationship

not every song play just using 1 scale, sometimes 1 song can play in more than 1 scale, it can help melodic guitarist to improvisation by using this info
the logic is base on the interval, just match it between the scale
like example below, when song started to play using major pentatonic scale in intro (blue), when goes to the middle the guitarist can change it into lydian mode just by adding b5 and 7 note into the melodic (the different note between scale is indicate in green)

1 Major Pentatonic Scale

thanks

Request: adding 'mirror mode' for lefties?

Hi there!
Thank you so much for the clean, easy to use and intuitive app. I have 1 request, as a lefty, I spend most of my time looking at other righties' neck when learning new things on the guitar, and it is exactly as I am looking at myself in the mirror.
So basically what I'd love to be implemented is another option for the current left-handed mode, but with the low E on top (some apps call it the 'flip the nut' mode).

All the best!

no 7 in chord progression

on harmonic minor scale :

  • harmonic minor no 7 on viidim
  • lydian #2 no 7 on iidim
  • ionian #5 no 7 on vdim
  • superlocrian no 7 on idim
  • dorian #4 no 7 on ivdim
  • phrygian dominant no 7 on iiidim
  • locrian #6 no 7 on vidim

not checked the others scale, seems have the same issue
the 7 indicate you played it with seventh chord, but it's a choice, you can play in a triad too, but if you know the formula of building chord or chord progression not everything is common e.g.
major scale/ionian mode
135 = ceg = c major scale (major)
125 = cdg = csus2 (suspended)
145 = cfg = csus4 (suspended)
1357 = cegb = cmaj7 (major)
1356 = cega = c6 (dominant)
etc

suggestion

  • better to remove 7 on chord progression (recommended)
    or
  • not have chord progression at all (not recommended, because chord in roman numeral is a big help for newbie)

thanks

chord in scale

can help harmonization guitarist (rhythm) to assist the melodic guitarist, or melodic guitarist to play arpeggio (broken chord) e.g. when song start to play in major pentatonic scale, the user know what suitable chord to match with the scale
the logic is on the interval that match between the scale and chord e.g.
major pentatonic scale degree = 12356
major chord degree = 135

so when melodic guitarist using major pentatonic scale, the rhythm guitarist can play it with major chord or another chord that match with major pentatonic degree, semitone or interval

thanks

chord progression type is not right for scale

in harmonic minor scale the chord progression should be :
Type
1 Minor
2 Diminished
3 Augmented (in current code it written as Major)
4 Minor
5 Major
6 Major
7 Diminished

Roman Numeral
i
iio
♭iii+
iv
V
♭VI
viio

Triad Chord
Cm
Ddim
E♭aug
Fm
G
A♭
Bdim

Seventh Chord
CmM7
Dm7♭5
E♭augM7
Fm7
G7
A♭maj7
Bdim7

not check the other, but i can send you the formula how to get the chord result if you want in doc or pdf file

octave name beside the note

when play in choir better to have octave name beside the note e.g. in standard choir usually use SATB (Sopran Alto Tenor Bass) which every vocal characteristic (male/female) has it's own range (base on octave)
e.g. which fretboard must be press to play melody with tenor vocal on major third tuning
Tenor

add arpeggio

the idea is to show the chord tone on fretboard that can be use to play arpeggio, something similar like the scale, but only show the chord tone
e.g. for major arpeggio (semitone : 0-4-7, degree : 1-3-5)
music-module.ts (not sure you want to implement this on the same module or create new)

    { name: "Major", intervals: new mod.Mod([true, false, false, false, true, false, false, true, false, false, false, false]), modes: [{ name: 'Major', index: 0}], defaultModeIndex: 0 },

thanks

can't add chromatic scale

can't add chromatic scale, already tried on music-module.ts
{ name: "Chromatic", intervals: new mod.Mod([true, true, true, true, true, true, true, true, true, true, true, true]), modes: [{ name: 'Chromatic', index: 0}], defaultModeIndex: 0 },

seems can't have the scale more than 10 notes
no error occured, but the result is not expected (the scale didnt change when click on chromatic scale drop down menu)

add new tuning to consider (only natural note)

tuning-module.ts
// (open tuning, cross note tuning) : best to play harmonization or as rhythm guitar (playing chord with just minimal finger 1 or two)
{ tuning: "DFACEG", dots: guitarDots, description: "Dm9/11" },
{ tuning: "CGCDGC", dots: guitarDots, description: "Csus2" },
{ tuning: "DADEAB", dots: guitarDots, description: "D6sus2" },
{ tuning: "DADEAC", dots: guitarDots, description: "D7sus2" },
{ tuning: "DADFAD", dots: guitarDots, description: "Cross Note D" },
{ tuning: "DADFAB", dots: guitarDots, description: "Dm6" },
{ tuning: "DADFAC", dots: guitarDots, description: "Dm7" },
{ tuning: "DADGAD", dots: guitarDots, description: "Dsus4" },

// regular tuning, best to learn note because it's symetrical, another useful tuning is major third and minor third but right now your code cant support accidental note to add major third and minor third tuning
{ tuning: "BFBFBF", dots: guitarDots, description: "Augmented Fourths" },

// another bass standard tuning for 5th strings and 6 strings
{ tuning: "EADGC", dots: guitarDots, description: "Bass 5 Strings Standard High" },
{ tuning: "BEADG", dots: guitarDots, description: "Bass 5 Strings Standard Low" },
{ tuning: "BEADGC", dots: guitarDots, description: "Bass 6 Strings Standard" },

thanks

building without vscode

is there currently a way to build this project without using the vscode editor?

if not, I can rig one up.

link text with svg shapes to more easily style with css

I am having trouble styling colors because it seems the shapes (background fill) are not correlated with the note text (foreground text). E.G. maybe I'm missing something, but I cannot make the .tonic-button-selected fill = black and the .tonic-button-selected .tonic-text = white because there is no ID for the selected tonic text. Nor is the text contained in a container with the shape where I can cascade styles.

I would like to restyle a lot of the interface color-wise, but it seems I am limited to most text being one color.

OT:
This is an awesome tool -- I had extended a similar fretboard here tool in the past https://github.com/deltadada/Fretboard-Studies

I like your approach to the circle of fifths to set a lot of things. I feel the color hierarchy could use some improvements, a lot of which requires differentiating dark text on light bg vs. white text on dark bg. I have a hard time understanding color choices, e.g. the vii being an extremely eye-grabbing red.

Hovering on notes

Hovering on notes on any of the blocks (note-circle, fretboard, tonic) should light up all instances of that note

can't add tuning with accidental note

can't add tuning with accidental note, already tested add this on tuning-module.ts :

    { tuning: "G#CEG#CE", dots: guitarDots, description: "test0" },
    { tuning: "AbCEAbCE", dots: guitarDots, description: "test1" },
    { tuning: "A♭CEA♭CE", dots: guitarDots, description: "test2" },

what i expected ?
can add major thirds tuning that consists of G#-C-E-G#-C-E

ref:
https://en.wikipedia.org/wiki/Major_thirds_tuning

thanks

show the name of the chord

it's nice to have show the name of the chord when user click the note e.g.
c-e-g = C Mayor
a-c-e = A Minor
etc

thanks

Chromatic circle improvements

  1. Start on C at the top (this is more common than A, and aligns with wikipedia)
  2. Display chords on chromatic circle (maj, min, dim, etc.), with fretboard map (which comes automatically I guess).

better to 'set C to noon' as default

tried to change music-module.ts with :
export let naturals: Natural[] = [ { id: 0, index: 0, label: "C" }, { id: 1, index: 2, label: "D" }, { id: 2, index: 3, label: "E" }, { id: 3, index: 5, label: "F" }, { id: 4, index: 7, label: "G" }, { id: 5, index: 8, label: "A" }, { id: 6, index: 10, label: "B" } ];

but not sure it can affect the others aspect (chromatic, circle of fifth, guitar fretboard)

thanks

generate chord names

For example, if select C, E-flat, G, and B-flat, then it would display "Cm7" somewhere.

scale connection

the idea is to have melodic guitarist to play scale in certain ways :

  • 2 NPS (Note Per String)
  • 3 NPS (Note Per String)
  • Vertical (up down scale from lowest string into thickest string)
  • Horizontal (the scale map into 1 strings only)
  • Diagonal (the scale map diagonal, can be applied only on symmetrical tuning e.g. minor third, major third, augmented fourth)
  • Full (the scale map on all fretboard, already have in guitardashboard.com)
  • Double Stop (same like 'horizontal' above, but the user can select one more string (total strings shown : 2 strings) )
  • Triple Stop (same like 'double stop' above, but the user can select one more string (total strings shown : 3 strings) )

add another parameter string to be input by user, because not every string have a same note (open string note) and add another button to select the method (2nps, 3nps, etc)

thanks

Different dots for violin/viola

I see that module "tuning" has a programmable concept of dots.

    { tuning: "GDAE", dots: guitarDots, description: "Violin" },
    { tuning: "CGDA", dots: guitarDots, description: "Viola" },

For violin and viola there are no dots, but usually beginners have them "pasted on" on as:

String C: D E F G (C)

move menu into html select tag

there's a lot of scales and tunings around the world, when people try to add it manually, seems the menu will take long (up & down), better to move the menu into html select tag
another advantage is user can reach the scales or tuning quicker than using menu by using their keyboard
what do you think ?

Provide Do Re Mi Fa So La Ti Do note names

From @jm_fayard (twitter)
Could you add a settings to display the notes as Do Re Mi Fa So La Ti Do?
Yes C=DO, C#=DO#, Cb=DOb
For B, we actually call it SI (not Ti) in France/Italy/Spain

save on cookies

because of user behaviour (different for each person) better to save on cookies for :

  • left handed fretboard (settings)
  • flip nut (settings)
  • set c to noon (settings)
  • tunings
  • scale

thanks

add and edit scale

music-module.ts
edit

  • the sequence of diatonic scale, because the 1st index on diatonic scale should goes to major scale / ionian mode
  • rename the jazzminor into ascending melodic minor scale (source wikipedia), it's more common and the sequence between it's mode

add

let majorPentatonicModes: Mode[] = [
    { name: 'Major Pentatonic', index: 0 },
    { name: 'Egyptian', index: 2 },
    { name: 'Blues Minor', index: 4 },
    { name: 'Blues Major', index: 7 },
    { name: 'Minor Pentatonic', index: 9 },
];

let hirajoshiModes: Mode[] = [
    { name: 'Hirajoshi', index: 0 },
    { name: 'Iwato', index: 6 },
    { name: 'In', index: 11 },
];

let majorHexatonicModes: Mode[] = [
    { name: 'Major Hexatonic', index: 0 },
    { name: 'Minor Hexatonic', index: 2 },
];

let diatonicModes: Mode[] = [
    { name: 'Major / Ionian', index: 0 },
    { name: 'Dorian', index: 2 },
    { name: 'Phrygian', index: 4 },
    { name: 'Lydian', index: 5 },
    { name: 'Mixolydian', index: 7 },
    { name: 'N Minor / Aeolian', index: 9 },
    { name: 'Locrian', index: 11 },
];

let doubleHarmonicMajorModes: Mode[] = [
    { name: 'Double Harmonic Major', index: 0 },
    { name: 'Lydian ♯2 ♯6', index: 1 },
    { name: 'Ultraphrygian', index: 4 },
    { name: 'Hungarian / Gypsy Minor', index: 5 },
    { name: 'Oriental', index: 7 },
    { name: 'Ionian ♯2 ♯5', index: 8 },
    { name: 'Locrian ♭♭3  ♭♭7', index: 11 },
];

let harmonicMajorModes: Mode[] = [
    { name: 'Harmonic Major', index: 0 },
    { name: 'Dorian ♭5', index: 2 },
    { name: 'Phrygian ♭4', index: 4 },
    { name: 'Lydian ♭3', index: 5 },
    { name: 'Mixolydian ♭2', index: 7 },
    { name: 'Lydian Augmented #2', index: 8 },
    { name: 'Locrian ♭♭7', index: 11 },
];

let harmonicMinorModes: Mode[] = [
    { name: 'Harmonic Minor', index: 0 },
    { name: 'Locrian ♯6', index: 2 },
    { name: 'Ionian ♯5', index: 3 },
    { name: 'Dorian ♯4', index: 5 },
    { name: 'Phrygian Dominant', index: 7 },
    { name: 'Lydian ♯2', index: 8 },
    { name: 'Superlocrian', index: 11 },
];

let ascendingMelodicMinorModes: Mode[] = [
    { name: 'Ascending Melodic Minor', index: 0 },
    { name: 'Assyrian', index: 2 },
    { name: 'Lydian Augmented', index: 3 },
    { name: 'Lydian Dominant', index: 5 },
    { name: 'Mixolydian ♭6', index: 7 },
    { name: 'Locrian ♮2', index: 9 },
    { name: 'Altered scale', index: 11 },
];

let diminishedModes: Mode[] = [
    { name: 'Whole Half Diminished', index: 0 },
    { name: 'Half Whole Diminished', index: 2 },
];

let majorBebopModes: Mode[] = [
    { name: 'Major Bebop', index: 0 },
    { name: 'Harmonic Minor Bebop', index: 9 },
];

let dominantBebopModes: Mode[] = [
    { name: 'Dominant Bebop', index: 0 },
    { name: 'Locrian Bebop', index: 4 },
    { name: 'Dorian Bebop', index: 7 },
];

export let scaleFamily: ScaleFamily[] = [
    { name: "Major Pentatonic", intervals: new mod.Mod([true, false, true, false, true, false, false, true, false, true, false, false]), modes: majorPentatonicModes, defaultModeIndex: 0 },
    { name: "Hirajoshi", intervals: new mod.Mod([true, false, false, false, true, false, true, true, false, false, false, true]), modes: hirajoshiModes, defaultModeIndex: 0 },
    { name: "Major Hexatonic", intervals: new mod.Mod([true, false, true, false, true, true, false, true, false, true, false, false]), modes: majorHexatonicModes, defaultModeIndex: 0 },
    { name: "Augmented", intervals: new mod.Mod([true, false, false, true, true, false, false, true, true, false, false, true]), modes: [{ name: 'Augmented', index: 0}], defaultModeIndex: 0 },
    { name: "Blues", intervals: new mod.Mod([true, false, false, true, false, true, true, true, false, false, true, false]), modes: [{ name: 'Blues', index: 0}], defaultModeIndex: 0 },
    { name: "Prometheus", intervals: new mod.Mod([true, false, true, false, true, false, true, false, false, true, true, false]), modes: [{ name: 'Prometheus', index: 0}], defaultModeIndex: 0 },
    { name: "TriTone", intervals: new mod.Mod([true, true, false, false, true, false, true, true, false, false, true, false]), modes: [{ name: 'TriTone', index: 0}], defaultModeIndex: 0 },
    { name: "Whole Tone", intervals: new mod.Mod([true, false, true, false, true, false, true, false, true, false, true, false]), modes: [{ name: 'Whole Tone', index: 0}], defaultModeIndex: 0 },
    { name: "Diatonic", intervals: new mod.Mod([true, false, true, false, true, true, false, true, false, true, false, true]), modes: diatonicModes, defaultModeIndex: 0 },
    { name: "Double Harmonic Major", intervals: new mod.Mod([true, true, false, false, true, true, false, true, true, false, false, true]), modes: doubleHarmonicMajorModes, defaultModeIndex: 0 },
    { name: "Harmonic Major", intervals: new mod.Mod([true, false, true, false, true, true, false, true, true, false, false, true]), modes: harmonicMajorModes, defaultModeIndex: 0 },
    { name: "Harmonic Minor", intervals: new mod.Mod([true, false, true, true, false, true, false, true, true, false, false, true]), modes: harmonicMinorModes, defaultModeIndex: 0 },
    { name: "Ascending Melodic Minor", intervals: new mod.Mod([true, false, true, true, false, true, false, true, false, true, false, true]), modes: ascendingMelodicMinorModes, defaultModeIndex: 0 },
    { name: "Diminished", intervals: new mod.Mod([true, false, true, true, false, true, true, false, true, true, false, true]), modes: diminishedModes, defaultModeIndex: 0 },
    { name: "Major Bebop", intervals: new mod.Mod([true, false, true, false, true, true, false, true, true, true, false, true]), modes: majorBebopModes, defaultModeIndex: 0 },
    { name: "Dominant Bebop", intervals: new mod.Mod([true, false, true, false, true, true, false, true, false, true, true, true]), modes: dominantBebopModes, defaultModeIndex: 0 },
    { name: "Melodic Minor Bebop", intervals: new mod.Mod([true, false, true, true, false, true, false, true, true, true, false, true]), modes: [{ name: 'Melodic Minor Bebop', index: 0}], defaultModeIndex: 0 },
    { name: "Phrygian Dominant Bebop", intervals: new mod.Mod([true, true, false, false, true, true, false, true, true, false, true, true]), modes: [{ name: 'Phrygian Dominant Bebop', index: 0}], defaultModeIndex: 0 },
];

thanks

accidental is not standard

on diatonic scale : major / ionian scale
when click on A as root note show B♭ while rest of accidental note using #
when click on B as root note show all of accidental note using #

suggestion better to have a button (in the middle of chromatic and cof) so that user can choose the accidental sign ♭ or #

thanks

GUI state is not always consistent

When you click the note numbers (1, 3, 5, etc.), the note displays on the two circles and the fret board below do not update immediately. When you select notes on the circles, the numbers do not update.

Using different note names

Thanks for your excellent tool!

I think it would be nice to have a different set of note names - Italians use "Do re mi fa sol la si", Germans use H instead of B but have different names for e.g. C#.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.