Pure-JS Average Magnitude Difference Function, no WASM, no frills. Intentionally naive for learning. Adjustable frame sizes, downsampling toggles
npm install @playground-sessions/amdf-jsA 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.
- Pure JavaScript implementation (no WebAssembly)
- Configurable frame sizes and downsampling factors
- Adjustable frequency range
- Clarity metric for pitch confidence
- TypeScript types included
- Zero dependencies
``bash`
npm install @playground-sessions/amdf-js
`javascript
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);Clarity: ${result.clarity}
console.log();`
A live demo is included in the package. To run it:
1. Clone this repository
2. Run npm installnpm run dev
3. Run
4. Open your browser and try the interactive pitch detector
The Average Magnitude Difference Function (AMDF) is a time-domain pitch detection algorithm that works by:
1. Comparing a signal with delayed versions of itself
2. Finding the delay (lag) that produces the minimum difference
3. 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.
- 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)
-
Contributions are welcome! This is an educational project built during the WebAudio Pitch Jam '25.