Giter Site home page Giter Site logo

evashort / chords Goto Github PK

View Code? Open in Web Editor NEW
25.0 3.0 1.0 745 KB

Text-based chord progression editor

Home Page: http://evanshort.name/chords/

License: MIT License

JavaScript 15.03% HTML 2.82% Elm 82.15%
music-theory music-composition elm elm-lang chords elm-language chord-visualization chord-progression web-audio web-audio-api

chords's People

Contributors

evashort 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

Watchers

 avatar  avatar  avatar

Forkers

ddonahue

chords's Issues

Janko keyboard

Janko keyboard has a nice property: a chord has the same shape in any key.

Also, it provides good visual representations of scales:

Barlines

Allow users to type pipe characters that function as barlines.

When a line of text contains no barlines, the default division is two chords per bar, with the last chord taking a full bar if there's an odd number of chords.

  • |A| = Full bar of A
  • |A B| = Half bar each of A and B
  • |A B C| = One beat each of A and B, half bar of C
  • |A B C D| = One beat of each chord
  • |A B C D E| = Too many chords to fit in a bar. Default barlines are added between B and C as well as between D and E.

If a line of text does not start with a barline, chords before the first barline use the default division.

If a line of text does not end with a barline, chords after the last barline use the default division.

When the user clicks the first chord of a bar, playback automatically advances to the end of the bar. This only applies if the user has put an explicit barline on both sides.

In order to fit 4 chords in a bar, the "Basic" strum pattern will have to be adjusted so that each cycle is half a bar. This means its default BPM will be 65 instead of 125.

Display inversions

Add a set of radio buttons under the keyboard like ( Root position | Over E | Over G ). When these buttons are clicked, set the inversion field of the keyboard object, causing it to display the inversion. Reset the inversion field when another chord is played. When the user selects the notes of an inverted chord, set the customInversion field of the keyboard object and show the chord name below the keyboard as if it was a normal chord.

Add support for Nashville Number System

First of all: Really cool project! ๐Ÿ˜ I think I'm going to add a link to the website to all my song ideas from now on. Makes it much easier to pick up a song again after you haven't worked on it for a long time. ๐Ÿ™Œ

As an additional idea: It would be cool to be able to write the chords in the Nashville Number System.

Add full support for some inversions

In order of importance: Triad in first inversion, Triad in second inversion, Seventh chord in first inversion, Seventh chord in second inversion

MIDI export

Let's start with the simplest possible implementation:

  • A single "Download as MIDI" button
  • Midi file contains every chord in textbox in order
  • Chords play continuously for 4 beats each
  • Simplest possible voicing, just like Pad mode
  • Tempo is 120 BPM unless specified in the textbox

every keystroke appends to browser history stack

To reproduce, type a character, click Save in URL, then type a few more characters. To get back to your first savepoint, you will have to press the browser's back button once for each new character you typed.

sequence not finishing in pad mode

To reproduce, click some chords in pad mode, then click stop, then click some more chords. All chords will be added to the same sequence in history.

Trouble on right edge of grid when transposing

When last cell of row changes length, and rows above or below have more columns, cells above and below don't resize. To reproduce, use

C C
B

and transpose from C to G. The top left grid cell should expand but it doesn't.

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.