Mercurial > hg > vamp-aubio-plugins
diff plugins/Notes.cpp @ 20:8c939fff7ee1
* First bit of Vamp v2 work -- add an optional duration to features in
a backward compatible way.
Warning: this code is unstable and experimental and may change
significantly in the coming weeks.
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Thu, 17 Jul 2008 08:51:13 +0000 |
parents | 30153569c1a6 |
children | 58619878e0e9 |
line wrap: on
line diff
--- a/plugins/Notes.cpp Fri Oct 19 13:55:23 2007 +0000 +++ b/plugins/Notes.cpp Thu Jul 17 08:51:13 2008 +0000 @@ -4,7 +4,7 @@ Vamp feature extraction plugins using Paul Brossier's Aubio library. Centre for Digital Music, Queen Mary, University of London. - This file copyright 2006 Chris Cannam. + This file copyright 2006-2008 Chris Cannam and QMUL. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -22,8 +22,9 @@ using std::cerr; using std::endl; -Notes::Notes(float inputSampleRate) : +Notes::Notes(float inputSampleRate, unsigned int apiVersion) : Plugin(inputSampleRate), + m_apiVersion(apiVersion), m_ibuf(0), m_fftgrain(0), m_onset(0), @@ -43,6 +44,10 @@ m_avoidLeaps(false), m_prevPitch(-1) { + if (apiVersion == 1) { + cerr << "vamp-aubio: WARNING: using compatibility version 1 of the Vamp API for note\n" + << "tracker plugin: upgrade your host to v2 for proper duration support" << endl; + } } Notes::~Notes() @@ -83,7 +88,8 @@ int Notes::getPluginVersion() const { - return 1; + if (m_apiVersion == 1) return 2; + return 3; } string @@ -320,10 +326,18 @@ d.name = "Notes"; d.unit = "Hz"; d.hasFixedBinCount = true; - d.binCount = 2; - d.binNames.push_back("Frequency"); - d.binNames.push_back("Duration"); - d.binNames.push_back("Velocity"); + + if (m_apiVersion == 1) { + d.binCount = 3; + d.binNames.push_back("Frequency"); + d.binNames.push_back("Duration"); + d.binNames.push_back("Velocity"); + } else { + d.binCount = 2; + d.binNames.push_back("Frequency"); + d.binNames.push_back("Velocity"); + } + d.hasKnownExtents = false; d.isQuantized = false; d.sampleType = OutputDescriptor::VariableSampleRate; @@ -429,9 +443,19 @@ if (m_currentOnset < m_delay) m_currentOnset = m_delay; feature.timestamp = m_currentOnset - m_delay; feature.values.push_back(freq); - feature.values.push_back - (Vamp::RealTime::realTime2Frame(offTime, lrintf(m_inputSampleRate)) - - Vamp::RealTime::realTime2Frame(m_currentOnset, lrintf(m_inputSampleRate))); + + if (m_apiVersion == 1) { + feature.values.push_back + (Vamp::RealTime::realTime2Frame + (offTime, lrintf(m_inputSampleRate)) - + Vamp::RealTime::realTime2Frame + (m_currentOnset, lrintf(m_inputSampleRate))); + feature.hasDuration = false; + } else { + feature.hasDuration = true; + feature.duration = offTime - m_currentOnset; + } + feature.values.push_back(m_currentLevel); fs[0].push_back(feature); }