X-Git-Url: https://git.aubio.org/?p=vamp-aubio-plugins.git;a=blobdiff_plain;f=plugins%2FNotes.cpp;h=11a73c277547de342b1f0db27c66ed548d283695;hp=7ac5ef9346e573cce7ac614f3e6ea9487837ace5;hb=29802b4ab952299cd505158f6430322c3a8e8643;hpb=02a5641e4c9d5495c1498097bd1d9d65de4dea8a diff --git a/plugins/Notes.cpp b/plugins/Notes.cpp index 7ac5ef9..11a73c2 100644 --- a/plugins/Notes.cpp +++ b/plugins/Notes.cpp @@ -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::vector; 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,12 @@ Notes::Notes(float inputSampleRate) : 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; + } else { + cerr << "vamp-aubio: NOTE: using v2 API for true durations" << endl; + } } Notes::~Notes() @@ -83,7 +90,8 @@ Notes::getMaker() const int Notes::getPluginVersion() const { - return 1; + if (m_apiVersion == 1) return 2; + return 3; } string @@ -320,10 +328,19 @@ Notes::getOutputDescriptors() const 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.hasDuration = true; + } + d.hasKnownExtents = false; d.isQuantized = false; d.sampleType = OutputDescriptor::VariableSampleRate; @@ -429,9 +446,19 @@ Notes::pushNote(FeatureSet &fs, const Vamp::RealTime &offTime) 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); }