![]() |
Mixxx
|
00001 #include "tapfilter.h" 00002 00003 TapFilter::TapFilter(QObject* pParent, int filterLength, int maxInterval) 00004 : QObject(pParent), 00005 m_pFilterBuffer(new CSAMPLE[filterLength]), 00006 m_iFilterLength(filterLength), 00007 m_iValidPresses(0), 00008 m_iMaxInterval(maxInterval) { 00009 m_timer.start(); 00010 } 00011 00012 TapFilter::~TapFilter() { 00013 delete [] m_pFilterBuffer; 00014 } 00015 00016 void TapFilter::tap() { 00017 00018 int millisElapsed = m_timer.restart(); 00019 00020 if (millisElapsed <= m_iMaxInterval) { 00021 // Move back in filter one sample 00022 for (int i = m_iFilterLength-1; i > 0; i--) { 00023 m_pFilterBuffer[i] = m_pFilterBuffer[i-1]; 00024 } 00025 00026 // Insert the sample in the filter 00027 m_pFilterBuffer[0] = millisElapsed; 00028 00029 m_iValidPresses++; 00030 if (m_iValidPresses > m_iFilterLength) 00031 m_iValidPresses = m_iFilterLength; 00032 00033 double temp = 0.; 00034 for (int i = 0; i < m_iValidPresses; ++i) 00035 temp += m_pFilterBuffer[i]; 00036 temp /= m_iValidPresses; 00037 00038 emit(tapped(temp, m_iValidPresses)); 00039 } else { 00040 // Reset the filter 00041 m_iValidPresses = 0; 00042 } 00043 }