@playground-sessions/amdf-js
v0.2.1
Published
Pure-JS Average Magnitude Difference Function, no WASM, no frills. Intentionally naive for learning. Adjustable frame sizes, downsampling toggles
Readme
@playground-sessions/amdf-js
A pure JavaScript implementation of the Average Magnitude Difference Function (AMDF) for pitch detection. This package provides a straightforward, educational implementation with adjustable frame sizes and downsampling options.
Features
- Pure JavaScript implementation (no WebAssembly)
- Configurable frame sizes and downsampling factors
- Adjustable frequency range
- Clarity metric for pitch confidence
- TypeScript types included
- Zero dependencies
Installation
npm install @playground-sessions/amdf-jsUsage
import { AmdfPitchDetector } from '@playground-sessions/amdf-js';
// Create a detector with custom options
const detector = new AmdfPitchDetector({
frameSize: 2048, // Must be a power of 2
sampleRate: 44100, // Audio sample rate
minFrequency: 50, // Lowest frequency to detect
maxFrequency: 2000, // Highest frequency to detect
downsampleFactor: 1 // Optional downsampling (must be power of 2)
});
// Analyze a frame of audio
const frame = new Float32Array(2048); // Your audio data here
const result = detector.analyze(frame);
console.log(`Frequency: ${result.frequency} Hz`);
console.log(`Clarity: ${result.clarity}`);Demo
A live demo is included in the package. To run it:
- Clone this repository
- Run
npm install - Run
npm run dev - Open your browser and try the interactive pitch detector
How it Works
The Average Magnitude Difference Function (AMDF) is a time-domain pitch detection algorithm that works by:
- Comparing a signal with delayed versions of itself
- Finding the delay (lag) that produces the minimum difference
- Converting that lag into a frequency
The implementation is intentionally straightforward for learning purposes, making it a good starting point for understanding pitch detection algorithms.
Options
frameSize: Size of the analysis frame (default: 2048)sampleRate: Sample rate of the audio (default: 44100)minFrequency: Minimum frequency to detect (default: 50 Hz)maxFrequency: Maximum frequency to detect (default: 2000 Hz)downsampleFactor: Factor to downsample by (default: 1)
Contributing
Contributions are welcome! This is an educational project built during the WebAudio Pitch Jam '25.
