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