[CLAM] problem using pitch detection. especially: spectrumAnalysis
    Martijn Bosma 
    M.Bosma at ai.rug.nl
       
    Tue Feb 24 08:56:16 PST 2004
    
    
  
Hello,
I try to use clam for pitch detection in a wave file. I have downloaded 
clam -0.5.7. There are many example programs that show very clearly how to 
do some actions  in clam, but I couldn't find an example that shows how to do pitch detection.
My first question is:
1) Is there (somewhere) an example that shows how to do pitch detection?
	(or can someone give me one?)
Because I couldn't find it I tried it myself. 
To get a spectrum out of the audio object I use: 		SpectralAnalysis.
To get a SpectralPeakArray I use:  				SpectralPeakDetect.
Finally, to get a list of candidate frequencies I use:  	FundFreqDetect .
When I use the SpectralAnalysis Do(audio, spectrum)  function I get the 
following exception breakpoint:
"
ASSERTION FAILED
spectrum.cxx line 647:
Spectrum::GetSize(): Complex size and Size mismatch.
"
When I look  in the code of the spectrum object I find that the size of 
the complex array is not equal to size.
"
	if(HasComplexArray() && GetComplexArray().Size())                                    
		CLAM_ASSERT(GetComplexArray().Size() == size,
		           "Spectrum::GetSize(): Complex size and Size mismatch.");
"
But I cannot find out  where in the program these sizes are set, and why 
they are not equal. Maybe I initialized / configured the spectrum or the spectrum 
analysis object in the wrong way, so my second question is:
2) how do I have to configure the spectrum and the spectrumAnalysis object 
   to do first spectrum analysis and in the end  pitch detection? 
Because I couldn't really solve the error, I tried cheating. I make both 
sizes equal just before the check. The code on the same place in the spectrum object looks now like this:
"
	if(HasComplexArray() && GetComplexArray().Size())                                    
	{											
		GetComplexArray().Resize(size);					
		GetComplexArray().SetSize(size);
		CLAM_ASSERT(GetComplexArray().Size() == size,
		           "Spectrum::GetSize(): Complex size and Size 
mismatch.");
	}
"
Now I am sure that both sizes are always equal when checked. 
The program works, but I don't detect the right frequencies yet. 
This can have several causes. One of them can be my lines of "cheat-code". 
Question three is:
3) Does it harm the resulting spectrum when I add these two lines of 
   cheat-code?
So far my questions and the description of my problem.
I hope someone can provide the answers.
Regards
Martijn 
    
    
More information about the clam-users
mailing list