Mercurial > hg > constant-q-cpp
diff vamp/CQVamp.cpp @ 53:a25abb7a21c0
Further tidying, compensate for latency in Vamp plugin
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Thu, 28 Nov 2013 11:46:39 +0000 |
parents | cb072f01435b |
children | 2a21b4506d7f |
line wrap: on
line diff
--- a/vamp/CQVamp.cpp Thu Nov 28 11:26:53 2013 +0000 +++ b/vamp/CQVamp.cpp Thu Nov 28 11:46:39 2013 +0000 @@ -14,7 +14,9 @@ m_cq(0), m_maxFrequency(inputSampleRate/2), m_minFrequency(46), - m_bpo(24) + m_bpo(24), + m_haveStartTime(false), + m_columnCount(0) { } @@ -160,6 +162,8 @@ (m_inputSampleRate, m_minFrequency, m_maxFrequency, m_bpo); } m_prevFeature.clear(); + m_haveStartTime = false; + m_columnCount = 0; } size_t @@ -197,7 +201,7 @@ CQVamp::FeatureSet CQVamp::process(const float *const *inputBuffers, - Vamp::RealTime /* timestamp */) + Vamp::RealTime timestamp) { if (!m_cq) { cerr << "ERROR: CQVamp::process: " @@ -206,6 +210,11 @@ return FeatureSet(); } + if (!m_haveStartTime) { + m_startTime = timestamp; + m_haveStartTime = true; + } + vector<double> data; for (int i = 0; i < m_blockSize; ++i) data.push_back(inputBuffers[0][i]); @@ -223,7 +232,6 @@ CQVamp::FeatureSet CQVamp::convertToFeatures(const vector<vector<double> > &cqout) { - FeatureSet returnFeatures; for (int i = 0; i < (int)cqout.size(); ++i) { @@ -242,10 +250,20 @@ m_prevFeature = column; Feature feature; - feature.hasTimestamp = false; + feature.hasTimestamp = true; + feature.timestamp = m_startTime + Vamp::RealTime::frame2RealTime + (m_columnCount * m_cq->getColumnHop() - m_cq->getLatency(), + m_inputSampleRate); feature.values = column; feature.label = ""; - returnFeatures[0].push_back(feature); + + cerr << "timestamp = " << feature.timestamp << " (latency = " << m_cq->getLatency() << ", sample rate " << m_inputSampleRate << ")" << endl; + + if (feature.timestamp >= m_startTime) { + returnFeatures[0].push_back(feature); + } + + ++m_columnCount; } return returnFeatures;