37 filter.set_voicing(selected);
51 case signal::AnalogVcf::Voicing::juno:
53 case signal::AnalogVcf::Voicing::jupiter:
55 case signal::AnalogVcf::Voicing::prophet5:
57 case signal::AnalogVcf::Voicing::minimoog:
66 type.type_id = identity.
type_id;
68 type.num_input_ports = 1;
69 type.num_output_ports = 1;
70 type.default_name = identity.
name;
73 type.latency_samples = [](double) {
77 type.lowerable =
true;
80 type.prepare = [](
void* p,
double sample_rate,
int ) {
84 instance->filter.set_smoothing_time_ms(3.0);
85 instance->filter.reset();
88 type.process_instance =
92 const float* input_samples = input.channel_ptr(0);
93 float* output_samples = output.channel_ptr(0);
94 for (
int i = 0; i < num_samples; ++i)
95 output_samples[i] = instance->
filter.
process(input_samples[i]);
101 type.process_instance_baked_param =
106 const float* input_samples = input.channel_ptr(0);
107 float* output_samples = output.channel_ptr(0);
108 for (
int sample = 0; sample < num_samples; ++sample) {
109 const auto offset =
static_cast<std::int32_t
>(sample);
110 instance->filter.set_parameters(
115 output_samples[
static_cast<std::size_t
>(sample)] =
116 instance->filter.process(
117 input_samples[
static_cast<std::size_t
>(sample)]);
125 d.key =
"analog_vcf";
126 d.label =
"Analog VCF";
127 d.description =
"Four analog-inspired voltage-controlled filter voicings with panel-style "
128 "cutoff, resonance, modulation, and input drive.";
129 d.axes = {{
"voicing",
131 "Circuit family whose calibration, resonance, and saturation behavior "
132 "define the filter.",
133 {{
"juno",
"Juno", 0.0f},
134 {
"jupiter",
"Jupiter-8", 1.0f},
135 {
"prophet5",
"Prophet-5", 2.0f},
136 {
"minimoog",
"Minimoog", 3.0f}}}};
145 "Panel cutoff position after the selected voicing's calibrated frequency law.",
151 "Emphasis at the cutoff, extending into self-oscillating behavior for the "
Non-owning view over multi-channel audio sample data.
Definition buffer.hpp:30
Definition custom_node_type.hpp:51
void set_sample_rate(double sample_rate) noexcept
Sets the base sample rate in Hz, with values below 64 Hz clamped to 64.
Definition analog_vcf.hpp:91
Voicing
Definition analog_vcf.hpp:71
static constexpr int latency_samples_for_oversampling(int factor) noexcept
Definition analog_vcf.hpp:221
SampleType process(SampleType input) noexcept
Processes one base-rate sample and advances filter, oversampling, smoothing, and deterministic drift ...
Definition analog_vcf.hpp:195
Definition forge_analog_vcf_catalog.hpp:18
constexpr const char * kAnalogVcfMinimoogTypeId
Definition forge_analog_vcf_catalog.hpp:23
constexpr const char * kAnalogVcfJupiterTypeId
Definition forge_analog_vcf_catalog.hpp:21
constexpr const char * kAnalogVcfJunoTypeId
Definition forge_analog_vcf_catalog.hpp:20
constexpr state::ParamID kAnalogVcfResonance
Definition forge_analog_vcf_catalog.hpp:27
constexpr state::ParamID kAnalogVcfCutoffMod
Definition forge_analog_vcf_catalog.hpp:26
constexpr int kAnalogVcfOversampling
Definition forge_analog_vcf_catalog.hpp:33
constexpr state::ParamID kAnalogVcfDriveDb
Definition forge_analog_vcf_catalog.hpp:28
AnalogVcfIdentity analog_vcf_identity(signal::AnalogVcf::Voicing voicing) noexcept
Definition forge_analog_vcf_catalog.hpp:48
CustomNodeType make_analog_vcf_node(signal::AnalogVcf::Voicing voicing)
Definition forge_analog_vcf_catalog.hpp:63
constexpr state::ParamID kAnalogVcfCutoff
Definition forge_analog_vcf_catalog.hpp:25
constexpr const char * kAnalogVcfProphet5TypeId
Definition forge_analog_vcf_catalog.hpp:22
ForgeNodeDescriptor analog_vcf_descriptor()
Definition forge_analog_vcf_catalog.hpp:123
@ continuous
Definition forge_param_descriptor.hpp:25
@ linear
Definition forge_param_descriptor.hpp:29
AnalogVcfT< float > AnalogVcf
Single-precision measured analog VCF.
Definition analog_vcf.hpp:488
uint32_t ParamID
Unique parameter identifier, stable across plugin versions.
Definition parameter.hpp:55
Definition custom_node_type.hpp:90
Definition forge_param_descriptor.hpp:127
Definition forge_analog_vcf_catalog.hpp:43
const char * type_id
Definition forge_analog_vcf_catalog.hpp:44
const char * name
Definition forge_analog_vcf_catalog.hpp:45
Definition forge_analog_vcf_catalog.hpp:35
AnalogVcfInstance(signal::AnalogVcf::Voicing selected) noexcept
Definition forge_analog_vcf_catalog.hpp:36
signal::AnalogVcf filter
Definition forge_analog_vcf_catalog.hpp:40