• Stars
    star
    132
  • Rank 274,205 (Top 6 %)
  • Language
    C++
  • Created about 9 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

JUCE module for pitch estimation

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.