update qm-dsp library
[ardour.git] / libs / qm-dsp / dsp / chromagram / Chromagram.cpp
index 5901082352c1e6dd7d9c486f49e378ec953d4592..a8597a5ddd99c765063730fe6712e063072de6a6 100644 (file)
@@ -27,14 +27,14 @@ Chromagram::Chromagram( ChromaConfig Config ) :
 }
 
 int Chromagram::initialise( ChromaConfig Config )
-{
+{      
     m_FMin = Config.min;               // min freq
     m_FMax = Config.max;               // max freq
     m_BPO  = Config.BPO;               // bins per octave
     m_normalise = Config.normalise;     // if frame normalisation is required
 
     // No. of constant Q bins
-    m_uK = ( unsigned int ) ceil( m_BPO * log(m_FMax/m_FMin)/log(2.0));
+    m_uK = ( unsigned int ) ceil( m_BPO * log(m_FMax/m_FMin)/log(2.0));        
 
     // Create array for chroma result
     m_chromadata = new double[ m_BPO ];
@@ -49,7 +49,7 @@ int Chromagram::initialise( ChromaConfig Config )
     ConstantQConfig.max = m_FMax;
     ConstantQConfig.BPO = m_BPO;
     ConstantQConfig.CQThresh = Config.CQThresh;
-
+       
     // Initialise ConstantQ operator
     m_ConstantQ = new ConstantQ( ConstantQConfig );
 
@@ -57,7 +57,7 @@ int Chromagram::initialise( ChromaConfig Config )
     m_frameSize = m_ConstantQ->getfftlength();
     m_hopSize = m_ConstantQ->gethop();
 
-    // Initialise FFT object
+    // Initialise FFT object   
     m_FFT = new FFTReal(m_frameSize);
 
     m_FFTRe = new double[ m_frameSize ];
@@ -124,7 +124,7 @@ void Chromagram::unityNormalise(double *src)
 double* Chromagram::process( const double *data )
 {
     if (!m_skGenerated) {
-        // Generate CQ Kernel
+        // Generate CQ Kernel 
         m_ConstantQ->sparsekernel();
         m_skGenerated = true;
     }
@@ -139,8 +139,7 @@ double* Chromagram::process( const double *data )
     }
     m_window->cut(m_windowbuf);
 
-    // FFT of current frame
-    m_FFT->process(false, m_windowbuf, m_FFTRe, m_FFTIm);
+    m_FFT->forward(m_windowbuf, m_FFTRe, m_FFTIm);
 
     return process(m_FFTRe, m_FFTIm);
 }
@@ -148,7 +147,7 @@ double* Chromagram::process( const double *data )
 double* Chromagram::process( const double *real, const double *imag )
 {
     if (!m_skGenerated) {
-        // Generate CQ Kernel
+        // Generate CQ Kernel 
         m_ConstantQ->sparsekernel();
         m_skGenerated = true;
     }
@@ -158,16 +157,15 @@ double* Chromagram::process( const double *real, const double *imag )
 
     double cmax = 0.0;
     double cval = 0;
-
     // Calculate ConstantQ frame
     m_ConstantQ->process( real, imag, m_CQRe, m_CQIm );
-
+       
     // add each octave of cq data into Chromagram
     const unsigned octaves = (int)floor(double( m_uK/m_BPO))-1;
-    for (unsigned octave = 0; octave <= octaves; octave++)
+    for (unsigned octave = 0; octave <= octaves; octave++) 
     {
        unsigned firstBin = octave*m_BPO;
-       for (unsigned i = 0; i < m_BPO; i++)
+       for (unsigned i = 0; i < m_BPO; i++) 
        {
            m_chromadata[i] += kabs( m_CQRe[ firstBin + i ], m_CQIm[ firstBin + i ]);
        }