# HG changeset patch # User David Ronan # Date 1436450492 -3600 # Node ID e86e9c111b29179bf68936f35f688b5f6ccab8f3 # Parent 25bf17994ef13f99391027fa7be678b696b32c8b 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. diff -r 25bf17994ef1 -r e86e9c111b29 Source/AudioReader.cpp --- a/Source/AudioReader.cpp Thu Jul 09 01:12:16 2015 +0100 +++ b/Source/AudioReader.cpp Thu Jul 09 15:01:32 2015 +0100 @@ -20,8 +20,8 @@ #define SAMPLERATE 22050.0f AudioReader::AudioReader() -{ - m_audio_format_manager.registerBasicFormats(); +{ + }; AudioReader::~AudioReader() @@ -29,45 +29,47 @@ }; - - std::vector AudioReader::Read(AudioFileData audioFileData, float poolTimeSecs, int analysisWindowSize) { WriteCSV writeCSV = WriteCSV(); std::vector featureData = std::vector(); std::string CSVFileName = "..\\FeatureData" + writeCSV.currentDateTime(); - + vector audioFileNames = audioFileData.GetFileNames(); - vector labels = audioFileData.GetLabels(); + vector labels = audioFileData.GetLabels(); + + AudioFormatManager m_formatManager; + m_formatManager.registerBasicFormats(); + //AudioSourceFeatureExtractor audioSourceFeatureExtractor = AudioSourceFeatureExtractor(); + m_AudioSourceFeatureExtractor.Initialise(SAMPLERATE); - //AudioSourceFeatureExtractor audioSourceFeatureExtractor = AudioSourceFeatureExtractor(); - m_AudioSourceFeatureExtractor.Initialise(SAMPLERATE); - for(size_t i=0; i(i) / static_cast(audioFileNames.size()) * 100.0f; + float percentcomplete = (float)i / (float)audioFileNames.size() * 100.0f; std::string outputStr = "Extracting features for " + audioFileNames[i] + "\n" + std::to_string(percentcomplete) + "% complete..."; cout << outputStr; //Create file from our audio data File audioFile(audioFileNames[i].c_str()); - - AudioFormatReader* audio_format_reader = m_audio_format_manager.createReaderFor(audioFile); - if(audio_format_reader != nullptr) + AudioFormatReader* m_audioFileReader = m_formatManager.createReaderFor(audioFile); + + + + if(m_audioFileReader != NULL) { - m_fSampleRate = static_cast(audio_format_reader->sampleRate); - m_iLengthInSamples = static_cast(audio_format_reader->lengthInSamples); - m_iNumOfChannels = audio_format_reader->numChannels; + m_fSampleRate = (float)(m_audioFileReader->sampleRate); + m_iLengthInSamples = (int)m_audioFileReader->lengthInSamples; + m_iNumOfChannels = m_audioFileReader->numChannels; if (m_fSampleRate != 22050.0f) { cout << "\n\n\nERROR: File is not the required 22050 Hz sample rate.!!!\n\n\n"; } - + //Get loudest 30 secs. of audio - int numOfSamplesToCollect = static_cast(analysisWindowSize * m_fSampleRate); + int numOfSamplesToCollect = (int)(analysisWindowSize * m_fSampleRate); if(m_iLengthInSamples <= numOfSamplesToCollect) { @@ -76,20 +78,20 @@ //Length of the full track in stereo; int* destSamples[2] = {0}; - int* L = new int[static_cast(m_iLengthInSamples)]; - memset(L, 0, static_cast(m_iLengthInSamples)*sizeof(float)); + int* L = new int[(size_t)(m_iLengthInSamples)]; + memset(L, 0, (size_t)m_iLengthInSamples*sizeof(float)); destSamples[0]=L; - destSamples[1]=L; - + destSamples[1]=L; + //30 sec clips to check energy levels - float* destSamplesFloat = new float[static_cast(numOfSamplesToCollect)]; - memset(destSamplesFloat, 0, static_cast(numOfSamplesToCollect)*sizeof(float)); + float* destSamplesFloat = new float[(size_t)numOfSamplesToCollect]; + memset(destSamplesFloat, 0, (size_t)numOfSamplesToCollect*sizeof(float)); ////30 sec clips to check energy levels //float* destSamplesFloatLoudest = new float[(size_t)numOfSamplesToCollect]; - //memset(destSamplesFloatLoudest, 0, (size_t)numOfSamplesToCollect*sizeof(float)); + //memset(destSamplesFloatLoudest, 0, (size_t)numOfSamplesToCollect*sizeof(float)); - int timesToLoop; + int timesToLoop = 0; if(m_iLengthInSamples == numOfSamplesToCollect) { @@ -97,17 +99,17 @@ } else { - timesToLoop = static_cast((m_iLengthInSamples - numOfSamplesToCollect) / (ENERGYSEARCHTIME * m_fSampleRate)); + timesToLoop = (int)((m_iLengthInSamples - numOfSamplesToCollect) / (ENERGYSEARCHTIME * m_fSampleRate)); } std::vector thirtySecEnergy = std::vector(); //float loudestEnergy = 0.0; - audio_format_reader->readSamples(destSamples, m_iNumOfChannels, 0, 0, m_iLengthInSamples); + m_audioFileReader->readSamples(destSamples, 2, 0, 0, m_iLengthInSamples); for(int j=0; j < timesToLoop;j++) - { + { float fSum=0.f; for(int n=0; n 1) { - destSamplesFloat[n] = (static_cast((destSamples[0][int(j * ENERGYSEARCHTIME * m_fSampleRate) + n] + destSamples[1][int( j * ENERGYSEARCHTIME * m_fSampleRate) + n]) / 2) / (0x7fffffff)); + destSamplesFloat[n] = ((float)((destSamples[0][int(j * ENERGYSEARCHTIME * m_fSampleRate) + n] + destSamples[1][int( j * ENERGYSEARCHTIME * m_fSampleRate) + n]) / 2) / (0x7fffffff)); } else { - destSamplesFloat[n] = (static_cast(destSamples[0][int(j * ENERGYSEARCHTIME * m_fSampleRate) + n]) / (0x7fffffff)); + destSamplesFloat[n] = ((float)(destSamples[0][int(j * ENERGYSEARCHTIME * m_fSampleRate) + n]) / (0x7fffffff)); } fSum+=(destSamplesFloat[n] * destSamplesFloat[n]); @@ -137,82 +139,75 @@ thirtySecEnergy.push_back(fSum); } - //Find the index of the section with the most energy + //Find the index of the section with the most energy int maxIdx = std::distance(thirtySecEnergy.begin(), max_element(thirtySecEnergy.begin(), thirtySecEnergy.end())); int* thirtySecSamples[2] = {0}; - int* L30 = new int[static_cast(numOfSamplesToCollect)]; - memset(L30, 0, static_cast(numOfSamplesToCollect)*sizeof(float)); + int* L30 = new int[(size_t)numOfSamplesToCollect]; + memset(L30, 0, (size_t)numOfSamplesToCollect*sizeof(float)); thirtySecSamples[0]=L30; //Left channel - thirtySecSamples[1]=L30; //Left right + thirtySecSamples[1]=L30; //Left right //Read the 30 secs. in - audio_format_reader->readSamples(thirtySecSamples, m_iNumOfChannels, 0, int(maxIdx * ENERGYSEARCHTIME * m_fSampleRate), numOfSamplesToCollect); - memset(destSamplesFloat, 0, static_cast(numOfSamplesToCollect)*sizeof(float)); + m_audioFileReader->readSamples(thirtySecSamples, 2, 0, int(maxIdx * ENERGYSEARCHTIME * m_fSampleRate), numOfSamplesToCollect); + memset(destSamplesFloat, 0, (size_t)numOfSamplesToCollect*sizeof(float)); for(int n=0; n 1) { - destSamplesFloat[n] = (static_cast((thirtySecSamples[0][n] + thirtySecSamples[1][n]) / 2) / (0x7fffffff)); + destSamplesFloat[n] = ((float)((thirtySecSamples[0][n] + thirtySecSamples[1][n]) / 2) / (0x7fffffff)); } else { - destSamplesFloat[n] = (static_cast(thirtySecSamples[0][n]) / (0x7fffffff)); + destSamplesFloat[n] = ((float)(thirtySecSamples[0][n]) / (0x7fffffff)); } } - - std::vector newObs = m_AudioSourceFeatureExtractor.Process(destSamplesFloat, numOfSamplesToCollect); - FeatureData newFeature = FeatureData(newObs, labels[i], audioFileNames[i], m_fSampleRate, FFTSIZE, static_cast(numOfSamplesToCollect), poolTimeSecs); - + std::vector newObs = m_AudioSourceFeatureExtractor.Process(destSamplesFloat, numOfSamplesToCollect); + + FeatureData newFeature = FeatureData(newObs, labels[i], audioFileNames[i], m_fSampleRate, FFTSIZE, (float)numOfSamplesToCollect, poolTimeSecs); + writeCSV.Write(CSVFileName, newFeature); - + //Update the screen information; - - cout << string(outputStr.length(), '\b'); - + cout << cout << string(outputStr.length(),'\b'); + //Cleanup - if(L != nullptr) + if(L != NULL) { delete[] L; L = nullptr; } - if(destSamplesFloat != nullptr) + if(destSamplesFloat != NULL) { delete[] destSamplesFloat; destSamplesFloat = nullptr; //destSamplesFloatLoudest = nullptr; } - //Cleanup - if (audio_format_reader != nullptr) - { - delete[] audio_format_reader; - audio_format_reader = nullptr; - } + //if(destSamplesFloatLoudest != NULL) //{ // delete[] destSamplesFloatLoudest; - // + // //} } else { cout << "\n\n\nERROR: Could not find file!!!\n\n\n"; - - if (audio_format_reader != nullptr) - { - delete[] audio_format_reader; - audio_format_reader = nullptr; - } } - + //Cleanup + if(m_audioFileReader != NULL) + { + delete[] m_audioFileReader; + m_audioFileReader = nullptr; + } } m_AudioSourceFeatureExtractor.Finalize(); - + return featureData; -}; \ No newline at end of file +}; diff -r 25bf17994ef1 -r e86e9c111b29 Source/AudioReader.h --- a/Source/AudioReader.h Thu Jul 09 01:12:16 2015 +0100 +++ b/Source/AudioReader.h Thu Jul 09 15:01:32 2015 +0100 @@ -23,13 +23,14 @@ class AudioReader { public: - AudioReader(); + AudioReader(); ~AudioReader(); std::vector Read(AudioFileData audioFileData, float poolTimeSecs, int analysisWindowSize); private: - AudioSourceFeatureExtractor m_AudioSourceFeatureExtractor; - AudioFormatManager m_audio_format_manager; + + AudioSourceFeatureExtractor m_AudioSourceFeatureExtractor; + float m_fSampleRate; int m_iLengthInSamples; diff -r 25bf17994ef1 -r e86e9c111b29 Source/AudioSourceFeatureExtractor.cpp --- a/Source/AudioSourceFeatureExtractor.cpp Thu Jul 09 01:12:16 2015 +0100 +++ b/Source/AudioSourceFeatureExtractor.cpp Thu Jul 09 15:01:32 2015 +0100 @@ -14,7 +14,7 @@ #include #include #include -#include +//#include //============================================================================== AudioSourceFeatureExtractor AudioSourceFeatureExtractor::AudioSourceFeatureExtractor() // m_fft(FFTSIZE) @@ -30,43 +30,43 @@ memset(m_fMagnitudeSpectrum, 0, MAGNITUDESIZE * sizeof(float)); memset(m_fPreviousMagnitudeSpectrum, 0, MAGNITUDESIZE * sizeof(float)); - + } //============================================================================== ~AudioSourceFeatureExtractor AudioSourceFeatureExtractor::~AudioSourceFeatureExtractor() { - if(m_fInputBuffer != nullptr) + if(m_fInputBuffer != NULL) { delete m_fInputBuffer; // memory freed up m_fInputBuffer = nullptr; } - if(m_fMagnitudeSpectrum != nullptr) + if(m_fMagnitudeSpectrum != NULL) { delete m_fMagnitudeSpectrum; // memory freed up m_fMagnitudeSpectrum = nullptr; } - if(m_fPreviousMagnitudeSpectrum != nullptr) + if(m_fPreviousMagnitudeSpectrum != NULL) { delete m_fPreviousMagnitudeSpectrum; // memory freed up m_fPreviousMagnitudeSpectrum = nullptr; } - if (m_OutReal != nullptr) + if (m_OutReal != NULL) { delete[] m_OutReal; m_OutReal = nullptr; } - if (m_OutImag != nullptr) + if (m_OutImag != NULL) { delete[] m_OutImag; m_OutImag = nullptr; } - if (m_fft != nullptr) + if (m_fft != NULL) { delete m_fft; m_fft = nullptr; @@ -76,9 +76,9 @@ //============================================================================== init void AudioSourceFeatureExtractor::Initialise(float fSampleRate) -{ +{ m_fSampleRate = fSampleRate; - m_iWriteIdx = 0; + m_iWriteIdx = 0; for (int i = 1; i <= MAGNITUDESIZE; i++) { @@ -88,12 +88,12 @@ m_MFCC.initMFFCvariables(12, MAGNITUDESIZE, m_fSampleRate); - + } //============================================================================== process std::vector AudioSourceFeatureExtractor::Process( const float* data, size_t numSamples) -{ +{ std::vector observations = std::vector(); memset(m_fInputBuffer, 0, FFTSIZE * sizeof(float)); @@ -103,7 +103,7 @@ float perdiodicity = EstimatePerdiodicity(const_cast(data), numSamples); - float entropyofenergy = EntropyOfEnergy(const_cast(data), numSamples); + float entropyofenergy = EntropyOfEnergy(const_cast(data), numSamples); for(size_t n = 0; n < numSamples; n++) { @@ -126,21 +126,21 @@ rms += (m_fInputBuffer[i] * m_fInputBuffer[i]); } - + rms /= FFTSIZE; - rms = sqrt(rms); + rms = sqrt(rms); crestfactor = peakvalue/(rms + std::numeric_limits::epsilon()); float ZCR = 0; float inputBuffer2[FFTSIZE] = {0.0}; - for (int i = 1; i < FFTSIZE; i++) + for (int i = 1; i < FFTSIZE; i++) { inputBuffer2[i] = m_fInputBuffer[i -1]; } - for (int i = 0; i < FFTSIZE; i++) + for (int i = 0; i < FFTSIZE; i++) { ZCR += (abs(Sign(m_fInputBuffer[i]) - Sign(inputBuffer2[i]))); } @@ -148,14 +148,14 @@ ZCR /= (2 * FFTSIZE); ////////////////////////////////////////////////////////////////// - for (int i = 0; i < FFTSIZE; i++) + for (int i = 0; i < FFTSIZE; i++) { - float multiplier = static_cast(0.5 * (1 - cos(2 * PI * i / (FFTSIZE - 1)))); + float multiplier = (float) (0.5 * (1 - cos(2*PI*i/(FFTSIZE -1)))); m_fInputBuffer[i] = multiplier * m_fInputBuffer[i]; } //Compute the FFT - + memset(m_OutReal, 0, sizeof(float)*FFTSIZE); memset(m_OutImag, 0, sizeof(float)*FFTSIZE); @@ -175,18 +175,18 @@ float spectralentropy = 0; float flatness = 0; float spectralcf = 0; - float spectralflux = 0; + float spectralflux = 0; std::vector mfccs; - SpectralFeatures(m_fMagnitudeSpectrum, m_fPreviousMagnitudeSpectrum, MAGNITUDESIZE, centroid, spread, skewness, kurtosis, brightness, rolloff85, rolloff95, spectralentropy, flatness, spectralcf, spectralflux); - + SpectralFeatures(m_fMagnitudeSpectrum, m_fPreviousMagnitudeSpectrum, MAGNITUDESIZE, centroid, spread, skewness, kurtosis, brightness, rolloff85, rolloff95, spectralentropy, flatness, spectralcf, spectralflux); + m_MFCC.ComputeMFCC(m_fMagnitudeSpectrum, mfccs); //Update for Spectral Flux for(int i = 0; i < MAGNITUDESIZE; i++) { m_fPreviousMagnitudeSpectrum[i] = m_fMagnitudeSpectrum[i]; - } + } //50% Hop size for(int i = MAGNITUDESIZE; i < FFTSIZE; i++) @@ -194,14 +194,14 @@ m_fInputBuffer[i - MAGNITUDESIZE] = m_fInputBuffer[i]; m_iWriteIdx = MAGNITUDESIZE; } - + //create an observation for this window and push it to the list of observations for this 30 sec. audio clip ObservationData newObservation = ObservationData(rms, peakvalue, crestfactor, ZCR, centroid, spread, skewness, kurtosis, brightness, rolloff85, rolloff95, spectralentropy, flatness, spectralcf, spectralflux, mfccs, perdiodicity, entropyofenergy); - observations.push_back(newObservation); - + observations.push_back(newObservation); + } } - + return observations; } @@ -244,7 +244,7 @@ for (size_t i = 0; i < windowSize; i++) { - //Moments + //Moments summagbin += (m_fFreqBins[i] * magnitude[i]); summag += magnitude[i]; sumprevmag += prevmagnitude[i]; @@ -256,15 +256,15 @@ } float energy = magnitude[i] * magnitude[i]; - + //Roll off + Flatness - + totalenergy += energy; - float exponent = static_cast(1.0/static_cast(windowSize)); - + float exponent = (float)(1.0/(float)windowSize); + if(energy != 0) { - geo *= pow(energy, exponent); + geo *= pow(energy, exponent); } } @@ -285,7 +285,7 @@ //Spectral Flux spectralflux += ((norm - normprev) * (norm - normprev)); - //Entropy + //Entropy normalisedMagSumEntropy += (norm * log(norm + std::numeric_limits::epsilon())); //Moments @@ -331,7 +331,7 @@ //Roll off 85% - 95% ///////////////////////////////////////////////////////// - while ((currEnergy95 <= 0.95 * totalenergy) && (countFFT95 < static_cast(windowSize))) + while ((currEnergy95 <= 0.95 * totalenergy) && (countFFT95 < (int)windowSize)) { currEnergy95 += (magnitude[countFFT95] * magnitude[countFFT95]); countFFT95 += 1; @@ -355,7 +355,7 @@ } else { - rolloff85 = (static_cast(countFFT85) / static_cast(windowSize)); + rolloff85 = (((float)countFFT85) / (float)windowSize); } //Normalization @@ -366,7 +366,7 @@ } else { - rolloff95 = (static_cast(countFFT95) / static_cast(windowSize)); + rolloff95 = (((float)countFFT95) / (float)windowSize); } ///////////////////////////////////////////////////// @@ -374,7 +374,7 @@ //Spectral Entropy ///////////////////////////////////////////////////////// - spectralentropy = static_cast((normalisedMagSumEntropy / log(static_cast(windowSize))) * - 1); + spectralentropy = (float) ((normalisedMagSumEntropy / log((float)windowSize)) * - 1); ///////////////////////////////////////////////////////// @@ -384,7 +384,7 @@ ///////////////////////////////////////////////////////// if(totalenergy != 0 && geo != 0) { - flatness = geo / (totalenergy / static_cast(windowSize)); + flatness = geo / (totalenergy / (float)windowSize); } else { @@ -419,21 +419,21 @@ zptr = z; - for (size_t i = 0; i < lenz; i++) + for (size_t i = 0; i < lenz; i++) { s = 0.0; n_lo = 0 > (i - leny + 1 ) ? 0 : (i - leny + 1); n_hi = (lenx - 1) < i ? (lenx - 1): i; xp = &x[0] + n_lo; yp = &y[0] + i - n_lo; - - for (size_t n = n_lo; n <= n_hi; n++) + + for (size_t n = n_lo; n <= n_hi; n++) { s += *xp * *yp; xp++; yp--; } - + *zptr=s; zptr++; } @@ -449,10 +449,10 @@ { fftSize *= 2; } - + FFTW fft1 = FFTW(fftSize); FFTW fft2 = FFTW(fftSize); - + // allocate space for FFTW processing float *in1 = new float[fftSize]; float *in2 = new float[fftSize]; @@ -525,41 +525,41 @@ fftwf_free(result); fftwf_free(product); - if(in1 != nullptr) + if(in1 != NULL) { delete[] in1; in1 = nullptr; } - if(in2 != nullptr) + if(in2 != NULL) { delete[] in2; in2 = nullptr; } - if(out1Real != nullptr) + if(out1Real != NULL) { delete[] out1Real; out1Real= nullptr; } - if(out1Imag != nullptr) + if(out1Imag != NULL) { delete[] out1Imag; out1Imag= nullptr; } - if(out2Real != nullptr) + if(out2Real != NULL) { delete[] out2Real; out2Real= nullptr; } - if(out2Imag != nullptr) + if(out2Imag != NULL) { delete[] out2Imag; out2Imag= nullptr; - } + } } float AudioSourceFeatureExtractor::EstimatePerdiodicity(float* data, size_t numSamples) @@ -578,7 +578,7 @@ EnvelopeCurve(downsampleddata, downsampleddata, numSamples, m_fSampleRate); - auto startLag = static_cast(floor(static_cast(60.0 / 480.0 * m_fSampleRate))); + int startLag = (int)floor((float)(60.0 / 480.0 * m_fSampleRate)); int endLag = (int)floor((float)(60.0 / 30.0 * m_fSampleRate)); int thresh = (int)floor((float)(.2 * m_fSampleRate)); @@ -586,7 +586,7 @@ //Normalise(downsampleddata, downsampleddata, downsamplelength); size_t xcorrlen = 0; - XCorr(xcorr, downsampleddata, downsampleddata, xcorrlen, numSamples, endLag); + XCorr(xcorr, downsampleddata, downsampleddata, xcorrlen, numSamples, endLag); int i = (int)floor(xcorrlen / 2); @@ -597,7 +597,7 @@ } std::vector temp2; - for(size_t j = static_cast(max(1,startLag)); j < static_cast(min(endLag,temp.size())); j++) + for(size_t j = (size_t)std::max(1,startLag); j < (size_t)std::min(endLag,(int)temp.size()); j++) { temp2.push_back(temp[j]); } @@ -613,31 +613,31 @@ } } - int from = max(1, maxIdx-thresh); - int to = min(temp2.size(), maxIdx+thresh); + int from = std::max(1, maxIdx-thresh); + int to = std::min((int)temp2.size(), maxIdx+thresh); - float minValInRange = FLT_MAX; + float minValInRange = std::numeric_limits::max(); - for(size_t j = static_cast(from); j < to; j++) - { + for(size_t j = (size_t)from; j < to; j++) + { if(temp2[j] < minValInRange) { minValInRange = temp2[j]; } } - + periodicity = (maxVal-minValInRange); std::string dave = "Periodicity " + std::to_string(periodicity) + "\n"; - OutputDebugString(dave.c_str()); + //OutputDebugString(dave.c_str()); - if(xcorr != nullptr) + if(xcorr != NULL) { delete[] xcorr; xcorr = nullptr; } - - if(downsampleddata != nullptr) + + if(downsampleddata != NULL) { delete[] downsampleddata; downsampleddata = nullptr; @@ -663,14 +663,14 @@ // // // // apply the filter to each input sample - // for (size_t n = 0; n < lenIn; n++ ) + // for (size_t n = 0; n < lenIn; n++ ) //{ // // calculate output n // coeffp = &coeffs[0]; // inputp = &data[filterlength - 1 + n]; // acc = 0.0f; - // for (int k = 0; k < filterlength; k++ ) + // for (int k = 0; k < filterlength; k++ ) // { // if(inputp <= endp) // acc += (*coeffp++) * (*inputp--); @@ -682,8 +682,8 @@ // } // } - // tempdata[n] = acc; - // } + // tempdata[n] = acc; + // } //int ratio = (int) (currentSampleRate / futureSampleRate); // //lenOut = lenIn / ratio; @@ -696,8 +696,8 @@ //for(size_t i = 0; i < lenIn; i = i + ratio) //{ // out[idx] = tempdata[i]; - // idx++; - //} + // idx++; + //} //if(tempdata != NULL) //{ @@ -711,10 +711,10 @@ float release = 0.02f; float envelope = 0.0f; - float gr = exp(-1 / (sampleRate * release)); + float gr = exp(-1 / (sampleRate * release)); for (size_t i = 0; i < dataLen; i++) - { + { float EnvIn = abs(data[i]); if(envelope < EnvIn) @@ -725,9 +725,9 @@ { envelope = envelope * gr; envelope = envelope + (1 - gr) * EnvIn; - } - - out[i] = envelope; + } + + out[i] = envelope; } } @@ -829,7 +829,7 @@ std::vector idxLow; std::vector idxHigh; - std::vector filtIdx; + std::vector filtIdx; for (size_t j = (size_t)ceilNextBinDown; j <= (size_t)floorFreqBinLin; j++ ) { @@ -864,9 +864,9 @@ for (size_t j = 0; j < rampUp.size(); j++) { - filt.push_back(min(rampUp[j], rampDown[j])); + filt.push_back(std::min(rampUp[j], rampDown[j])); } - + float sumfilt = 0.0f; for (size_t j = 0; j < filt.size(); j++) { @@ -881,7 +881,7 @@ for (size_t j = 0; j < filtIdx.size(); j++) { outKrnl[i][filtIdx[j] - 1] = filt[j]; - } + } } } @@ -909,7 +909,7 @@ float ceilNextBinDown = ceil(nextBinDown); //Subtract by -1 because of array float floorFreqBinLin = floor(freqBinLin); - std::vector filtIdx; + std::vector filtIdx; for (size_t i = (size_t)ceilNextBinDown; i <= (size_t)floorFreqBinLin; i++ ) { @@ -919,7 +919,7 @@ std::vector filt2; for (size_t i = 0; i < filtIdx.size(); i++) { - filt2.push_back(1 - (freqBinLin - filtIdx[i]) / (freqBinLin - nextBinDown)); + filt2.push_back(1 - (freqBinLin - filtIdx[i]) / (freqBinLin - nextBinDown)); } float sumfilt = 0.0f; @@ -939,10 +939,10 @@ } } -float AudioSourceFeatureExtractor::Log2(float n) -{ - // log(n)/log(2) is log2. - return logf( n ) / logf( 2 ); +float AudioSourceFeatureExtractor::Log2(float n) +{ + // log(n)/log(2) is log2. + return logf( n ) / logf( 2 ); } int AudioSourceFeatureExtractor::Sign(float x) diff -r 25bf17994ef1 -r e86e9c111b29 Source/AudioSourceFeatureExtractor.h --- a/Source/AudioSourceFeatureExtractor.h Thu Jul 09 01:12:16 2015 +0100 +++ b/Source/AudioSourceFeatureExtractor.h Thu Jul 09 15:01:32 2015 +0100 @@ -55,7 +55,7 @@ float EntropyOfEnergy(float* data, size_t numSamples); - void AudioSourceFeatureExtractor::PDF_getResampleKrnl(std::vector freqVec, float fsProc, int nfft, int nBin, std::vector &outLogFreqVec, std::vector> &outKrnl); + void PDF_getResampleKrnl(std::vector freqVec, float fsProc, int nfft, int nBin, std::vector &outLogFreqVec, std::vector> &outKrnl); float Log2(float n); @@ -65,8 +65,8 @@ std::vector LogSpace(float min, float max, int n); - size_t m_iWriteIdx; - size_t m_iFlucIdx; + size_t m_iWriteIdx; + size_t m_iFlucIdx; float m_fSampleRate; FFTW *m_fft; float *m_OutReal; diff -r 25bf17994ef1 -r e86e9c111b29 Source/FFT.cpp --- a/Source/FFT.cpp Thu Jul 09 01:12:16 2015 +0100 +++ b/Source/FFT.cpp Thu Jul 09 15:01:32 2015 +0100 @@ -9,7 +9,7 @@ */ #include "FFT.h" -FFT::FastFourierTransform() -{ - -} \ No newline at end of file +//FFT::FastFourierTransform() +//{ +// +//} diff -r 25bf17994ef1 -r e86e9c111b29 Source/FFTW.h --- a/Source/FFTW.h Thu Jul 09 01:12:16 2015 +0100 +++ b/Source/FFTW.h Thu Jul 09 15:01:32 2015 +0100 @@ -2,11 +2,11 @@ /** \author André Bergner \date Feb/2013 - + \class FFTW - + Encapsulates the FFT of lib-fftw - + (c) Copyright NATIVE INSTRUMENTS, Berlin, Germany ALL RIGHTS RESERVED */ @@ -15,9 +15,10 @@ #pragma once #include "fftw3.h" -#include -#include -#include +#include +#include +//#include +#include //#include @@ -29,7 +30,7 @@ fftwf_plan m_plan; unsigned m_iFFTSize; - FFTW(); + FFTW(); FFTW( unsigned fftLength ) { m_iFFTSize = fftLength; @@ -71,7 +72,7 @@ //Multiply results by 2 to match the iOS output for(size_t i = 0; i < m_iFFTSize; i++) - { + { realPart[i] *= 2.f; imagPart[i] *= 2.f; } diff -r 25bf17994ef1 -r e86e9c111b29 Source/FeatureData.cpp --- a/Source/FeatureData.cpp Thu Jul 09 01:12:16 2015 +0100 +++ b/Source/FeatureData.cpp Thu Jul 09 15:01:32 2015 +0100 @@ -519,7 +519,7 @@ avgdeltamfcc.push_back(Average(m_deltamfccs[10])); avgdeltamfcc.push_back(Average(m_deltamfccs[11])); - //for(size_t i =0; i < m_PooledObservationDataAverage.size(); i++) + for(size_t i =0; i < m_PooledObservationDataAverage.size(); i++) { obs = ObservationData(avgrms, avgpeak, avgcrestFactor, avgzcr, avgcentroid, avgspread, avgskewness, avgkurtosis, avgbrightness, avgrolloff85, avgrolloff95, avgspectralentropy, avgflatness, avgspectralcf, avgspectralflux, avgmfcc, avgdeltamfcc, m_ObservationData[0].GetPeriodicity(), m_ObservationData[0].GetEntropyOfEnergy()); obs.SetLowEnergy(m_ObservationData[0].GetLowEnergy()); diff -r 25bf17994ef1 -r e86e9c111b29 Source/MFCC.cpp --- a/Source/MFCC.cpp Thu Jul 09 01:12:16 2015 +0100 +++ b/Source/MFCC.cpp Thu Jul 09 15:01:32 2015 +0100 @@ -10,14 +10,14 @@ #include "MFCC.h" #include -#include +//#include //----------------------------------------------------------------------------- ComputeMFCC void MFCC::ComputeMFCC(float* magnitude, std::vector &mfccs) { //Apply the Mel Filters to the spectrum magnitude: for(int i=0; i #include #include -#include +//#include WriteCSV::WriteCSV(){}; WriteCSV::~WriteCSV(){}; @@ -24,7 +24,7 @@ void WriteCSV::Write(std::string filename, FeatureData data) { //Pooled - std::string pooledfilename = filename + "Pooled" + std::to_string(data.GetPoolingTimeFactor()) + "Sec.csv"; + std::string pooledfilename = filename + "Pooled" + std::to_string(data.GetPoolingTimeFactor()) + "Sec.csv"; std::ofstream foutPooled(pooledfilename, std::ios::app|std::ios::out); std::vector observationDataAverage = data.GetPooldedObservationDataAverage(); @@ -56,38 +56,38 @@ << observationDataStd[j].GetZCR() << ',' << observationDataMax[j].GetZCR() << ',' << observationDataMin[j].GetZCR() << ',' - << observationDataAverage[j].GetCentroid() << ',' - << observationDataStd[j].GetCentroid() << ',' - << observationDataMax[j].GetCentroid() << ',' - << observationDataMin[j].GetCentroid() << ',' - << observationDataAverage[j].GetSpread() << ',' - << observationDataStd[j].GetSpread() << ',' - << observationDataMax[j].GetSpread() << ',' - << observationDataMin[j].GetSpread() << ',' - << observationDataAverage[j].GetSkewness() << ',' - << observationDataStd[j].GetSkewness() << ',' - << observationDataMax[j].GetSkewness() << ',' - << observationDataMin[j].GetSkewness() << ',' - << observationDataAverage[j].GetKurtosis() << ',' - << observationDataStd[j].GetKurtosis() << ',' - << observationDataMax[j].GetKurtosis() << ',' - << observationDataMin[j].GetKurtosis() << ',' - << observationDataAverage[j].GetBrightness() << ',' - << observationDataStd[j].GetBrightness() << ',' - << observationDataMax[j].GetBrightness() << ',' - << observationDataMin[j].GetBrightness() << ',' + << observationDataAverage[j].GetCentroid() << ',' + << observationDataStd[j].GetCentroid() << ',' + << observationDataMax[j].GetCentroid() << ',' + << observationDataMin[j].GetCentroid() << ',' + << observationDataAverage[j].GetSpread() << ',' + << observationDataStd[j].GetSpread() << ',' + << observationDataMax[j].GetSpread() << ',' + << observationDataMin[j].GetSpread() << ',' + << observationDataAverage[j].GetSkewness() << ',' + << observationDataStd[j].GetSkewness() << ',' + << observationDataMax[j].GetSkewness() << ',' + << observationDataMin[j].GetSkewness() << ',' + << observationDataAverage[j].GetKurtosis() << ',' + << observationDataStd[j].GetKurtosis() << ',' + << observationDataMax[j].GetKurtosis() << ',' + << observationDataMin[j].GetKurtosis() << ',' + << observationDataAverage[j].GetBrightness() << ',' + << observationDataStd[j].GetBrightness() << ',' + << observationDataMax[j].GetBrightness() << ',' + << observationDataMin[j].GetBrightness() << ',' << observationDataAverage[j].GetFlatness() << ',' << observationDataStd[j].GetFlatness() << ',' << observationDataMax[j].GetFlatness() << ',' << observationDataMin[j].GetFlatness() << ',' - << observationDataAverage[j].GetRollOff85() << ',' - << observationDataStd[j].GetRollOff85() << ',' - << observationDataMax[j].GetRollOff85() << ',' - << observationDataMin[j].GetRollOff85() << ',' - << observationDataAverage[j].GetRollOff95() << ',' - << observationDataStd[j].GetRollOff95() << ',' - << observationDataMax[j].GetRollOff95() << ',' - << observationDataMin[j].GetRollOff95() << ',' + << observationDataAverage[j].GetRollOff85() << ',' + << observationDataStd[j].GetRollOff85() << ',' + << observationDataMax[j].GetRollOff85() << ',' + << observationDataMin[j].GetRollOff85() << ',' + << observationDataAverage[j].GetRollOff95() << ',' + << observationDataStd[j].GetRollOff95() << ',' + << observationDataMax[j].GetRollOff95() << ',' + << observationDataMin[j].GetRollOff95() << ',' << observationDataAverage[j].GetSpectralEntropy() << ',' << observationDataStd[j].GetSpectralEntropy() << ',' << observationDataMax[j].GetSpectralEntropy() << ',' @@ -196,23 +196,23 @@ << observationDataStd[j].GetDeltaMFCCs()[11] << ',' << observationDataMax[j].GetDeltaMFCCs()[11] << ',' << observationDataMin[j].GetDeltaMFCCs()[11] << ',' - << observationDataAverage[j].GetLowEnergy() << ',' - << observationDataAverage[j].GetPeriodicity() << ',' - << observationDataAverage[j].GetEntropyOfEnergy() << ',' + << observationDataAverage[j].GetLowEnergy() << ',' + << observationDataAverage[j].GetPeriodicity() << ',' + << observationDataAverage[j].GetEntropyOfEnergy() << ',' << label << ',' ; foutPooled << "\n"; - } + } } else { std::cout << "ERROR: Can't write to .csv."; } - + foutPooled.close(); //WholeTrack - std::string wholetrackfilename = filename + "Whole" + std::to_string(data.GetPoolingTimeFactor()) + "Sec.csv"; + std::string wholetrackfilename = filename + "Whole" + std::to_string(data.GetPoolingTimeFactor()) + "Sec.csv"; std::ofstream foutWholeTrack(wholetrackfilename, std::ios::app|std::ios::out); std::vector wholeTrackobservationDataAverage = data.GetWholeTrackObservationDataAverage(); @@ -249,7 +249,7 @@ << wholeTrackobservationDataStd[j].GetSpread() << ',' //22 << wholeTrackobservationDataMax[j].GetSpread() << ',' //23 << wholeTrackobservationDataMin[j].GetSpread() << ',' //24 - << wholeTrackobservationDataAverage[j].GetSkewness() << ',' //25 + << wholeTrackobservationDataAverage[j].GetSkewness() << ',' //25 << wholeTrackobservationDataStd[j].GetSkewness() << ',' //26 << wholeTrackobservationDataMax[j].GetSkewness() << ',' //27 << wholeTrackobservationDataMin[j].GetSkewness() << ',' //28 @@ -257,7 +257,7 @@ << wholeTrackobservationDataStd[j].GetKurtosis() << ',' //30 << wholeTrackobservationDataMax[j].GetKurtosis() << ',' //31 << wholeTrackobservationDataMin[j].GetKurtosis() << ',' //32 - << wholeTrackobservationDataAverage[j].GetBrightness() << ',' //33 + << wholeTrackobservationDataAverage[j].GetBrightness() << ',' //33 << wholeTrackobservationDataStd[j].GetBrightness() << ',' //34 << wholeTrackobservationDataMax[j].GetBrightness() << ',' //35 << wholeTrackobservationDataMin[j].GetBrightness() << ',' //36 @@ -265,7 +265,7 @@ << wholeTrackobservationDataStd[j].GetFlatness() << ',' //38 << wholeTrackobservationDataMax[j].GetFlatness() << ','//39 << wholeTrackobservationDataMin[j].GetFlatness() << ','//40 - << wholeTrackobservationDataAverage[j].GetRollOff85() << ',' //41 + << wholeTrackobservationDataAverage[j].GetRollOff85() << ',' //41 << wholeTrackobservationDataStd[j].GetRollOff85() << ',' //42 << wholeTrackobservationDataMax[j].GetRollOff85() << ',' //43 << wholeTrackobservationDataMin[j].GetRollOff85() << ',' //44 @@ -382,26 +382,26 @@ << wholeTrackobservationDataMax[j].GetDeltaMFCCs()[11] << ',' //91 << wholeTrackobservationDataMin[j].GetDeltaMFCCs()[11] << ',' //92 << wholeTrackobservationDataAverage[j].GetLowEnergy() << ',' //93 - << wholeTrackobservationDataAverage[j].GetPeriodicity() << ',' //94 - << wholeTrackobservationDataAverage[j].GetEntropyOfEnergy() << ',' //95 + << wholeTrackobservationDataAverage[j].GetPeriodicity() << ',' //94 + << wholeTrackobservationDataAverage[j].GetEntropyOfEnergy() << ',' //95 << label << ',' ; foutWholeTrack << "\n"; - } + } } else { std::cout << "ERROR: Can't write to .csv."; } - + foutWholeTrack.close(); std::string dave = "Files written: " + std::to_string(count) + " Obs Data Size:" + std::to_string(wholeTrackobservationDataAverage.size())+ "\n"; - OutputDebugString(dave.c_str()); +// OutputDebugString(dave.c_str()); count++; }; // Get current date/time, format is YYYY-MM-DD.HH:mm:ss -const std::string WriteCSV::currentDateTime() +const std::string WriteCSV::currentDateTime() { time_t now = time(0); struct tm tstruct; @@ -410,4 +410,4 @@ strftime(buf, sizeof(buf), "%Y-%m-%d.%H-%M-%S", &tstruct); return buf; -} \ No newline at end of file +}