annotate BeatRootVampPlugin.cpp @ 2:7d4e6b1ff3d1

Minor further updates
author Chris Cannam
date Fri, 17 Jun 2011 18:17:16 +0100
parents 886f11e41417
children 4f6626f9ffac
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@0 19
Chris@0 20 BeatRootVampPlugin::BeatRootVampPlugin(float inputSampleRate) :
Chris@0 21 Plugin(inputSampleRate)
Chris@0 22 {
Chris@0 23 m_processor = new BeatRootProcessor(inputSampleRate);
Chris@0 24 }
Chris@0 25
Chris@0 26 BeatRootVampPlugin::~BeatRootVampPlugin()
Chris@0 27 {
Chris@0 28 delete m_processor;
Chris@0 29 }
Chris@0 30
Chris@0 31 string
Chris@0 32 BeatRootVampPlugin::getIdentifier() const
Chris@0 33 {
Chris@0 34 return "beatroot";
Chris@0 35 }
Chris@0 36
Chris@0 37 string
Chris@0 38 BeatRootVampPlugin::getName() const
Chris@0 39 {
Chris@0 40 return "BeatRoot Beat Tracker";
Chris@0 41 }
Chris@0 42
Chris@0 43 string
Chris@0 44 BeatRootVampPlugin::getDescription() const
Chris@0 45 {
Chris@0 46 return "Identify beat locations in music";
Chris@0 47 }
Chris@0 48
Chris@0 49 string
Chris@0 50 BeatRootVampPlugin::getMaker() const
Chris@0 51 {
Chris@0 52 return "Simon Dixon (plugin by Chris Cannam)";
Chris@0 53 }
Chris@0 54
Chris@0 55 int
Chris@0 56 BeatRootVampPlugin::getPluginVersion() const
Chris@0 57 {
Chris@0 58 // Increment this each time you release a version that behaves
Chris@0 59 // differently from the previous one
Chris@0 60 return 1;
Chris@0 61 }
Chris@0 62
Chris@0 63 string
Chris@0 64 BeatRootVampPlugin::getCopyright() const
Chris@0 65 {
Chris@0 66 return "GPL";
Chris@0 67 }
Chris@0 68
Chris@0 69 BeatRootVampPlugin::InputDomain
Chris@0 70 BeatRootVampPlugin::getInputDomain() const
Chris@0 71 {
Chris@0 72 return FrequencyDomain;
Chris@0 73 }
Chris@0 74
Chris@0 75 size_t
Chris@0 76 BeatRootVampPlugin::getPreferredBlockSize() const
Chris@0 77 {
Chris@0 78 return m_processor->getFFTSize();
Chris@0 79 }
Chris@0 80
Chris@0 81 size_t
Chris@0 82 BeatRootVampPlugin::getPreferredStepSize() const
Chris@0 83 {
Chris@0 84 return m_processor->getHopSize();
Chris@0 85 }
Chris@0 86
Chris@0 87 size_t
Chris@0 88 BeatRootVampPlugin::getMinChannelCount() const
Chris@0 89 {
Chris@0 90 return 1;
Chris@0 91 }
Chris@0 92
Chris@0 93 size_t
Chris@0 94 BeatRootVampPlugin::getMaxChannelCount() const
Chris@0 95 {
Chris@0 96 return 1;
Chris@0 97 }
Chris@0 98
Chris@0 99 BeatRootVampPlugin::ParameterList
Chris@0 100 BeatRootVampPlugin::getParameterDescriptors() const
Chris@0 101 {
Chris@0 102 ParameterList list;
Chris@0 103 return list;
Chris@0 104 }
Chris@0 105
Chris@0 106 float
Chris@0 107 BeatRootVampPlugin::getParameter(string identifier) const
Chris@0 108 {
Chris@0 109 return 0;
Chris@0 110 }
Chris@0 111
Chris@0 112 void
Chris@0 113 BeatRootVampPlugin::setParameter(string identifier, float value)
Chris@0 114 {
Chris@0 115 }
Chris@0 116
Chris@0 117 BeatRootVampPlugin::ProgramList
Chris@0 118 BeatRootVampPlugin::getPrograms() const
Chris@0 119 {
Chris@0 120 ProgramList list;
Chris@0 121 return list;
Chris@0 122 }
Chris@0 123
Chris@0 124 string
Chris@0 125 BeatRootVampPlugin::getCurrentProgram() const
Chris@0 126 {
Chris@0 127 return ""; // no programs
Chris@0 128 }
Chris@0 129
Chris@0 130 void
Chris@0 131 BeatRootVampPlugin::selectProgram(string name)
Chris@0 132 {
Chris@0 133 }
Chris@0 134
Chris@0 135 BeatRootVampPlugin::OutputList
Chris@0 136 BeatRootVampPlugin::getOutputDescriptors() const
Chris@0 137 {
Chris@0 138 OutputList list;
Chris@0 139
Chris@0 140 // See OutputDescriptor documentation for the possibilities here.
Chris@0 141 // Every plugin must have at least one output.
Chris@0 142
Chris@0 143 OutputDescriptor d;
Chris@0 144 d.identifier = "beats";
Chris@0 145 d.name = "Beats";
Chris@0 146 d.description = "Estimated beat locations";
Chris@0 147 d.unit = "";
Chris@0 148 d.hasFixedBinCount = true;
Chris@0 149 d.binCount = 0;
Chris@0 150 d.hasKnownExtents = false;
Chris@0 151 d.isQuantized = false;
Chris@0 152 d.sampleType = OutputDescriptor::VariableSampleRate;
Chris@0 153 d.hasDuration = false;
Chris@0 154 list.push_back(d);
Chris@0 155
Chris@0 156 return list;
Chris@0 157 }
Chris@0 158
Chris@0 159 bool
Chris@0 160 BeatRootVampPlugin::initialise(size_t channels, size_t stepSize, size_t blockSize)
Chris@0 161 {
Chris@0 162 if (channels < getMinChannelCount() ||
Chris@0 163 channels > getMaxChannelCount()) {
Chris@0 164 std::cerr << "BeatRootVampPlugin::initialise: Unsupported number ("
Chris@0 165 << channels << ") of channels" << std::endl;
Chris@0 166 return false;
Chris@0 167 }
Chris@0 168
Chris@0 169 if (stepSize != getPreferredStepSize()) {
Chris@0 170 std::cerr << "BeatRootVampPlugin::initialise: Unsupported step size "
Chris@0 171 << "for sample rate (" << stepSize << ", required step is "
Chris@0 172 << getPreferredStepSize() << " for rate " << m_inputSampleRate
Chris@0 173 << ")" << std::endl;
Chris@0 174 return false;
Chris@0 175 }
Chris@0 176
Chris@0 177 if (blockSize != getPreferredBlockSize()) {
Chris@0 178 std::cerr << "BeatRootVampPlugin::initialise: Unsupported block size "
Chris@0 179 << "for sample rate (" << blockSize << ", required size is "
Chris@0 180 << getPreferredBlockSize() << " for rate " << m_inputSampleRate
Chris@0 181 << ")" << std::endl;
Chris@0 182 return false;
Chris@0 183 }
Chris@0 184
Chris@0 185 m_processor->initialise();
Chris@0 186
Chris@0 187 return true;
Chris@0 188 }
Chris@0 189
Chris@0 190 void
Chris@0 191 BeatRootVampPlugin::reset()
Chris@0 192 {
Chris@0 193 m_processor->reset();
Chris@0 194 }
Chris@0 195
Chris@0 196 BeatRootVampPlugin::FeatureSet
Chris@0 197 BeatRootVampPlugin::process(const float *const *inputBuffers, Vamp::RealTime timestamp)
Chris@0 198 {
Chris@0 199 // Do actual work!
Chris@0 200 return FeatureSet();
Chris@0 201 }
Chris@0 202
Chris@0 203 BeatRootVampPlugin::FeatureSet
Chris@0 204 BeatRootVampPlugin::getRemainingFeatures()
Chris@0 205 {
Chris@0 206 return FeatureSet();
Chris@0 207 }
Chris@0 208
Chris@0 209
Chris@0 210 static Vamp::PluginAdapter<BeatRootVampPlugin> brAdapter;
Chris@0 211
Chris@0 212 const VampPluginDescriptor *vampGetPluginDescriptor(unsigned int version,
Chris@0 213 unsigned int index)
Chris@0 214 {
Chris@0 215 if (version < 1) return 0;
Chris@0 216
Chris@0 217 switch (index) {
Chris@0 218 case 0: return brAdapter.getDescriptor();
Chris@0 219 default: return 0;
Chris@0 220 }
Chris@0 221 }
Chris@0 222