annotate modules-and-plug-ins/vamp-plugin/BTrackVamp.cpp @ 61:ce806db4468b

Updated README, commented more code, added a Vamp plug-in
author Adam Stark <adamstark@users.noreply.github.com>
date Mon, 27 Jan 2014 23:11:31 +0000
parents
children 7af87d3f2ce2
rev   line source
adamstark@61 1
adamstark@61 2 // This is a skeleton file for use in creating your own plugin
adamstark@61 3 // libraries. Replace BTrackVamp and myPlugin throughout with the name
adamstark@61 4 // of your first plugin class, and fill in the gaps as appropriate.
adamstark@61 5
adamstark@61 6
adamstark@61 7 #include "BTrackVamp.h"
adamstark@61 8
adamstark@61 9
adamstark@61 10 BTrackVamp::BTrackVamp(float inputSampleRate) :
adamstark@61 11 Plugin(inputSampleRate)
adamstark@61 12 // Also be sure to set your plugin parameters (presumably stored
adamstark@61 13 // in member variables) to their default values here -- the host
adamstark@61 14 // will not do that for you
adamstark@61 15 {
adamstark@61 16 }
adamstark@61 17
adamstark@61 18 BTrackVamp::~BTrackVamp()
adamstark@61 19 {
adamstark@61 20 }
adamstark@61 21
adamstark@61 22 string
adamstark@61 23 BTrackVamp::getIdentifier() const
adamstark@61 24 {
adamstark@61 25 return "btrack-vamp";
adamstark@61 26 }
adamstark@61 27
adamstark@61 28 string
adamstark@61 29 BTrackVamp::getName() const
adamstark@61 30 {
adamstark@61 31 return "BTrack";
adamstark@61 32 }
adamstark@61 33
adamstark@61 34 string
adamstark@61 35 BTrackVamp::getDescription() const
adamstark@61 36 {
adamstark@61 37 // Return something helpful here!
adamstark@61 38 return "A Real-Time Beat Tracker";
adamstark@61 39 }
adamstark@61 40
adamstark@61 41 string
adamstark@61 42 BTrackVamp::getMaker() const
adamstark@61 43 {
adamstark@61 44 // Your name here
adamstark@61 45 return "Adam Stark, Matthew Davies and Mark Plumbley";
adamstark@61 46 }
adamstark@61 47
adamstark@61 48 int
adamstark@61 49 BTrackVamp::getPluginVersion() const
adamstark@61 50 {
adamstark@61 51 // Increment this each time you release a version that behaves
adamstark@61 52 // differently from the previous one
adamstark@61 53 return 1;
adamstark@61 54 }
adamstark@61 55
adamstark@61 56 string
adamstark@61 57 BTrackVamp::getCopyright() const
adamstark@61 58 {
adamstark@61 59 // This function is not ideally named. It does not necessarily
adamstark@61 60 // need to say who made the plugin -- getMaker does that -- but it
adamstark@61 61 // should indicate the terms under which it is distributed. For
adamstark@61 62 // example, "Copyright (year). All Rights Reserved", or "GPL"
adamstark@61 63 return "";
adamstark@61 64 }
adamstark@61 65
adamstark@61 66 BTrackVamp::InputDomain
adamstark@61 67 BTrackVamp::getInputDomain() const
adamstark@61 68 {
adamstark@61 69 return TimeDomain;
adamstark@61 70 }
adamstark@61 71
adamstark@61 72 size_t
adamstark@61 73 BTrackVamp::getPreferredBlockSize() const
adamstark@61 74 {
adamstark@61 75 return 1024; // 0 means "I can handle any block size"
adamstark@61 76 }
adamstark@61 77
adamstark@61 78 size_t
adamstark@61 79 BTrackVamp::getPreferredStepSize() const
adamstark@61 80 {
adamstark@61 81 return 512; // 0 means "anything sensible"; in practice this
adamstark@61 82 // means the same as the block size for TimeDomain
adamstark@61 83 // plugins, or half of it for FrequencyDomain plugins
adamstark@61 84 }
adamstark@61 85
adamstark@61 86 size_t
adamstark@61 87 BTrackVamp::getMinChannelCount() const
adamstark@61 88 {
adamstark@61 89 return 1;
adamstark@61 90 }
adamstark@61 91
adamstark@61 92 size_t
adamstark@61 93 BTrackVamp::getMaxChannelCount() const
adamstark@61 94 {
adamstark@61 95 return 1;
adamstark@61 96 }
adamstark@61 97
adamstark@61 98 BTrackVamp::ParameterList
adamstark@61 99 BTrackVamp::getParameterDescriptors() const
adamstark@61 100 {
adamstark@61 101 ParameterList list;
adamstark@61 102
adamstark@61 103 // If the plugin has no adjustable parameters, return an empty
adamstark@61 104 // list here (and there's no need to provide implementations of
adamstark@61 105 // getParameter and setParameter in that case either).
adamstark@61 106
adamstark@61 107 // Note that it is your responsibility to make sure the parameters
adamstark@61 108 // start off having their default values (e.g. in the constructor
adamstark@61 109 // above). The host needs to know the default value so it can do
adamstark@61 110 // things like provide a "reset to default" function, but it will
adamstark@61 111 // not explicitly set your parameters to their defaults for you if
adamstark@61 112 // they have not changed in the mean time.
adamstark@61 113
adamstark@61 114 // ParameterDescriptor d;
adamstark@61 115 // d.identifier = "parameter";
adamstark@61 116 // d.name = "Some Parameter";
adamstark@61 117 // d.description = "";
adamstark@61 118 // d.unit = "";
adamstark@61 119 // d.minValue = 0;
adamstark@61 120 // d.maxValue = 10;
adamstark@61 121 // d.defaultValue = 5;
adamstark@61 122 // d.isQuantized = false;
adamstark@61 123 // list.push_back(d);
adamstark@61 124
adamstark@61 125 return list;
adamstark@61 126 }
adamstark@61 127
adamstark@61 128 float
adamstark@61 129 BTrackVamp::getParameter(string identifier) const
adamstark@61 130 {
adamstark@61 131 if (identifier == "parameter") {
adamstark@61 132 return 5; // return the ACTUAL current value of your parameter here!
adamstark@61 133 }
adamstark@61 134 return 0;
adamstark@61 135 }
adamstark@61 136
adamstark@61 137 void
adamstark@61 138 BTrackVamp::setParameter(string identifier, float value)
adamstark@61 139 {
adamstark@61 140 if (identifier == "parameter") {
adamstark@61 141 // set the actual value of your parameter
adamstark@61 142 }
adamstark@61 143 }
adamstark@61 144
adamstark@61 145 BTrackVamp::ProgramList
adamstark@61 146 BTrackVamp::getPrograms() const
adamstark@61 147 {
adamstark@61 148 ProgramList list;
adamstark@61 149
adamstark@61 150 // If you have no programs, return an empty list (or simply don't
adamstark@61 151 // implement this function or getCurrentProgram/selectProgram)
adamstark@61 152
adamstark@61 153 return list;
adamstark@61 154 }
adamstark@61 155
adamstark@61 156 string
adamstark@61 157 BTrackVamp::getCurrentProgram() const
adamstark@61 158 {
adamstark@61 159 return ""; // no programs
adamstark@61 160 }
adamstark@61 161
adamstark@61 162 void
adamstark@61 163 BTrackVamp::selectProgram(string name)
adamstark@61 164 {
adamstark@61 165 }
adamstark@61 166
adamstark@61 167 BTrackVamp::OutputList
adamstark@61 168 BTrackVamp::getOutputDescriptors() const
adamstark@61 169 {
adamstark@61 170 OutputList list;
adamstark@61 171
adamstark@61 172 // See OutputDescriptor documentation for the possibilities here.
adamstark@61 173 // Every plugin must have at least one output.
adamstark@61 174
adamstark@61 175 OutputDescriptor d;
adamstark@61 176 d.identifier = "beats";
adamstark@61 177 d.name = "Beats";
adamstark@61 178 d.description = "Beat locations";
adamstark@61 179 d.unit = "";
adamstark@61 180 d.hasFixedBinCount = true;
adamstark@61 181 d.binCount = 0;
adamstark@61 182 d.hasKnownExtents = false;
adamstark@61 183 d.isQuantized = false;
adamstark@61 184 d.sampleType = OutputDescriptor::VariableSampleRate;
adamstark@61 185 d.sampleRate = m_inputSampleRate;
adamstark@61 186 list.push_back(d);
adamstark@61 187
adamstark@61 188 return list;
adamstark@61 189 }
adamstark@61 190
adamstark@61 191 bool
adamstark@61 192 BTrackVamp::initialise(size_t channels, size_t stepSize, size_t blockSize)
adamstark@61 193 {
adamstark@61 194 if (channels < getMinChannelCount() ||
adamstark@61 195 channels > getMaxChannelCount()) return false;
adamstark@61 196
adamstark@61 197
adamstark@61 198 m_stepSize = stepSize;
adamstark@61 199 m_blockSize = blockSize;
adamstark@61 200
adamstark@61 201 // Real initialisation work goes here!
adamstark@61 202
adamstark@61 203 return true;
adamstark@61 204 }
adamstark@61 205
adamstark@61 206 void
adamstark@61 207 BTrackVamp::reset()
adamstark@61 208 {
adamstark@61 209 // Clear buffers, reset stored values, etc
adamstark@61 210 }
adamstark@61 211
adamstark@61 212 BTrackVamp::FeatureSet
adamstark@61 213 BTrackVamp::process(const float *const *inputBuffers, Vamp::RealTime timestamp)
adamstark@61 214 {
adamstark@61 215 double frame[m_blockSize];
adamstark@61 216
adamstark@61 217 for (int i = 0;i < m_blockSize;i++)
adamstark@61 218 {
adamstark@61 219 frame[i] = (double) inputBuffers[0][i];
adamstark@61 220 }
adamstark@61 221
adamstark@61 222 b.processAudioFrame(frame);
adamstark@61 223
adamstark@61 224 FeatureSet featureSet;
adamstark@61 225
adamstark@61 226 if (b.beatDueInCurrentFrame())
adamstark@61 227 {
adamstark@61 228 Feature beat;
adamstark@61 229 beat.hasTimestamp = true;
adamstark@61 230 beat.timestamp = timestamp - Vamp::RealTime::frame2RealTime(m_stepSize, int(m_inputSampleRate + 0.5));
adamstark@61 231 featureSet[0].push_back(beat);
adamstark@61 232 }
adamstark@61 233
adamstark@61 234 // Do actual work!
adamstark@61 235 return featureSet;
adamstark@61 236 }
adamstark@61 237
adamstark@61 238 BTrackVamp::FeatureSet
adamstark@61 239 BTrackVamp::getRemainingFeatures()
adamstark@61 240 {
adamstark@61 241 return FeatureSet();
adamstark@61 242 }
adamstark@61 243