16static_assert(
sizeof(
unsigned int) >=
sizeof(uint32_t),
"Size type must have at least 32 bit");
64 using InputBuffer = std::variant<TimeDomainBuffer, FrequencyDomainBuffer>;
79template <u
int32_t NOutputs>
82 explicit constexpr Plugin(
float inputSampleRate) : inputSampleRate_(inputSampleRate) {}
84 using OutputList = std::array<OutputDescriptor, NOutputs>;
101 static constexpr std::array<ParameterDescriptor, 0>
parameters{};
102 static constexpr std::array<const char*, 0>
programs{};
104 virtual std::optional<float>
getParameter(std::string_view
id)
const {
return {}; }
105 virtual bool setParameter(std::string_view
id,
float value) {
return false; }
115 virtual bool initialise(uint32_t stepSize, uint32_t blockSize) = 0;
127 featureSet[i].resize(outputs[i].binCount);
132 float inputSampleRate_;
140 { T::parameters } -> std::convertible_to<std::array<PluginBase::ParameterDescriptor, T::parameters.size()>>;
145 { T::programs } -> std::convertible_to<std::array<
const char*, T::programs.size()>>;
149concept IsPlugin = std::constructible_from<T, float> &&
requires(
151 std::string_view parameterName,
152 float parameterValue,
153 std::string_view programName,
159 { T::outputCount } -> std::convertible_to<uint32_t>;
160 { T::meta } -> std::convertible_to<typename T::Meta>;
163 { plugin.getParameter(parameterName) } -> std::same_as<std::optional<float>>;
164 { plugin.setParameter(parameterName, parameterValue) } -> std::same_as<bool>;
168 { plugin.getCurrentProgram() } -> std::same_as<std::string_view>;
169 { plugin.selectProgram(programName) } -> std::same_as<bool>;
172 { plugin.getPreferredStepSize() } -> std::same_as<uint32_t>;
173 { plugin.getPreferredBlockSize() } -> std::same_as<uint32_t>;
174 { plugin.getOutputDescriptors() } -> std::same_as<std::array<PluginBase::OutputDescriptor, T::outputCount>>;
175 { plugin.initialise(stepSize, blockSize) } -> std::same_as<bool>;
176 { plugin.reset() } -> std::same_as<void>;
177 { plugin.process(buffer, nsec) } -> std::convertible_to<const std::array<PluginBase::Feature, T::outputCount>&>;
Non-templated plugin base class with type definitions.
Definition Plugin.hpp:23
PluginBase & operator=(PluginBase &&)=default
std::span< const std::complex< float > > FrequencyDomainBuffer
Frequency domain buffer (FFT)
Definition Plugin.hpp:63
virtual ~PluginBase()=default
std::span< const float > TimeDomainBuffer
Time domain buffer.
Definition Plugin.hpp:62
InputDomain
Input domain of the plugin.
Definition Plugin.hpp:34
std::variant< TimeDomainBuffer, FrequencyDomainBuffer > InputBuffer
Input domain variant.
Definition Plugin.hpp:64
PluginBase(PluginBase &&)=default
std::vector< float > Feature
Feature with one or more values (defined by OutputDescriptor::binCount)
Definition Plugin.hpp:65
PluginBase(const PluginBase &)=default
PluginBase & operator=(const PluginBase &)=default
Base class to implement feature extraction plugins.
Definition Plugin.hpp:80
static constexpr Meta meta
Required static plugin descriptor.
Definition Plugin.hpp:100
static constexpr uint32_t outputCount
Number of outputs (defined by template parameter)
Definition Plugin.hpp:87
virtual uint32_t getPreferredStepSize() const
Definition Plugin.hpp:110
FeatureSet & getFeatureSet() noexcept
Definition Plugin.hpp:121
virtual bool selectProgram(std::string_view name)
Definition Plugin.hpp:108
virtual bool setParameter(std::string_view id, float value)
Definition Plugin.hpp:105
float getInputSampleRate() const noexcept
Definition Plugin.hpp:120
void initialiseFeatureSet()
Definition Plugin.hpp:123
std::array< OutputDescriptor, NOutputs > OutputList
List of output descriptors.
Definition Plugin.hpp:84
virtual std::string_view getCurrentProgram() const
Definition Plugin.hpp:107
virtual const FeatureSet & process(InputBuffer buffer, uint64_t nsec)=0
virtual bool initialise(uint32_t stepSize, uint32_t blockSize)=0
std::array< Feature, NOutputs > FeatureSet
Computed features for each output.
Definition Plugin.hpp:85
constexpr Plugin(float inputSampleRate)
Definition Plugin.hpp:82
virtual uint32_t getPreferredBlockSize() const
Definition Plugin.hpp:111
static constexpr std::array< ParameterDescriptor, 0 > parameters
Optional parameter descriptors (default: none)
Definition Plugin.hpp:101
static constexpr std::array< const char *, 0 > programs
Optional program list (default: none)
Definition Plugin.hpp:102
virtual std::optional< float > getParameter(std::string_view id) const
Definition Plugin.hpp:104
virtual OutputList getOutputDescriptors() const =0
Definition Plugin.hpp:139
Definition Plugin.hpp:144
Definition Plugin.hpp:149
Definition EntryPoint.hpp:8
std::string identifier
Definition Plugin.hpp:50
std::string name
Definition Plugin.hpp:51
float maxValue
Definition Plugin.hpp:58
std::string description
Definition Plugin.hpp:52
bool hasKnownExtents
Definition Plugin.hpp:56
float minValue
Definition Plugin.hpp:57
std::vector< std::string > binNames
Definition Plugin.hpp:55
uint32_t binCount
Definition Plugin.hpp:54
std::string unit
Definition Plugin.hpp:53
std::optional< float > quantizeStep
Definition Plugin.hpp:59
std::optional< float > quantizeStep
Definition Plugin.hpp:45
float maxValue
Definition Plugin.hpp:44
float minValue
Definition Plugin.hpp:43
const char * description
Definition Plugin.hpp:40
float defaultValue
Definition Plugin.hpp:42
const char * name
Definition Plugin.hpp:39
const char * identifier
Definition Plugin.hpp:38
const char * unit
Definition Plugin.hpp:41