Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

note-parser

danigb7.4kMIT2.0.1

Parse music notes in scientific notation

note, parse, parser, midi, scientific, notation, frequency

readme

note-parser npm

Build Status Code Climate js-standard-style

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 note
  • acc: 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 = B
  • alt: a numeric representation of the accidentals. 0 means no alteration, positive numbers are for sharps and negative for flats
  • chroma: a numeric representation of the pitch class. It's like midi for pitch classes. 0 = C, 1 = C#, 2 = D ... It can have negative values: -1 = Cb.

If the note name has octave, the returned object will additionally have:

  • oct: the octave number (as integer)
  • midi: the midi number
  • freq: 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 use midi 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 the build 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 here

To run the test clone this repo and:

npm install
npm test

License

MIT License

changelog

[MASTER]

[2.0.1]

  • Move to ES6 modules with ES5 fallback via rollup
  • Add eslint configuration and tests

[2.0.0]

  • API BREAK: remove midiToFreq function (replaced by freq function that now accepts midi numbers too)
  • chroma values are always inside 0..11 range
  • midi function bypasses midi numbers
  • freq accepts midi numbers and an optional tuning parameter

[1.2.0]

  • Add build function

[1.1.0]

  • Add midiToFreq function

[1.0.0]

  • Add better REGEX support
  • Add function for each property
  • Add chroma, alt

[0.9.0]

  • Add name and remove toString

[0.8.0]

  • Add plus and minus notation (impro-visor style)
  • Move to standard js style

[0.7.0]

  • Add midi note
  • Add frequency

[0.6.0]

  • Add defaultOctave param
  • Add defaultValue param

[0.5.0]

  • Octave is, by default, 4
  • Rename pitchClass to pc
  • Rename octave to oct
  • Rename accidentals acc

[0.4.0]

  • Add parse.toString method

[0.3.0]

  • Rename to note-parser
  • Fail fast: parser error now throws exception

[0.2.0]

  • Parse a parsed note return itself

[0.1.0]

  • First version
  • Parse notes with accidentals