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

musicxml-iterator

v0.0.0

Published

An iterator for musicxml

Downloads

4

Readme

musicxml-iterator

This module aims to make melodic, harmonic, and rhythmic analysis easier by abstracting away the necessity of parsing MusicXML in the form of an Iterator. Demo coming soon!

const Iterator = require("musicxml-iterator");
const i = Iterator(musicXML); //create an Iterator instance from a MusicXML string
i.selectInstrument("Guitar");
i.next();

Installation

npm install musicxml-iterator

Supported functions

selectInstrument(instrumentName)

The iterator is set to the first measure of the instrument part specified by instrumentName (ex: "Violin") Throws an exception if no instrument of instrumentName is found. Use getInstrumentNames() to be safe.

getInstrumentNames()

gets the names of the instruments in the score (returns as an array)

next()

The iterator moves to the next "symbol" (note(s) or rest) and returns an object to represent that symbol, for example:

{notes: [{duration: 1, noteType: "quarter", pitch: "B3"},
         {duration: 1, noteType: "quarter", pitch: "D4"}],
 beat: 3};

So the next thing that the player sees to play in the above example is a B3 and D4, both quarter notes, hit on the downbeat of beat 3.

nextMeasure()

The iterator moves to the first beat of the next measure, throws an exception if no next measure

prevMeasure()

The iterator moves to the first beat of the previous measure, throws an exception if no previous measure

hasNext()

Returns true or false depending on whether or not there is a next symbol. Use this to avoid an exception being thrown by .nextMeasure().

prev()

The iterator moves to the previous symbol be it a note or rest and returns an object to represent that symbol

hasPrev()

Returns true or false depending on whether or not there is a previous symbol. Use this to avoid an exception being thrown by .prevMeasure().

getMeasureNum()

Returns the measure number currently at

getNumberOfMeasures()

Returns the number of measures

setMeasureNum()

Sets the iterator to the measure number specified. An exception will be thrown if attempting to set to an invalid measure number. The first measure is measure #1