mic-pitch
v0.0.2
Published
A lightweight JS library based on Web Audio and the YIN algorithm to detect the fundamental frequency (pitch) from microphone input. Suitable as the core for a tuner.
Maintainers
Readme
mic-pitch — Web tuner pitch detection library
A lightweight JS library based on Web Audio and the YIN algorithm to detect the fundamental frequency (pitch) from microphone input. Suitable as the core for a tuner.
Install
npm install mic-pitch
# or: pnpm add mic-pitch / yarn add mic-pitchQuick Start (bundlers/ESM)
<script type="module">
import MicPitch, { detectPitchYIN, computeRMS } from 'mic-pitch';
const tuner = new MicPitch({
minFreq: 50,
maxFreq: 2000,
smoothing: 0.25,
averageSeconds: 1.0,
});
tuner.onFrequency((f) => {
console.log('current:', f, 'avg:', tuner.getAverageFrequency());
});
async function start() {
await tuner.start();
}
function stop() {
tuner.stop();
}
</script>Browser (no bundler)
Option A: import the file directly (module)
<script type="module" src="/path/to/src/index.js"></script>
<script type="module">
// exposed on globalThis by the library:
const tuner = new window.MicPitch();
// or:
// const tuner = new window.Mic.Pitch();
tuner.onFrequency(f => console.log(f));
tuner.start();
</script>Option B: via ESM CDN
<script type="module">
import MicPitch from 'https://esm.sh/mic-pitch';
const tuner = new MicPitch();
tuner.start();
</script>Notes:
- Requires HTTPS or localhost to access the microphone.
- It is recommended to disable echo cancellation, noise suppression, and auto gain control (already set in code) to improve accuracy.
onFrequencycallback provides the current (EMA smoothed) frequency in Hz;nullwhen there is no reliable pitch.getAverageFrequency()returns the average frequency within the configured time window (Hz).
Options
- minFreq/maxFreq: Frequency search range. A proper range improves performance and accuracy.
- threshold: YIN threshold, default 0.1. Smaller values are more sensitive but can cause false detections.
- smoothing: Exponential moving average coefficient α (0–1) for stability.
- averageSeconds: Time window (in seconds) for averaging.
- updateIntervalMs: Detection interval in milliseconds.
- minRms: Silence threshold (RMS).
License
MIT
