annotate BeatRootVampPlugin.cpp @ 9:4f6626f9ffac

Many fixes. This now compiles and passes the plugin tester, but I don't expect it produces any results yet.
author Chris Cannam
date Fri, 30 Sep 2011 15:39:17 +0100
parents 7d4e6b1ff3d1
children 1c1e98cd1b2e
rev   line source
Chris@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@0 2
Chris@0 3 /*
Chris@0 4 Vamp feature extraction plugin for the BeatRoot beat tracker.
Chris@0 5
Chris@0 6 Centre for Digital Music, Queen Mary, University of London.
Chris@0 7 This file copyright 2011 Simon Dixon, Chris Cannam and QMUL.
Chris@0 8
Chris@0 9 This program is free software; you can redistribute it and/or
Chris@0 10 modify it under the terms of the GNU General Public License as
Chris@0 11 published by the Free Software Foundation; either version 2 of the
Chris@0 12 License, or (at your option) any later version. See the file
Chris@0 13 COPYING included with this distribution for more information.
Chris@0 14 */
Chris@0 15
Chris@0 16 #include "BeatRootVampPlugin.h"
Chris@2 17 #include "BeatRootProcessor.h"
Chris@0 18
Chris@9 19 #include <vamp-sdk/PluginAdapter.h>
Chris@0 20
Chris@0 21 BeatRootVampPlugin::BeatRootVampPlugin(float inputSampleRate) :
Chris@0 22 Plugin(inputSampleRate)
Chris@0 23 {
Chris@0 24 m_processor = new BeatRootProcessor(inputSampleRate);
Chris@0 25 }
Chris@0 26
Chris@0 27 BeatRootVampPlugin::~BeatRootVampPlugin()
Chris@0 28 {
Chris@0 29 delete m_processor;
Chris@0 30 }
Chris@0 31
Chris@0 32 string
Chris@0 33 BeatRootVampPlugin::getIdentifier() const
Chris@0 34 {
Chris@0 35 return "beatroot";
Chris@0 36 }
Chris@0 37
Chris@0 38 string
Chris@0 39 BeatRootVampPlugin::getName() const
Chris@0 40 {
Chris@0 41 return "BeatRoot Beat Tracker";
Chris@0 42 }
Chris@0 43
Chris@0 44 string
Chris@0 45 BeatRootVampPlugin::getDescription() const
Chris@0 46 {
Chris@0 47 return "Identify beat locations in music";
Chris@0 48 }
Chris@0 49
Chris@0 50 string
Chris@0 51 BeatRootVampPlugin::getMaker() const
Chris@0 52 {
Chris@0 53 return "Simon Dixon (plugin by Chris Cannam)";
Chris@0 54 }
Chris@0 55
Chris@0 56 int
Chris@0 57 BeatRootVampPlugin::getPluginVersion() const
Chris@0 58 {
Chris@0 59 // Increment this each time you release a version that behaves
Chris@0 60 // differently from the previous one
Chris@0 61 return 1;
Chris@0 62 }
Chris@0 63
Chris@0 64 string
Chris@0 65 BeatRootVampPlugin::getCopyright() const
Chris@0 66 {
Chris@0 67 return "GPL";
Chris@0 68 }
Chris@0 69
Chris@0 70 BeatRootVampPlugin::InputDomain
Chris@0 71 BeatRootVampPlugin::getInputDomain() const
Chris@0 72 {
Chris@0 73 return FrequencyDomain;
Chris@0 74 }
Chris@0 75
Chris@0 76 size_t
Chris@0 77 BeatRootVampPlugin::getPreferredBlockSize() const
Chris@0 78 {
Chris@0 79 return m_processor->getFFTSize();
Chris@0 80 }
Chris@0 81
Chris@0 82 size_t
Chris@0 83 BeatRootVampPlugin::getPreferredStepSize() const
Chris@0 84 {
Chris@0 85 return m_processor->getHopSize();
Chris@0 86 }
Chris@0 87
Chris@0 88 size_t
Chris@0 89 BeatRootVampPlugin::getMinChannelCount() const
Chris@0 90 {
Chris@0 91 return 1;
Chris@0 92 }
Chris@0 93
Chris@0 94 size_t
Chris@0 95 BeatRootVampPlugin::getMaxChannelCount() const
Chris@0 96 {
Chris@0 97 return 1;
Chris@0 98 }
Chris@0 99
Chris@0 100 BeatRootVampPlugin::ParameterList
Chris@0 101 BeatRootVampPlugin::getParameterDescriptors() const
Chris@0 102 {
Chris@0 103 ParameterList list;
Chris@0 104 return list;
Chris@0 105 }
Chris@0 106
Chris@0 107 float
Chris@0 108 BeatRootVampPlugin::getParameter(string identifier) const
Chris@0 109 {
Chris@0 110 return 0;
Chris@0 111 }
Chris@0 112
Chris@0 113 void
Chris@0 114 BeatRootVampPlugin::setParameter(string identifier, float value)
Chris@0 115 {
Chris@0 116 }
Chris@0 117
Chris@0 118 BeatRootVampPlugin::ProgramList
Chris@0 119 BeatRootVampPlugin::getPrograms() const
Chris@0 120 {
Chris@0 121 ProgramList list;
Chris@0 122 return list;
Chris@0 123 }
Chris@0 124
Chris@0 125 string
Chris@0 126 BeatRootVampPlugin::getCurrentProgram() const
Chris@0 127 {
Chris@0 128 return ""; // no programs
Chris@0 129 }
Chris@0 130
Chris@0 131 void
Chris@0 132 BeatRootVampPlugin::selectProgram(string name)
Chris@0 133 {
Chris@0 134 }
Chris@0 135
Chris@0 136 BeatRootVampPlugin::OutputList
Chris@0 137 BeatRootVampPlugin::getOutputDescriptors() const
Chris@0 138 {
Chris@0 139 OutputList list;
Chris@0 140
Chris@0 141 // See OutputDescriptor documentation for the possibilities here.
Chris@0 142 // Every plugin must have at least one output.
Chris@0 143
Chris@0 144 OutputDescriptor d;
Chris@0 145 d.identifier = "beats";
Chris@0 146 d.name = "Beats";
Chris@0 147 d.description = "Estimated beat locations";
Chris@0 148 d.unit = "";
Chris@0 149 d.hasFixedBinCount = true;
Chris@0 150 d.binCount = 0;
Chris@0 151 d.hasKnownExtents = false;
Chris@0 152 d.isQuantized = false;
Chris@0 153 d.sampleType = OutputDescriptor::VariableSampleRate;
Chris@0 154 d.hasDuration = false;
Chris@0 155 list.push_back(d);
Chris@0 156
Chris@0 157 return list;
Chris@0 158 }
Chris@0 159
Chris@0 160 bool
Chris@0 161 BeatRootVampPlugin::initialise(size_t channels, size_t stepSize, size_t blockSize)
Chris@0 162 {
Chris@0 163 if (channels < getMinChannelCount() ||
Chris@0 164 channels > getMaxChannelCount()) {
Chris@0 165 std::cerr << "BeatRootVampPlugin::initialise: Unsupported number ("
Chris@0 166 << channels << ") of channels" << std::endl;
Chris@0 167 return false;
Chris@0 168 }
Chris@0 169
Chris@0 170 if (stepSize != getPreferredStepSize()) {
Chris@0 171 std::cerr << "BeatRootVampPlugin::initialise: Unsupported step size "
Chris@0 172 << "for sample rate (" << stepSize << ", required step is "
Chris@0 173 << getPreferredStepSize() << " for rate " << m_inputSampleRate
Chris@0 174 << ")" << std::endl;
Chris@0 175 return false;
Chris@0 176 }
Chris@0 177
Chris@0 178 if (blockSize != getPreferredBlockSize()) {
Chris@0 179 std::cerr << "BeatRootVampPlugin::initialise: Unsupported block size "
Chris@0 180 << "for sample rate (" << blockSize << ", required size is "
Chris@0 181 << getPreferredBlockSize() << " for rate " << m_inputSampleRate
Chris@0 182 << ")" << std::endl;
Chris@0 183 return false;
Chris@0 184 }
Chris@0 185
Chris@9 186 m_processor->reset();
Chris@0 187
Chris@0 188 return true;
Chris@0 189 }
Chris@0 190
Chris@0 191 void
Chris@0 192 BeatRootVampPlugin::reset()
Chris@0 193 {
Chris@0 194 m_processor->reset();
Chris@0 195 }
Chris@0 196
Chris@0 197 BeatRootVampPlugin::FeatureSet
Chris@0 198 BeatRootVampPlugin::process(const float *const *inputBuffers, Vamp::RealTime timestamp)
Chris@0 199 {
Chris@0 200 // Do actual work!
Chris@0 201 return FeatureSet();
Chris@0 202 }
Chris@0 203
Chris@0 204 BeatRootVampPlugin::FeatureSet
Chris@0 205 BeatRootVampPlugin::getRemainingFeatures()
Chris@0 206 {
Chris@0 207 return FeatureSet();
Chris@0 208 }
Chris@0 209
Chris@0 210
Chris@0 211 static Vamp::PluginAdapter<BeatRootVampPlugin> brAdapter;
Chris@0 212
Chris@0 213 const VampPluginDescriptor *vampGetPluginDescriptor(unsigned int version,
Chris@0 214 unsigned int index)
Chris@0 215 {
Chris@0 216 if (version < 1) return 0;
Chris@0 217
Chris@0 218 switch (index) {
Chris@0 219 case 0: return brAdapter.getDescriptor();
Chris@0 220 default: return 0;
Chris@0 221 }
Chris@0 222 }
Chris@0 223