changeset 34:d080b51953ba

Update to current libxtract (float -> double, etc)
author Chris Cannam
date Mon, 01 Jul 2013 15:06:08 +0100
parents 42ecbf0d152c
children 11b10bf3147a
files .hgsubstate Makefile plugins/XTractPlugin.cpp plugins/XTractPlugin.h vamp-libxtract.cat
diffstat 5 files changed, 38 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsubstate	Tue Dec 04 17:46:53 2012 +0000
+++ b/.hgsubstate	Mon Jul 01 15:06:08 2013 +0100
@@ -1,1 +1,1 @@
-0f46938156dedf13032bdb1fc914a63d46bae558 LibXtract
+03eb9cf0800c26c48e0369158f7058d3ae555fde LibXtract
--- a/Makefile	Tue Dec 04 17:46:53 2012 +0000
+++ b/Makefile	Mon Jul 01 15:06:08 2013 +0100
@@ -9,7 +9,7 @@
 
 # Compile flags
 #
-CFLAGS		:= $(CFLAGS) -DXTRACT_FFT=1 -DNDEBUG -O3 -ffast-math -Wall -fPIC -I. -I$(LIBXTRACTDIR)
+CFLAGS		:= $(CFLAGS) -DXTRACT_FFT=1 -DUSE_OOURA=1 -DNDEBUG -O3 -ffast-math -Wall -fPIC -I. -I$(LIBXTRACTDIR)
 CXXFLAGS	:= $(CFLAGS) 
 
 # Libraries required for the plugins.
@@ -32,7 +32,7 @@
 ### End of user-serviceable parts
 
 PLUGIN_OBJECTS	= libmain.o $(patsubst %.cpp,%.o,$(wildcard $(PLUGINDIR)/*.cpp))
-XTRACT_OBJECTS	= $(patsubst %.c,%.o,$(wildcard $(LIBXTRACTDIR)/src/*.c))
+XTRACT_OBJECTS	= $(patsubst %.c,%.o,$(wildcard $(LIBXTRACTDIR)/src/*.c $(LIBXTRACTDIR)/src/*/*.c))
 PLUGIN_HEADERS	= $(patsubst %.cpp,%.h,$(wildcard $(PLUGINDIR)/*.cpp))
 PLUGIN_TARGET	= vamp-libxtract$(PLUGIN_EXT)
 
--- a/plugins/XTractPlugin.cpp	Tue Dec 04 17:46:53 2012 +0000
+++ b/plugins/XTractPlugin.cpp	Mon Jul 01 15:06:08 2013 +0100
@@ -180,9 +180,9 @@
 
     if (donor == XTRACT_INIT_MFCC) {
 
-        m_mfccFilters = new float *[m_coeffCount];
+        m_mfccFilters = new double *[m_coeffCount];
         for (size_t i = 0; i < m_coeffCount; ++i) {
-            m_mfccFilters[i] = new float[m_blockSize];
+            m_mfccFilters[i] = new double[m_blockSize];
         }
 
         int error = (int)xtract_init_mfcc(m_blockSize, m_inputSampleRate/2,
@@ -553,16 +553,22 @@
         // Add 2 here to accommodate extra data for spectrum with DC
         2 + (m_outputBinCount > m_blockSize ? m_outputBinCount : m_blockSize);
     if (!m_resultBuffer) {
-        m_resultBuffer = new float[rbs];
+        m_resultBuffer = new double[rbs];
     }
 
     int i;
 
     for (i = 0; i < rbs; ++i) m_resultBuffer[i] = 0.f;
 
-    const float *data = 0;
-    float *fft_temp = 0, *data_temp = 0;
     int N = m_blockSize, M = N >> 1;
+
+    const double *data = 0;
+    double *input_d = new double[N];
+    for (int i = 0; i < N; ++i) {
+        input_d[i] = inputBuffers[0][i];
+    }
+
+    double *fft_temp = 0, *data_temp = 0;
     void *argv = 0;
     bool isSpectral = false;
     xtract_function_descriptor_t *xtFd = xtDescriptor();
@@ -571,22 +577,22 @@
 
     switch (xtFd->data.format) {
 	case XTRACT_AUDIO_SAMPLES:
-	    data = &inputBuffers[0][0];
+	    data = input_d;
 	    break;
 	case XTRACT_SPECTRAL:
 	default:
 	    // All the rest are derived from the  spectrum
 	    // Need same format as would be output by xtract_spectrum
-	    float q = m_inputSampleRate / N;
-	    fft_temp = new float[N];
+	    double q = m_inputSampleRate / N;
+	    fft_temp = new double[N];
 	    for (int n = 1; n < N/2; ++n) {
-		fft_temp[n]   = sqrt(inputBuffers[0][n*2]   * 
-			inputBuffers[0][n*2] + inputBuffers[0][n*2+1] * 
-			inputBuffers[0][n*2+1]) / N;
+		fft_temp[n] = sqrt(input_d[n*2]   * 
+			input_d[n*2] + input_d[n*2+1] * 
+			input_d[n*2+1]) / N;
 		fft_temp[N-n] = (N/2 - n) * q;
 	    }
-	    fft_temp[0]   = fabs(inputBuffers[0][0]) / N;
-	    fft_temp[N/2] = fabs(inputBuffers[0][N]) / N;
+	    fft_temp[0]   = fabs(input_d[0]) / N;
+	    fft_temp[N/2] = fabs(input_d[N]) / N;
 	    data = &fft_temp[0];
 	    isSpectral = true;
 	    break;
@@ -594,13 +600,13 @@
 
     assert(m_outputBinCount > 0);
 
-    float *result = m_resultBuffer;
+    double *result = m_resultBuffer;
 
-    float argf[XTRACT_MAXARGS];
+    double argf[XTRACT_MAXARGS];
     argv = &argf[0];
     argf[0] = 0.f; // handy for some, e.g. lowest_value which has a threshold
 
-    float mean, variance, sd, npartials, nharmonics;
+    double mean, variance, sd, npartials, nharmonics;
 
     bool needSD, needVariance, needMean, needPeaks, 
 	 needBarkCoefficients, needHarmonics, needF0, needSFM, needMax, 
@@ -721,7 +727,7 @@
     // XTRACT_NOISINESS -- npartials, nharmonics.
     // XTRACT_SPECTRUM -- q, spectrum type, dc, normalise
 
-    data_temp = new float[N];
+    data_temp = new double[N];
 
     if (m_xtFeature == XTRACT_ROLLOFF || 
         m_xtFeature == XTRACT_PEAK_SPECTRUM || needPeaks) {
@@ -766,8 +772,7 @@
     }
 
     if (needF0) {
-	xtract_failsafe_f0(&inputBuffers[0][0], N, 
-		(void *)&m_inputSampleRate, result);
+	xtract_failsafe_f0(&input_d[0], N, (void *)&m_inputSampleRate, result);
 	argf[0] = *result;
 	argv = &argf[0];
     }
@@ -867,7 +872,7 @@
             bool good = true;
 
             for (size_t n = 0; n < m_outputDescriptors[output].binCount; ++n) {
-                float value = m_resultBuffer[index + m_lowestCoef];
+                double value = m_resultBuffer[index + m_lowestCoef];
                 if (isnan(value) || isinf(value)) {
                     good = false;
                     index += (m_outputDescriptors[output].binCount - n);
@@ -884,6 +889,7 @@
 //done:
     delete[] fft_temp;
     delete[] data_temp;
+    delete[] input_d;
 
 //    cerr << "XTractPlugin::process returning" << endl;
 
--- a/plugins/XTractPlugin.h	Tue Dec 04 17:46:53 2012 +0000
+++ b/plugins/XTractPlugin.h	Mon Jul 01 15:06:08 2013 +0100
@@ -63,26 +63,26 @@
     mutable OutputList m_outputDescriptors;
     void setupOutputDescriptors() const;
 
-    bool processSPF0(const float *data);
+    bool processSPF0(const double *data);
 
     const unsigned int m_xtFeature;
     size_t m_channels;
     size_t m_stepSize;
     size_t m_blockSize;
 
-    float *m_resultBuffer;
+    double *m_resultBuffer;
 
-    float m_peakThreshold;
-    float m_rolloffThreshold;
-    float m_harmonicThreshold;
+    double m_peakThreshold;
+    double m_rolloffThreshold;
+    double m_harmonicThreshold;
 
-    float m_minFreq;
-    float m_maxFreq;
+    double m_minFreq;
+    double m_maxFreq;
 
     int m_coeffCount;
     int m_highestCoef;
     int m_lowestCoef;
-    float **m_mfccFilters;
+    double **m_mfccFilters;
     int m_mfccStyle;
 
     int m_spectrumType;
--- a/vamp-libxtract.cat	Tue Dec 04 17:46:53 2012 +0000
+++ b/vamp-libxtract.cat	Mon Jul 01 15:06:08 2013 +0100
@@ -35,6 +35,7 @@
 vamp:vamp-libxtract:nonzero_count::Low Level Features
 vamp:vamp-libxtract:f0::Low Level Features
 vamp:vamp-libxtract:failsafe_f0::Low Level Features
+vamp:vamp-libxtract:wavelet_f0::Low Level Features
 vamp:vamp-libxtract:autocorrelation::Low Level Features
 vamp:vamp-libxtract:amdf::Low Level Features
 vamp:vamp-libxtract:asdf::Low Level Features