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