diff options
author | Ferran Pujol Camins <ferranpujolcamins@gmail.com> | 2015-08-08 22:44:06 +0200 |
---|---|---|
committer | Ferran Pujol Camins <ferranpujolcamins@gmail.com> | 2015-08-08 22:44:06 +0200 |
commit | 5a2070fbfba6154e9f06fdbee0299cddf99884ef (patch) | |
tree | ec7fcb3660779e2032e0bfdc7feccd576c40e83d /src/engine/enginevumeter.cpp | |
parent | 72408bd21fbaadabb8867e3965dcd3db37d2db75 (diff) |
Added "PeakIndicatorL" and "PeakIndicatorR" ControlObjects.
Diffstat (limited to 'src/engine/enginevumeter.cpp')
-rw-r--r-- | src/engine/enginevumeter.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/src/engine/enginevumeter.cpp b/src/engine/enginevumeter.cpp index 7cbbdf2c6b..4e34d783a3 100644 --- a/src/engine/enginevumeter.cpp +++ b/src/engine/enginevumeter.cpp @@ -33,6 +33,10 @@ EngineVuMeter::EngineVuMeter(QString group) { // knowledge could use something more suitable... m_ctrlPeakIndicator = new ControlPotmeter(ConfigKey(group, "PeakIndicator"), 0., 1.); + m_ctrlPeakIndicatorL = new ControlPotmeter(ConfigKey(group, "PeakIndicatorL"), + 0., 1.); + m_ctrlPeakIndicatorR = new ControlPotmeter(ConfigKey(group, "PeakIndicatorR"), + 0., 1.); m_pSampleRate = new ControlObjectSlave("[Master]", "samplerate", this); @@ -46,6 +50,8 @@ EngineVuMeter::~EngineVuMeter() delete m_ctrlVuMeterL; delete m_ctrlVuMeterR; delete m_ctrlPeakIndicator; + delete m_ctrlPeakIndicatorL; + delete m_ctrlPeakIndicatorR; } void EngineVuMeter::process(CSAMPLE* pIn, const int iBufferSize) { @@ -53,7 +59,7 @@ void EngineVuMeter::process(CSAMPLE* pIn, const int iBufferSize) { int sampleRate = (int)m_pSampleRate->get(); - bool clipped = SampleUtil::sumAbsPerChannel(&fVolSumL, &fVolSumR, pIn, iBufferSize); + int clipped = SampleUtil::sumAbsPerChannel(&fVolSumL, &fVolSumR, pIn, iBufferSize); m_fRMSvolumeSumL += fVolSumL; m_fRMSvolumeSumR += fVolSumR; @@ -93,6 +99,24 @@ void EngineVuMeter::process(CSAMPLE* pIn, const int iBufferSize) { } else { --m_peakDuration; } + + if (clipped & 1) { + m_ctrlPeakIndicatorL->set(1.); + m_peakDurationL = PEAK_DURATION * sampleRate / iBufferSize / 2000; + } else if (m_peakDurationL <= 0) { + m_ctrlPeakIndicatorL->set(0.); + } else { + --m_peakDurationL; + } + + if (clipped & 2) { + m_ctrlPeakIndicatorR->set(1.); + m_peakDurationR = PEAK_DURATION * sampleRate / iBufferSize / 2000; + } else if (m_peakDurationR <= 0) { + m_ctrlPeakIndicatorR->set(0.); + } else { + --m_peakDurationR; + } } void EngineVuMeter::collectFeatures(GroupFeatureState* pGroupFeatures) const { @@ -117,6 +141,8 @@ void EngineVuMeter::reset() { m_ctrlVuMeterL->set(0); m_ctrlVuMeterR->set(0); m_ctrlPeakIndicator->set(0); + m_ctrlPeakIndicatorL->set(0); + m_ctrlPeakIndicatorR->set(0); m_iSamplesCalculated = 0; m_fRMSvolumeL = 0; @@ -124,4 +150,6 @@ void EngineVuMeter::reset() { m_fRMSvolumeR = 0; m_fRMSvolumeSumR = 0; m_peakDuration = 0; + m_peakDurationL = 0; + m_peakDurationR = 0; } |