npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

note-parser

v2.0.1

Published

Parse music notes in scientific notation

Downloads

9,817

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