rt-vamp-plugin-sdk 0.3.1
Real-time Vamp plugin SDK for C++20
Loading...
Searching...
No Matches
Plugin.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <complex>
4#include <cstdint>
5#include <filesystem>
6#include <optional>
7#include <span>
8#include <string_view>
9#include <variant>
10#include <vector>
11
12namespace rtvamp::hostsdk {
13
14class Plugin {
15public:
16 explicit Plugin(float inputSampleRate) : inputSampleRate_(inputSampleRate) {}
17 virtual ~Plugin() = default;
18
19 Plugin(const Plugin&) = default;
20 Plugin(Plugin&&) = default;
21 Plugin& operator=(const Plugin&) = default;
22 Plugin& operator=(Plugin&&) = default;
23
25 enum class InputDomain { Time, Frequency };
26
28 std::string_view identifier;
29 std::string_view name;
30 std::string_view description;
31 std::string_view unit;
32 float defaultValue{};
33 float minValue{};
34 float maxValue{};
35 std::optional<float> quantizeStep;
36 std::vector<std::string_view> valueNames;
37 };
38
40 std::string identifier;
41 std::string name;
42 std::string description;
43 std::string unit;
44 uint32_t binCount{};
45 std::vector<std::string> binNames;
47 float minValue{};
48 float maxValue{};
49 std::optional<float> quantizeStep;
50 };
51
52 using ParameterList = std::span<const ParameterDescriptor>;
53 using ProgramList = std::span<const std::string_view>;
54 using CurrentProgram = std::optional<std::string_view>;
55 using OutputList = std::vector<OutputDescriptor>;
56 using TimeDomainBuffer = std::span<const float>;
57 using FrequencyDomainBuffer = std::span<const std::complex<float>>;
58 using InputBuffer = std::variant<TimeDomainBuffer, FrequencyDomainBuffer>;
59 using Feature = std::vector<float>;
60 using FeatureSet = std::span<const Feature>;
61
62 virtual std::filesystem::path getLibraryPath() const noexcept = 0;
63
64 virtual uint32_t getVampApiVersion() const noexcept = 0;
65
66 virtual std::string_view getIdentifier( ) const noexcept = 0;
67 virtual std::string_view getName() const noexcept = 0;
68 virtual std::string_view getDescription() const noexcept = 0;
69 virtual std::string_view getMaker() const noexcept = 0;
70 virtual std::string_view getCopyright() const noexcept = 0;
71 virtual int getPluginVersion() const noexcept = 0;
72 virtual InputDomain getInputDomain() const noexcept = 0;
73
74 virtual ParameterList getParameterDescriptors() const noexcept = 0;
75 virtual std::optional<float> getParameter(std::string_view id) const = 0;
76 virtual bool setParameter(std::string_view id, float value) = 0;
77
78 virtual ProgramList getPrograms() const noexcept = 0;
79 virtual CurrentProgram getCurrentProgram() const = 0;
80 virtual bool selectProgram(std::string_view name) = 0;
81
82 virtual uint32_t getPreferredStepSize() const = 0;
83 virtual uint32_t getPreferredBlockSize() const = 0;
84
85 virtual uint32_t getOutputCount() const = 0;
86 virtual OutputList getOutputDescriptors() const = 0;
87
88 virtual bool initialise(uint32_t stepSize, uint32_t blockSize) = 0;
89 virtual void reset() = 0;
90 virtual FeatureSet process(InputBuffer buffer, uint64_t nsec) = 0;
91
92 float getInputSampleRate() const noexcept { return inputSampleRate_; };
93
94private:
95 float inputSampleRate_;
96};
97
98} // namespace rtvamp::hostsdk
Definition Plugin.hpp:14
virtual std::string_view getMaker() const noexcept=0
virtual uint32_t getPreferredBlockSize() const =0
Plugin(float inputSampleRate)
Definition Plugin.hpp:16
virtual ProgramList getPrograms() const noexcept=0
virtual std::optional< float > getParameter(std::string_view id) const =0
virtual ParameterList getParameterDescriptors() const noexcept=0
virtual bool initialise(uint32_t stepSize, uint32_t blockSize)=0
virtual bool selectProgram(std::string_view name)=0
Plugin & operator=(Plugin &&)=default
virtual uint32_t getPreferredStepSize() const =0
std::optional< std::string_view > CurrentProgram
Current program (if programs avaiable)
Definition Plugin.hpp:54
std::variant< TimeDomainBuffer, FrequencyDomainBuffer > InputBuffer
Input buffer variant.
Definition Plugin.hpp:58
virtual std::string_view getName() const noexcept=0
virtual std::string_view getCopyright() const noexcept=0
std::span< const std::complex< float > > FrequencyDomainBuffer
Frequency domain buffer (FFT)
Definition Plugin.hpp:57
virtual uint32_t getVampApiVersion() const noexcept=0
virtual std::string_view getDescription() const noexcept=0
std::vector< float > Feature
Feature with one or more values (defined by OutputDescriptor::binCount)
Definition Plugin.hpp:59
virtual FeatureSet process(InputBuffer buffer, uint64_t nsec)=0
virtual std::filesystem::path getLibraryPath() const noexcept=0
InputDomain
Input domain of the plugin.
Definition Plugin.hpp:25
std::span< const float > TimeDomainBuffer
Time domain buffer.
Definition Plugin.hpp:56
std::vector< OutputDescriptor > OutputList
List of output descriptors.
Definition Plugin.hpp:55
Plugin & operator=(const Plugin &)=default
virtual std::string_view getIdentifier() const noexcept=0
std::span< const ParameterDescriptor > ParameterList
List of parameter descriptors.
Definition Plugin.hpp:52
virtual InputDomain getInputDomain() const noexcept=0
virtual uint32_t getOutputCount() const =0
virtual CurrentProgram getCurrentProgram() const =0
virtual bool setParameter(std::string_view id, float value)=0
std::span< const Feature > FeatureSet
Computed features for each output.
Definition Plugin.hpp:60
virtual OutputList getOutputDescriptors() const =0
std::span< const std::string_view > ProgramList
List of programs.
Definition Plugin.hpp:53
virtual ~Plugin()=default
Plugin(Plugin &&)=default
virtual int getPluginVersion() const noexcept=0
float getInputSampleRate() const noexcept
Definition Plugin.hpp:92
virtual void reset()=0
Plugin(const Plugin &)=default
Definition hostsdk.hpp:12
bool hasKnownExtents
Definition Plugin.hpp:46
std::string description
Definition Plugin.hpp:42
std::optional< float > quantizeStep
Definition Plugin.hpp:49
std::vector< std::string > binNames
Definition Plugin.hpp:45
uint32_t binCount
Definition Plugin.hpp:44
std::string identifier
Definition Plugin.hpp:40
std::string unit
Definition Plugin.hpp:43
std::string name
Definition Plugin.hpp:41
float maxValue
Definition Plugin.hpp:48
float minValue
Definition Plugin.hpp:47
std::string_view unit
Definition Plugin.hpp:31
float maxValue
Definition Plugin.hpp:34
std::string_view name
Definition Plugin.hpp:29
float defaultValue
Definition Plugin.hpp:32
std::vector< std::string_view > valueNames
Definition Plugin.hpp:36
float minValue
Definition Plugin.hpp:33
std::string_view identifier
Definition Plugin.hpp:28
std::optional< float > quantizeStep
Definition Plugin.hpp:35
std::string_view description
Definition Plugin.hpp:30