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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@perry-rylance/midi-macros

v0.0.3

Published

Collection of functions to assist with composing MIDI from scratch with @perry-rylance/midi

Readme

@perry-rylance/midi-macros

A TypeScript library of macros designed to work with midi.

This library provides a set of convenience functions for generating arrays of MIDI events.

Macros

channel

Takes an array of events or a callback that generates events, everything wrapped within the call will be forced onto the specified channel.

repeat

Takes a count and an array of events or callback that generates events, returns the events repeated.

The count is interpreted in musical terms. Zero will return no events, one will return the same input, two will return the input twice.

parallel

Takes a two dimensional array of events, merges them together respecting the event deltas.

Useful for merging lines of music for example to make a counterpoint or clave into one track.

partition

Takes a duration in MIDI ticks, a number of parts and a generator function. The generator function receives the delta, and index.

Useful for making repeating sequences of messages.

interpolate

Takes a duration in MIDI ticks, a number of parts and a generator function. The generator function receives the delta, the normalized interpolant, and index.

The generator is called the same as partition but also receives the interpolant, which goes from zero to one over the macros duration.

ramp

The same as interpolate, but allows you to specify the from and to values, as opposed to the normalized interpolant.

Optionally takes an ease function, which defaults to linear interpolation.

cycle

The same as interpolate, but takes a wave period. The generator receives a delta, and a value. Optionally, a wave function can be passed in. This defaults to Math.sin.

This macro cycles over the duration with the specified period, the wave function receives a radian angle which completes one revolution every period ticks.

Examples

See the examples/generate.ts for usage examples.

If you want to hear them, you can run npm run examples,