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

noc-webmidi

v0.0.3

Published

Unofficial Novation Circuit™ MIDI CC JavaScript data library

Readme

Novation Circuit™ noc-webmidi.js

This JavaScript library provides a way to interpret MIDI CC data from the Novation Circuit™ and it contains all the info needed to create a MIDI CC editor for the Circuit™ -- The MIDI CC info contained here comes from the official Novation™ "Circuit MIDI Parameters" guide, available here.

News

This project is now called 'noc-webmidi' (Novation Circuit™ Web MIDI. It's easier to remember, and it's more npm-friendly. Which leads to our next announcement -- noc-webmidi is now avialable on npm!

We're looking into adding SysEx and NPRN support, depending on what the WebMIDI spec supports.

Installation

  1. For standard use in web pages: a. Use the "Clone or Download" button from the Github repo to obtain a local copy of the library. b. Add the '/dist/js/noc-webmidi.min.js' script to your html page:

<script src="/dist/js/noc-webmidi.min.js" type="text/javascript"></script>

  1. For use with Node.js a. npm install --save noc-webmidi b. in your app add: var circuitMidiApp = require('noc-webmidi');

What is it?

The library contains a global JavaScript object named circuitMidiApp that includes the following:

  • circuitMidiApp.midiChannels
    This Object's keys/values correspond to the Circuit's™ MIDI channels and the matching MIDI components:
    ** In WebMidi, midi channels are zero-indexed (midi channel 1 = WebMidi channel 0)

    { 0: "synth 1", 1: "synth 2", 9: "drum", 15: "session" }

  • circuitMidiApp.midiCCs

    This Object contains all of the Circuit's™ MIDI CC data, broken down by component type:

    (Synth, Drum, Session) > CC number > CC attributes.

    Printing the object shows that each key is a Circuit™ midi component type:
    { drum: Object, session: Object, synth: Object }

    Inside a midi component type, the object keys are MIDI CC numbers:
    synth: { 3: Object, 5: Object, 9: Object, 13: Object, ... etc. (too many to list, but you get the idea) }

    The MIDI CC objects contain MIDI CC attributes:
    3: { default: 2, name: "Polyphony Mode", range: [0,2], rangeValues: ["Mono","Mono AG","Poly"] }

  • circuitMidiApp.midiComponents This is a JavaScript Map of all the Circuit™ MIDI CC info:
    [ 0: {"synth 1": Map}, 1: {"synth 2": Map}, 2: {"drum 1": Map}, 3: {"drum 2": Map}, 4: {"drum 3": Map}, 5: {"drum 4": Map}, 6: {"session": Map} ]

    key: "synth 1", value: [ 0: "voice", 1: "osc 1", 2: "osc 2", 3: "mixer", 4: "filter", 5: "envelope", 6: "effects", 7: "macro" ]

    key: "voice", value: [ 0: { cc: 3, name: "Polyphony Mode", range: ["Mono","Mono AG","Poly"] }]

  • circuitMidiApp.getCircuitMidiCC()
    This is a helper function that takes 2 parameters - MIDI channel number and MIDI CC number - and it returns the MIDI CC value object associated with those parameters.

    For example:
    circuitMidiApp.getCircuitMidiCC(1,108);
    The above function call sends parameters 1 (midi channels are zero-indexed, so 1 corresponds to midi channel 2) and 108 (midi cc number). The return value is the MIDI CC object for 'synth env 1 velocity':

    { default: 64, name: "env 1 velocity", range: [0,127], rangeValues:[-64,63] }

Sample code

If you're still not sure what's this is useful for, there's a sample project in the /sample_code folder. The file sample_code.js contains code for a simple Circuit MIDI CC editor. Open the file '/samples_code/index.html' in the Google Chrome web browser.

  • Requirements to run the sample code:
    • A Novation Circuit™ + USB cable.
    • A computer running the Google Chrome browser, connected to the Novation Circuit™ via usb cable.

How to Contribute

If you find an error or see a way to improve, I recommend opening an issue to let me know. Some things may be easy fixes/improvements.

If you want to work on the code:

  • Fork the repo to your own Github account.
  • Clone your forked repo to your local computer.
  • Find you local copy in Terminal (these steps require Node.js):
    • Run 'npm install'.
    • Run 'gulp watch'.
  • Development files are in '/src/js'.
  • Changes are compiled by Gulp into '/dist/js' and '/lib'.
  • All code is written in vanilla JavaScript.

***I am not employed by or in anyway associated with Focusrite Novation™