music-gamut

0.9.2 • Public • Published

music-gamut npm version

tonal

music-gamut is a library to work with collections of notes or intervals using a functional programming paradigm. Standard map, filter and reduce functions are implemented:

var gamut = require('music-gamut')
var octUp = gamut.map(function (p) { return [p[0], p[1] + 1, p[2]]})
octUp('c2 d3 fx4') // => ['C3', 'D4', 'F##5']

This is part of tonal:

var tonal = require('tonal')
tonal.map(...)
tonal.filter(...)
tonal.reduce(...)

Install

Via npm: npm i --save music-gamut

Usage

In tonal a gamut is a collection of pitches (notes, intervals or pitch classes). This collection can be expressed as:

  • array of notes: ['C2', 'D2', 'E3']
  • a string with notes (separated with spaces, commas or bars): C2 D2 E3
  • an array of notes in array notation: [[0, 2, null], [1, 2, null]]

Create gamuts

You can create a gamut from a string with notes or intervals separated by spaces, bars or commas:

var gamut = require('music-gamut')
gamut(null, 'a b c 1 2 3 blah') // => ['A', 'B', 'C', '1P', '2M', '3M', null]
gamut(null, 'c d | e f') // => ['C', 'D', 'E' 'F']

Map collection of notes

The gamut.map function can be used to map a collection of notes:

var transpose = require('note-transposer')
gamut.map(transpose('M3'), 'a b c d e') // => ['C#', 'D', 'E', 'F#', 'G#']

Or partially apply to more functional style:

var thirdUp = gamut.map(transpose('M3'))
thirdUp('a b c d e') // => ['C#', 'D', 'E', 'F#', 'G#']

Filter collection of notes

Filter works the same way:

var onlyC = gamut.map(function (p) { return p[0] === 0 })
onlyC('a b c d') // => ['C']

Select elements from a gamut

You can select elements with a list of 1-based index numbers and a gamut:

gamut.select('1 3 5', 'C D E F G A B') // => ['C', 'E', 'G']

Rotate gamuts

gamut.rotate(2, 'c d e') // => ['e', 'c', 'd']

License

MIT License

Package Sidebar

Install

npm i music-gamut

Weekly Downloads

24

Version

0.9.2

License

MIT

Last publish

Collaborators

  • danigb