Mercurial > hg > vamp-plugin-sdk
diff skeleton/MyPlugin.cpp @ 283:6c9f10b8a53a
* Add skeleton
author | cannam |
---|---|
date | Thu, 23 Apr 2009 08:59:24 +0000 |
parents | |
children | 71b6db22a8a8 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/skeleton/MyPlugin.cpp Thu Apr 23 08:59:24 2009 +0000 @@ -0,0 +1,210 @@ + +// 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) +{ +} + +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). + + 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(); +} +