view Source/AudioSourceFeatureExtractor.h @ 0:25bf17994ef1

First commit. VS2013, Codeblocks and Mac OSX configuration
author Geogaddi\David <d.m.ronan@qmul.ac.uk>
date Thu, 09 Jul 2015 01:12:16 +0100
parents
children e86e9c111b29
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 AudioSourceFeatureExtractor::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