Parse note names (in scientific notation) with javascript. Given a string, obtain a hash with note properties (including midi number and frequency)
If you need parse interval names take a look to interval-notation
Usage
Install via npm:npm i --save note-parser
and require it:var parser = require('note-parser')
parser.parse('c#4') // => { letter: 'C', acc: '#', ... midi: 61, freq: 277.1826309768721 }
The returned object will contain:
letter
: the uppercase letter of the noteacc
: the accidentals of the note (only sharps or flats)pc
: the pitch class (letter + acc)step
: s a numeric representation of the letter. It's an integer from 0 to 6 where 0 = C, 1 = D ... 6 = Balt
: a numeric representation of the accidentals. 0 means no alteration,
chroma
: a numeric representation of the pitch class. It's like midi for
If the note name has octave, the returned object will additionally have:
oct
: the octave number (as integer)midi
: the midi numberfreq
: the frequency (using tuning parameter as base)
If the parameter
isTonic
is set to true another property is included:tonicOf
: the rest of the string that follows note name (left and right trimmed)
Midi note number and frequency
If you are interested only in midi numbers or frequencies, you can usemidi
function:parser.midi('A4') // => 69
parser.midi('blah') // => null
parser.midi(60) // => 60
parser.midi('60') // => 60
or the
freq
function:parser.freq('A4') // => 440
parser.freq('A3', 444) // => 222
parser.freq(69) // => 440
Build the string back
With thebuild
function you can convert back to string:parser.build(parser.parse('cb2')) // => 'Cb2'
Alternatively the
build
function accepts step, alteration, octave
parameters:parser.build(3, -2, 4) // => 'Fbb4'
Tests and documentation
You can read the generated API documentation hereTo run the test clone this repo and:
npm install
npm test