Music chords made easy:
var chord = require('music-chord')
var M9 = chord('1 3 5 7 9')
M9('D3') // => ['D3', 'F#3', 'A#3', 'C#4', 'E4']
var dom7 = chord('C E G Bb')
dom7('A4') // => ['A4', 'C#5', 'E5', 'G5']
Install via npm: npm i --save music-chord
and require it.
Currently there's no distribution for browsers, but is planned. You can use browserify, webpack or a similar tool to create one.
This is the basic usage:
var chord = require('music-chord')
chord('1 3 5 7b 9', 'F2') // => ['F2', 'A2', 'C3', 'Eb3', 'G3']
You can partially apply the function:
var dom79 = chord('1 3 5 7b 9')
dom79('F2') // => ['F2', 'A2', 'C3', 'Eb3', 'G3']
Its important to note that all chord notes are ordered by pitch:
chord('1 3 5 7 2', 'C') // => ['C', 'D', 'E', 'G', 'B']
You can build from notes the same way (again, ordered notes):
var m7b5 = chord('C Eb Gb Bb')
m7b5('D4') // => ['D4', 'F4', 'Ab4', 'C5']
var maj7drop2 = chord('C2 E2 G1 B2')
maj7drop2('C4') // => [ 'G3', 'C4', 'E4', 'B4' ]
Set null
as tonic to get the chord intervals:
var chord('C E G B', null) // => ['1P', '3M', '5P', '7M']
You can create a dictionary of chords with the dictionary
function:
var dictionary = require('music-chord/dictionary')
var chords = dictionary({ M: 'C E G', m: 'C Eb G'})
chords('M', 'G') // => ['G', 'B', 'D']
chords('m', 'G') // => ['G', 'Bb', 'D']
Use the built-in dictionaries with the fromName
:
var fromName = require('music-chord/fromName')
fromName('mMaj7', 'F') // => ['F', 'Ab', 'C', 'E']
As bonus, with fromName
function you can place the tonic before the type (with a space if you want to specify the octave):
var fromName = require('music-chord/fromName')
fromName('FmMaj7') // => ['F', 'Ab', 'C', 'E']
fromName('F2 mMaj7') // => ['F2', 'Ab2', 'C3', 'E3']
Cooming soon...
-
Add interval to a gamut
Like all the functions from gamut, this works with pitch-array notation format arrays. Probably you will want to decorate this function with
gamut.notes
orgamut.intervals
(see example)- Source:
gamut.add([1, 0, 0], [ [1, 0, 0], [2, 0, 0]]) // => [ [2, 0, 0], [3, 1, 0] ] var transpose = gamut.notes(gamut.add) transpose('2M', 'C D E') // => [ 'D', 'E', 'F#' ] var addIntervals = gamut.intevals(gamut.add) addIntervals('2M', '1P 2M 3M') // => [ '2M', '3M', '4A' ]
-
Get an array from a source. The source can be a string separated by spaces, commas or bars (
|
), an array or an object.This function does not perform any transformation to the items of the array. This function always return an array, even if its empty
Name Type Description source
String | Array | Object the source
- Source:
the source converted to an array
- Type
- Array
gamut.asArray('c d e') // => [ 'c', 'd', 'e' ] gamut.asArray('CMaj7 | Dm7 G7') // => [ 'CMaj7', 'Dm7', 'G7' ] gamut.asArray('1, 2, 3') // => ['1', '2', '3'] gamut.asArray([1, 'a', 3]) // => [1, 'a', 3] gamut.asArray(object) // => [ object ] gamut.asArray(null) // => [ ]
-
Build a chord from a source and a tonic
A source can be a list of intervals or notes. The tonic must be a pitch (with or without octave)
This function is currified, so you can partially apply the function passing one parameter instead of two (see example)
Name Type Description source
Array the list of intervals or notes
tonic
String the tonic of the chord or null to get the intervals
the chord notes (or intervals if null tonic)
- Type
- Array
var chord = require('music-chord') chord('1 3 5 6', 'G') // => ['G', 'B', 'D', 'E'] var maj79 = chord('C E G B D') maj79('A4') // => ['A4', 'C#5', 'E5', 'G#5', 'B5']
-
Create a chord dictionary
Name Type Description chordNames
Hash a hash that maps names to intervals (or notes)
aliases
Hash (Optional) a hash that maps names to names or null
- Source:
a function
chord(name, tonic)
- Type
- function
var dictionary = require('music-chord/dictionary') chords = dictionary({M: 'C E G', m: 'C Eb G'}) chords('m', 'F') // => ['F', 'Ab', 'C'] chords('M', 'A4') // => ['A4', 'C#5', 'E5']
-
Build chords by name
The same as
chord
function but using chord names instead of intervals. The chord name may contain the tonic placed before the type (see example)Name Type Description name
String the chord name
tonic
String (Optional) the tonic
- Source:
an array of notes in ascending order or null
- Type
- Array
var fromName = require('music-chord/fromName') fromName('C7b9') // => ['C', 'E', 'G', 'Bb', 'Db']
-
Gamut
- Source:
-
Get the gamut as intervals or decorate a function to return intervals
- Source:
gamut.intervals('C D E') // => [] var addIntervals = gamut.intervals(gamut.add) addIntervals('2M', '1P 5P') // => ['2M', '6M']
-
Get a gamut mapped to a function
Is important to notice that the function will receive pitches in pitch-array notation format.
This function can be partially applied
Name Type Description fn
function the function to map the gamut with
source
String | Array the gamut
- Source:
the mapped gamut
- Type
- Array
var addOctave = function(p) { return [p[0], p[1], p[2] + 1]} gamut.map(addOctave, [ [0, 0, 0], [1, 0, 0] ]) // => [ [0, 0, 1], [1, 0, 1]] var octaveUp = gamut.map(addOctave) octaveUp([ [0, 0, 0], [1, 0, 0] ]) // => [ [0, 0, 1], [1, 0, 1]]
-
Get notes from a gamut, or decorate a function to return notes
- Source:
gamut.notes('1P 2M 3M') // => ['C0', 'D0', 'E0'] var transpose = gamut.notes(gamut.add) transpose('2M', 'C D E') // => [ 'D', 'E', 'F#' ]
-
Convert a list of notes or intervals to pitch-array notation format
Name Type Description source
String | Array the gamut
- Source:
the gamut with notes or intervals in pitch-array notation format
- Type
- Array
gamut.parse('C D E') // => [ [0, 0, null], [1, 0, null], [2, 0, null] ] gamut.parse('1P 3M 5P') // => [ [0, 0, 0], [2, 0, 0], [4, 0, 0] ]
-
Get the pitch classes of a gamut
- Source:
-
Get a set
- Source:
-
Sort a gamut by frequency
- Source:
-
Remove duplicates from a gamut
- Source:
generated with docme
MIT License