// PCMVolumeMaximizer.h: interface for the PCMVolumeMaximizer class.
|
//
|
//////////////////////////////////////////////////////////////////////
|
|
#ifndef AFX_PCMVOLUMEMAXIMIZER_H__9754890C_0316_417C_8C4A_7C6E36ACF745__INCLUDED_
|
#define AFX_PCMVOLUMEMAXIMIZER_H__9754890C_0316_417C_8C4A_7C6E36ACF745__INCLUDED_
|
|
#define NUM_BINS 256
|
|
#include "AudioTransformer.h"
|
|
class AverageCalculator
|
{
|
public:
|
AverageCalculator(Tracer *tracer) { Reset(); this->tracer = tracer; calculationInterval = 100; }
|
virtual ~AverageCalculator() {}
|
int Reset() { runningTotal = 0; runningIntervalCount = 0; return 0;}
|
int SetCalculationInterval(int interval) { Reset(); if (interval > 0) calculationInterval = interval; return calculationInterval; }
|
int TakeNextValue(double value)
|
{
|
runningTotal += value;
|
if (++runningIntervalCount >= calculationInterval)
|
{
|
tracer->tracef(ARB, "AverageCalculator : average over last %d samples was %f\n", runningIntervalCount, runningTotal/runningIntervalCount);
|
Reset();
|
}
|
return 0;
|
}
|
private:
|
int calculationInterval;
|
double runningTotal;
|
int runningIntervalCount;
|
Tracer *tracer;
|
};
|
|
class PCMVolumeMaximizer : public AudioTransformer
|
{
|
public:
|
PCMVolumeMaximizer();
|
virtual ~PCMVolumeMaximizer();
|
int TransformStarted();
|
int SetMaximizePercentile(double percentile);
|
int SetMaximumAmplification(unsigned int amplification); // multiplied by 100. so value of 100 = amplification of 1.0. value of 420 = amplification of 4.2
|
int SetTraceLevel();
|
protected:
|
int TransformAudioSamples(std::vector<std::pair<AudioSample *, AudioSource *> > &data, AudioSample **ppAudioSample);
|
private:
|
double maximizePercentile;
|
unsigned int maximumAmplification;
|
int bins[NUM_BINS];
|
AverageCalculator averageVolumeCalculator;
|
};
|
|
#endif // !defined(AFX_PCMVOLUMEMAXIMIZER_H__9754890C_0316_417C_8C4A_7C6E36ACF745__INCLUDED_)
|