Mercurial > hg > vamp-libxtract-plugins
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