=== modified file 'mixxx/src/analyserwaveform.cpp' --- mixxx/src/analyserwaveform.cpp 2009-07-14 19:01:34 +0000 +++ mixxx/src/analyserwaveform.cpp 2010-01-31 16:21:56 +0000 @@ -42,6 +42,7 @@ downsample = new QVector(numDownsamples); downsampleVector = downsample->data(); + downsamplePos = 0; int i; // Set the buffer to zero @@ -55,11 +56,24 @@ qDebug() << "AnalyserWaveform: f " << sampleRate << " samplesPerDownsample: " << samplesPerDownsample << " downsamples " << numDownsamples << " from " << totalSamples; - m_iStrideLength = samplesPerDownsample*2; - m_iCurPos = 0; - m_iBufferPos = 0; - m_fLMax = -1.0; - m_fRMax = -1.0; + + m_iStrideLength = samplesPerDownsample; + + m_PreBufSize = 40; // must be smaller than samplesPerDownsample + m_PreBufPos = 0; + m_PreBuf = 0; + + float AveragingTimeInSec = 0.01; + m_AveragingBufPos = 0; + m_AveragingBufSize = round((float) sampleRate * AveragingTimeInSec/m_PreBufSize); // samplerate in 1/Sec + m_AveragingBuf.resize(m_AveragingBufSize); + // Set the buffer to zero + for(int i=0;i= m_iStrideLength) { - //(*downsample)[m_iCurPos] = m_fLMax; - *(downsampleVector++) = m_fLMax; - m_iCurPos++; - - //(*downsample)[m_iCurPos] = m_fRMax; - *(downsampleVector++) = m_fRMax; - m_iCurPos++; - - m_iBufferPos = 0; - m_fLMax = -1.0f; - m_fRMax = -1.0f; - } - CSAMPLE sl = fabs(pIn[i]); - CSAMPLE sr = fabs(pIn[i+1]); - - if(m_iBufferPos <= 20) { - if(sl > m_fLMax) - m_fLMax = sl; - if(sr > m_fRMax) - m_fRMax = sr; - } - - m_iBufferPos += 2; + for(int i=0; i= m_PreBufSize) { + m_AveragingBuf[m_AveragingBufPos++] = m_PreBuf; + m_PreBufPos = 0; + m_PreBuf = 0; + if(m_AveragingBufPos >= m_AveragingBufSize) { + m_AveragingBufPos = 0; + } + } + + m_iCurTracksamplePos++; + if(m_iCurTracksamplePos >= m_AnalysedTracksamplesPos+m_iStrideLength) { + m_AnalysedTracksamplesPos += m_iStrideLength; + float temp = 0; + for(int j = 0; j < m_AveragingBufSize;j++) { + temp += m_AveragingBuf[j]; + } + temp = sqrt(temp/(m_PreBufSize*m_AveragingBufSize)); // consider numbers get large + + if( downsamplePos < downsample->size()) { // checking limits is a must + *(downsampleVector++) = temp; + *(downsampleVector++) = temp; + } + downsamplePos += 2; + } } } @@ -104,7 +139,7 @@ if(downsample == NULL) { return; } - + downsample = NULL; downsampleVector = NULL; === modified file 'mixxx/src/analyserwaveform.h' --- mixxx/src/analyserwaveform.h 2009-02-01 21:40:44 +0000 +++ mixxx/src/analyserwaveform.h 2010-01-31 16:03:52 +0000 @@ -12,15 +12,22 @@ void finalise(TrackInfoObject* tio); private: - QVector *downsample; + QVector *downsample; float *downsampleVector; + int downsamplePos; + + QVector m_AveragingBuf; + int m_AveragingBufPos; + int m_AveragingBufSize; + + float m_PreBuf; + int m_PreBufPos; + int m_PreBufSize; int m_iStartTime; int m_iStrideLength; - int m_iCurPos; - int m_iBufferPos; - float m_fLMax; - float m_fRMax; + int m_iCurTracksamplePos; // stereo samples + int m_AnalysedTracksamplesPos; // sereo samples }; #endif