void TCSGram::getTCSVector(int iPosition, TCSVector& rTCSVector) const { if (iPosition < 0) rTCSVector = TCSVector(); else if (iPosition >= m_VectorList.size()) rTCSVector = TCSVector(); else rTCSVector = m_VectorList[iPosition].second; }
TCSGram::TCSGram() : m_uNumBins(6), m_dFrameDurationMS(0.0) { for (size_t k = 0; k < m_VectorList.size(); ++k) { m_VectorList[k].first = 0; m_VectorList[k].second = TCSVector(); } }
TonalChangeDetect::FeatureSet TonalChangeDetect::process(const float *const *inputBuffers, Vamp::RealTime timestamp) { if (!m_chromagram) { cerr << "ERROR: TonalChangeDetect::process: " << "Chromagram has not been initialised" << endl; return FeatureSet(); } if (!m_haveOrigin) m_origin = timestamp; // convert float* to double* double *tempBuffer = new double[m_block]; for (size_t i = 0; i < m_block; ++i) { tempBuffer[i] = inputBuffers[0][i]; } double *output = m_chromagram->process(tempBuffer); delete[] tempBuffer; for (size_t i = 0; i < 12; i++) { m_vaCurrentVector[i] = output[i]; } FeatureSet returnFeatures; if (m_stepDelay == 0) { m_vaCurrentVector.normalizeL1(); TCSVector tcsVector = m_TonalEstimator.transform2TCS(m_vaCurrentVector); m_TCSGram.addTCSVector(tcsVector); Feature feature; feature.hasTimestamp = false; for (int i = 0; i < 6; i++) { feature.values.push_back(static_cast<float>(tcsVector[i])); } feature.label = ""; returnFeatures[0].push_back(feature); return returnFeatures; } if (m_pending.size() == m_stepDelay) { ChromaVector v = m_pending.front(); v.normalizeL1(); TCSVector tcsVector = m_TonalEstimator.transform2TCS(v); m_TCSGram.addTCSVector(tcsVector); Feature feature; feature.hasTimestamp = false; for (int i = 0; i < 6; i++) { feature.values.push_back(static_cast<float>(tcsVector[i])); } feature.label = ""; returnFeatures[0].push_back(feature); m_pending.pop(); } else { returnFeatures[0].push_back(Feature()); m_TCSGram.addTCSVector(TCSVector()); } m_pending.push(m_vaCurrentVector); return returnFeatures; }