Chris@12: Chris@12: // This is a skeleton file for use in creating your own plugin Chris@12: // libraries. Replace MyPlugin and myPlugin throughout with the name Chris@12: // of your first plugin class, and fill in the gaps as appropriate. Chris@12: Chris@12: Chris@12: #include "MyPlugin.h" Chris@12: Chris@12: Chris@12: MyPlugin::MyPlugin(float inputSampleRate) : Chris@12: Plugin(inputSampleRate) Chris@12: // Also be sure to set your plugin parameters (presumably stored Chris@12: // in member variables) to their default values here -- the host Chris@12: // will not do that for you Chris@12: { Chris@12: } Chris@12: Chris@12: MyPlugin::~MyPlugin() Chris@12: { Chris@12: } Chris@12: Chris@12: string Chris@12: MyPlugin::getIdentifier() const Chris@12: { Chris@12: return "myplugin"; Chris@12: } Chris@12: Chris@12: string Chris@12: MyPlugin::getName() const Chris@12: { Chris@12: return "My Plugin"; Chris@12: } Chris@12: Chris@12: string Chris@12: MyPlugin::getDescription() const Chris@12: { Chris@12: // Return something helpful here! Chris@12: return ""; Chris@12: } Chris@12: Chris@12: string Chris@12: MyPlugin::getMaker() const Chris@12: { Chris@12: // Your name here Chris@12: return ""; Chris@12: } Chris@12: Chris@12: int Chris@12: MyPlugin::getPluginVersion() const Chris@12: { Chris@12: // Increment this each time you release a version that behaves Chris@12: // differently from the previous one Chris@12: return 1; Chris@12: } Chris@12: Chris@12: string Chris@12: MyPlugin::getCopyright() const Chris@12: { Chris@12: // This function is not ideally named. It does not necessarily Chris@12: // need to say who made the plugin -- getMaker does that -- but it Chris@12: // should indicate the terms under which it is distributed. For Chris@12: // example, "Copyright (year). All Rights Reserved", or "GPL" Chris@12: return ""; Chris@12: } Chris@12: Chris@12: MyPlugin::InputDomain Chris@12: MyPlugin::getInputDomain() const Chris@12: { Chris@12: return TimeDomain; Chris@12: } Chris@12: Chris@12: size_t Chris@12: MyPlugin::getPreferredBlockSize() const Chris@12: { Chris@12: return 0; // 0 means "I can handle any block size" Chris@12: } Chris@12: Chris@12: size_t Chris@12: MyPlugin::getPreferredStepSize() const Chris@12: { Chris@12: return 0; // 0 means "anything sensible"; in practice this Chris@12: // means the same as the block size for TimeDomain Chris@12: // plugins, or half of it for FrequencyDomain plugins Chris@12: } Chris@12: Chris@12: size_t Chris@12: MyPlugin::getMinChannelCount() const Chris@12: { Chris@12: return 1; Chris@12: } Chris@12: Chris@12: size_t Chris@12: MyPlugin::getMaxChannelCount() const Chris@12: { Chris@12: return 1; Chris@12: } Chris@12: Chris@12: MyPlugin::ParameterList Chris@12: MyPlugin::getParameterDescriptors() const Chris@12: { Chris@12: ParameterList list; Chris@12: Chris@12: // If the plugin has no adjustable parameters, return an empty Chris@12: // list here (and there's no need to provide implementations of Chris@12: // getParameter and setParameter in that case either). Chris@12: Chris@12: // Note that it is your responsibility to make sure the parameters Chris@12: // start off having their default values (e.g. in the constructor Chris@12: // above). The host needs to know the default value so it can do Chris@12: // things like provide a "reset to default" function, but it will Chris@12: // not explicitly set your parameters to their defaults for you if Chris@12: // they have not changed in the mean time. Chris@12: Chris@12: ParameterDescriptor d; Chris@12: d.identifier = "parameter"; Chris@12: d.name = "Some Parameter"; Chris@12: d.description = ""; Chris@12: d.unit = ""; Chris@12: d.minValue = 0; Chris@12: d.maxValue = 10; Chris@12: d.defaultValue = 5; Chris@12: d.isQuantized = false; Chris@12: list.push_back(d); Chris@12: Chris@12: return list; Chris@12: } Chris@12: Chris@12: float Chris@12: MyPlugin::getParameter(string identifier) const Chris@12: { Chris@12: if (identifier == "parameter") { Chris@12: return 5; // return the ACTUAL current value of your parameter here! Chris@12: } Chris@12: return 0; Chris@12: } Chris@12: Chris@12: void Chris@12: MyPlugin::setParameter(string identifier, float value) Chris@12: { Chris@12: if (identifier == "parameter") { Chris@12: // set the actual value of your parameter Chris@12: } Chris@12: } Chris@12: Chris@12: MyPlugin::ProgramList Chris@12: MyPlugin::getPrograms() const Chris@12: { Chris@12: ProgramList list; Chris@12: Chris@12: // If you have no programs, return an empty list (or simply don't Chris@12: // implement this function or getCurrentProgram/selectProgram) Chris@12: Chris@12: return list; Chris@12: } Chris@12: Chris@12: string Chris@12: MyPlugin::getCurrentProgram() const Chris@12: { Chris@12: return ""; // no programs Chris@12: } Chris@12: Chris@12: void Chris@12: MyPlugin::selectProgram(string name) Chris@12: { Chris@12: } Chris@12: Chris@12: MyPlugin::OutputList Chris@12: MyPlugin::getOutputDescriptors() const Chris@12: { Chris@12: OutputList list; Chris@12: Chris@12: // See OutputDescriptor documentation for the possibilities here. Chris@12: // Every plugin must have at least one output. Chris@12: Chris@12: OutputDescriptor d; Chris@12: d.identifier = "output"; Chris@12: d.name = "My Output"; Chris@12: d.description = ""; Chris@12: d.unit = ""; Chris@12: d.hasFixedBinCount = true; Chris@12: d.binCount = 1; Chris@12: d.hasKnownExtents = false; Chris@12: d.isQuantized = false; Chris@12: d.sampleType = OutputDescriptor::OneSamplePerStep; Chris@12: d.hasDuration = false; Chris@12: list.push_back(d); Chris@12: Chris@12: return list; Chris@12: } Chris@12: Chris@12: bool Chris@12: MyPlugin::initialise(size_t channels, size_t stepSize, size_t blockSize) Chris@12: { Chris@12: if (channels < getMinChannelCount() || Chris@12: channels > getMaxChannelCount()) return false; Chris@12: Chris@12: // Real initialisation work goes here! Chris@12: Chris@12: return true; Chris@12: } Chris@12: Chris@12: void Chris@12: MyPlugin::reset() Chris@12: { Chris@12: // Clear buffers, reset stored values, etc Chris@12: } Chris@12: Chris@12: MyPlugin::FeatureSet Chris@12: MyPlugin::process(const float *const *inputBuffers, Vamp::RealTime timestamp) Chris@12: { Chris@12: // Do actual work! Chris@12: return FeatureSet(); Chris@12: } Chris@12: Chris@12: MyPlugin::FeatureSet Chris@12: MyPlugin::getRemainingFeatures() Chris@12: { Chris@12: return FeatureSet(); Chris@12: } Chris@12: