/pitch_detector

JUCE module for pitch estimation

Primary LanguageC++

Pitch Detector

JUCE module for pitch estimation

PitchYIN class based on the YIN implementation found in the aubio library

PitchMPM class adapted from the McLeod Pitch Method implementation in https://github.com/sevagh/pitch-detection

The updated version of the PitchMPM class now uses FFT for the auto-correlation function using the AudioFFT library (via the module wrapper at https://github.com/adamski/audio_fft). The previous time-based version is now in the time-based branch.

Usage

NOTE: bufferSize should be a power of 2!

// Class members
PitchMPM pitchMPM;     
AudioSampleBuffer sampleBuffer;

// Setup / prepare
pitchMPM.setBufferSize (bufferSize);
pitchMPM.setSampleRate (sampleRate);

// Process
float newPitch = pitchMPM.getPitch (sampleBuffer.getReadPointer (0));

TODO

  • Seperate time-based method into another class that can be used as an alternative to the FFT based method
  • Add FFT based YIN implementation (not a priority, MPM works well for my needs - PR's welcome)
  • Create base (virtual) Pitch class and add implementations as subclasses.
  • Add other methods, e.g. Wavelet?
  • Remove JUCE dependency from implementations so that they can be used on embedded platforms, e.g. Arduino/Teensy. Will also need 'pluggable' FFT methods for this to work.