[Performous] [1] extracts the pitch from the microphone. Also, the code is open source. Here is a description of what the algorithm does, from the guy who encoded it (Tronic on irc.freenode.net # performous).
- PCM input (buffered)
- FFT (1024 samples at a time, then removes 200 samples from the front of the buffer)
- The reassignment method (versus the previous FFT, which was previously 200 samples)
- Peak filtering (this part can be done much better or even eliminated).
- The combination of peaks with harmonic sets (we call the combination of timbre)
- Temporal filtering of tones (update the set of previously detected tones instead of simply using just discovered tones)
- Choose the best vocal tone (frequency limits, weighting, you can also use a harmonic array, but I donβt think we do it)
I still could not figure out this information and implement it. If anyone can handle this, please post your results here and comment on this answer so that SO notifies me.
The challenge would be to create a minimal C ++ wrapper around this code.
source share