[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