view Source/AudioSourceFeatureExtractor.h @ 1:e86e9c111b29

Updates stuff that potentially fixes the memory leak and also makes it work on Windows and Linux (Need to test). Still have to fix fftw include for linux in Jucer.
author David Ronan <d.m.ronan@qmul.ac.uk>
date Thu, 09 Jul 2015 15:01:32 +0100
parents 25bf17994ef1
children 345acbd06029
line wrap: on
line source
/*
  ==============================================================================

    AudioSourceFeatureExtractor.h
    Created: 11 Aug 2014 10:41:02am
    Author:  david.ronan

  ==============================================================================
*/

#ifndef AUDIOSOURCEFEATUREXTRACTOR_H_INCLUDED
#define AUDIOSOURCEFEATUREXTRACTOR_H_INCLUDED

#include <vector>

#include "FFT.h"
#include "MFCC.h"
#include "ObservationData.h"

#define MAGNITUDESIZE 512
#define FFTSIZE 1024
#define PI 3.14159265359

class AudioSourceFeatureExtractor
{

public:

	AudioSourceFeatureExtractor();
	~AudioSourceFeatureExtractor();

	void Initialise ( float fSampleRate);
	std::vector<ObservationData> Process (const float* data, size_t numSamples);
	void Finalize();

private:
	//Computes the magnitude of FFT
	void VectorDistance(const float* vIn1, int stride1, const float* vIn2, int stride2, float* &vOut, int strideOut, size_t nElements);

	void SpectralFeatures(float* &magnitude, float* &previousmagnitude, size_t windowSize, float &centroid, float &spread, float &skew, float &kurtosis, float &brightness, float &rolloff95, float &rolloff85, float &spectralentropy, float &flatness, float &spectralcf, float &spectralflux);

	void MFCCs(float* &magnitude, size_t windowSize, float sampleRate);

	float EstimatePerdiodicity(float* data, size_t numSamples);

	void ConvolveFunction(float* &z, float *x, float *y, size_t &lenz, size_t lenx, size_t leny);

	void DownSampler(float* data, float* &out,  size_t lenIn, size_t &lenOut, float currentSampleRate, float futureSampleRate);

	void EnvelopeCurve(float* data, float* &out, size_t dataLen, float sampleRate);

	void Normalise(float* data, float* &out, size_t len);

	void XCorr(float *&output, float* input1, float* input2, size_t &outputlen, size_t  input1len, size_t  maxLag);

	float EntropyOfEnergy(float* data, size_t numSamples);

	void PDF_getResampleKrnl(std::vector<float> freqVec, float fsProc, int nfft, int nBin, std::vector<float> &outLogFreqVec, std::vector<std::vector<float>> &outKrnl);

	float Log2(float n);

	int Sign(float x);

	std::vector<float> LinSpace(float min, float max, int n);

	std::vector<float> LogSpace(float min, float max, int n);

	size_t m_iWriteIdx;
	size_t m_iFlucIdx;
	float  m_fSampleRate;
	FFTW   *m_fft;
	float *m_OutReal;
	float *m_OutImag;
	MFCC   m_MFCC;
	float* m_fInputBuffer;
	float* m_fMagnitudeSpectrum;
	float* m_fPreviousMagnitudeSpectrum;
	std::vector<float> m_fFreqBins;
};

#endif  // AUDIOSOURCEFEATUREXTRACTOR_H_INCLUDED