@playground-sessions/chroma-chips
v0.1.1
Published
Twelve-bin chroma features for stabilizing pitch estimates and note labeling. Demonstrates mixing spectral features with a time-domain pitch guess to reduce octave errors on guitar/voice.
Downloads
6
Readme
Chroma Chips
Twelve-bin chroma features for stabilizing pitch estimates and note labeling. This library demonstrates mixing spectral features with a time-domain pitch guess to reduce octave errors on guitar/voice.
Features
- Compute 12-bin chroma features from FFT magnitude data
- Refine time-domain pitch estimates using spectral information
- Handle frequency ranges from A1 (55 Hz) to C7 (2093 Hz)
- Browser-compatible with TypeScript support
Installation
npm install @playground-sessions/chroma-chipsUsage
import { ChromaFeature } from '@playground-sessions/chroma-chips';
// Initialize with audio context settings
const chromaFeature = new ChromaFeature({
sampleRate: 44100,
fftSize: 2048
});
// Compute chroma features from FFT magnitudes
const magnitudes = new Float32Array(1024); // Your FFT magnitude data
const chroma = chromaFeature.computeChroma(magnitudes, Date.now());
// Refine a pitch estimate using chroma features
const pitchGuess = {
frequency: 440, // Hz
confidence: 0.5 // 0-1
};
const refinedPitch = chromaFeature.refinePitch(chroma, pitchGuess);
console.log(`Refined pitch: ${refinedPitch.frequency} Hz (confidence: ${refinedPitch.confidence})`);Demo
Open demo.html in a web browser to try out the library with live microphone input. The demo shows:
- Real-time pitch detection with chroma refinement
- Visual representation of the chroma bins
- Frequency spectrum visualization
- Note name and confidence display
How It Works
Chroma Feature Extraction
- FFT magnitude spectrum is mapped to 12 pitch classes (C through B)
- Each frequency bin contributes to its corresponding pitch class
- Features are normalized to sum to 1.0
Pitch Refinement
- Initial pitch guess is converted to a pitch class
- Chroma features are used to validate or adjust the guess
- Nearby pitch classes are checked for stronger evidence
- Confidence is adjusted based on spectral evidence
This approach helps reduce common pitch detection errors, particularly octave errors in complex signals like guitar or voice.
API Reference
ChromaFeature
Constructor
constructor(options: ChromaOptions)Options:
sampleRate: Audio sample rate in HzfftSize: Size of the FFT (must match your magnitude data)minFrequency: Optional minimum frequency (default: 55 Hz)maxFrequency: Optional maximum frequency (default: 2093 Hz)
Methods
computeChroma(magnitudes: Float32Array, timestamp: number): ChromaVectorComputes chroma features from FFT magnitude data.
refinePitch(chroma: ChromaVector, pitchGuess: PitchGuess): PitchGuessRefines a pitch estimate using chroma features.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT
