annotate BeatRootVampPlugin.cpp @ 0:886f11e41417

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