annotate src/vamp-plugin-sdk-2.5/skeleton/MyPlugin.cpp @ 23:619f715526df sv_v2.1

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