[clam-devel] polyphonic pitch detection

David García Garzón david.garcia at barcelonamedia.org
Wed Apr 27 10:04:15 PDT 2011


Currently there is no processing in clam that does polyphonic pitch detection 
as you ask for. We have a monophonic pitch detection (FundamentalFrequency 
output in SMSAnalysisCore) and harmony detection (the TonalAnalysis 
processing). The later gives the harmony, not the concrete notes (meaning set 
of notes not considering their octaves with weights of probability 
(PitchProfile output, is the probability for each pitch starting at G). That's 
quite convenient if you are looking for chords but not enough to extract 
polyphonic scores. TonalAnalysis uses internally many inner classes, one of 
them is the one you are asking, ConstantQTransform, but those classes are not 
exposed as a clam processings although in the wiki they are displayed as such 
just as a way to illustrate how the algorithm works.

Read this:
http://clam-project.org/wiki/Network_Editor_tutorial#Tonal_Analysis

Anyway the ConstantQTransform code in clam is quite modular and optimized. 
Feel free to use in our own project it as long as you keep the copyrights and 
respect the GPL. If you use the ConstantQTransform consider that each note 
adds, besides a peak at the fundamental pitch, a lot of harmonics (evenly 
placed peaks in frequency) that contaminates the detection higher ptich notes. 
I suggest playing with the SMS related networks and your guitar to understand 
what happens.

MelCepstrum is more about timber identification than pitch detection.
http://en.wikipedia.org/wiki/Mel-frequency_cepstrum

If you want to contribute clam with your own algorithm for polyphonic 
detection you are very wellcome. In the wiki you can find how to setup your 
extensions and we will help you as we can.

Regards.
David.

On Wednesday 27 April 2011 11:16:48 Rene Dohmen wrote:
> I asked almost the same question a month ago.
> I hope yours gets answered
> ;-)
> 
> On Wed, Apr 27, 2011 at 5:17 AM, Nathan Stewart <swarfrat at gmail.com> wrote:
> > I'm digging into clam - and not finding a lot of documentation, even in
> > the source.
> > I'm trying to look into the perennial polyphonic pitch detection, however
> > I have a laundry list of constraints I'm willing to live with that
> > hopefully might make it easer.
> > I'm trying to do Guitar to MIDI, and so far the following have occurred
> > to me:
> > 1) I don't care if its real time, though it would be nice of course.
> > 2) I'm not trying to process completely arbitrary mixed instrument
> > soundscapes - one instrument, with a straightforward(?) harmonic
> > structure. 3) There are a maximum of N note polyphony, where N is almost
> > always 6. 4) The up to 6 notes must be composed of either open strings,
> > or within 4 frets of any other fretted note. (Not completely got my head
> > around how this helps, but I think it could be useful)
> > 5) The range is approximately 4 octaves
> > 6) We can slap any filtering on there that helps.
> > 
> > And of course discrimination of octaves vs harmonics is a tough problem.
> > 
> > I've taken a look at TonalAnalysis and the MelSpectrum widgets, and I
> > don't fully grasp whats coming out of either.
> > The TonalAnalyis PitchProfile is a vector of floats, but what do they
> > mean? Where does the line form for slaying this particular dragon?
> > 
> > Also - I built and installed CLAM/processing, can see
> > libclam_processing.so, but the NetworkEditor has no ConstantQTransform
> > widget available.
> > 
> > _______________________________________________
> > clam-devel mailing list
> > clam-devel at lists.clam-project.org
> > http://lists.clam-project.org/listinfo.cgi/clam-devel-clam-project.org



More information about the clam-devel mailing list