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

multipitch-detector

v1.0.0

Published

Browser-first multi-pitch detection using a Klapuri-style harmonic summation approach

Readme

multipitch detector

TypeScript library for browser-first multi-pitch detection inspired by Anssi Klapuri's 2006 harmonic summation method.

Live demo: https://zero-is-one.github.io/multipitch-detector/demo/

Install

npm install multipitch-detector
yarn add multipitch-detector
pnpm add multipitch-detector
bun add multipitch-detector

Browser Microphone Example

import { MicrophonePitchStream } from "multipitch-detector";

const mic = new MicrophonePitchStream({
  onFrame: (result) => {
    console.log(result.pitches);
  },
  onError: (error) => {
    console.error(error);
  },
  processingMode: "auto",
  workletModuleUrl: new URL("./capture.worklet.js", import.meta.url).toString(),
});

await mic.start();
console.log(mic.activeBackend);
// ... later
await mic.stop();

Example

import { OfflineKlapuriDetector } from "multipitch-detector";

const detector = new OfflineKlapuriDetector({
  sampleRate: 44100,
  frameSize: 4096,
  maxPolyphony: 4,
});

const frame = new Float32Array(4096);
const result = detector.analyzeFrame(frame);
console.log(result.pitches);

Streaming Example

import { StreamingKlapuriDetector } from "multipitch-detector";

const stream = new StreamingKlapuriDetector({
  detector: { sampleRate: 44100, frameSize: 2048 },
  hopSize: 512,
  onFrame: (result) => {
    console.log(result.pitches);
  },
});

// Call this from your audio callback with incoming PCM data.
stream.processSamples(new Float32Array(512));

Demo Notes

  • The demo is a lightweight static page that imports the built library from dist/.
  • processingMode: "auto" prefers AudioWorklet and falls back to ScriptProcessor if unavailable.
  • The package build now emits dist/capture.worklet.js, which is the default AudioWorklet module used by MicrophonePitchStream.
  • The streaming detector now applies a light temporal smoother by default to reduce frame-to-frame pitch jitter in live use.
  • If you change source files, rerun npm run build before refreshing the demo page.
  • For GitHub Pages, the workflow publishes a prebuilt site/ directory that contains both demo/ and dist/.

AI Disclaimer

The majority of this project was written by AI. The code, documentation, and implementation decisions should still be reviewed and validated by a human before use in production or other critical environments.