Vital
Loading...
Searching...
No Matches
slew_limit_modifier.h
Go to the documentation of this file.
1/*
2Summary:
3SlewLimitModifier applies slew-rate limiting to the wavetable’s time-domain signal, controlling how quickly the waveform can rise or fall per sample. By adjusting the upward and downward slew parameters, one can achieve smoother transitions and reduce harsh dynamics in the resulting sound. Interpolating between keyframes allows these constraints to evolve across the wavetable.
4 */
5
6#pragma once
7
8#include "JuceHeader.h"
10
19public:
28 public:
34
35 void copy(const WavetableKeyframe* keyframe) override;
36 void interpolate(const WavetableKeyframe* from_keyframe,
37 const WavetableKeyframe* to_keyframe, float t) override;
38 void render(vital::WaveFrame* wave_frame) override;
39 json stateToJson() override;
40 void jsonToState(json data) override;
41
50
59
65 void setSlewUpLimit(float slew_up_limit) { slew_up_run_rise_ = slew_up_limit; }
66
72 void setSlewDownLimit(float slew_down_limit) { slew_down_run_rise_ = slew_down_limit; }
73
74 protected:
77
78 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SlewLimitModifierKeyframe)
79 };
80
87 virtual ~SlewLimitModifier() { }
88
89 WavetableKeyframe* createKeyframe(int position) override;
90 void render(vital::WaveFrame* wave_frame, float position) override;
92
99 SlewLimitModifierKeyframe* getKeyframe(int index);
100
101protected:
103
104 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SlewLimitModifier)
105};
A keyframe class holding parameters for slew-rate limits at a given position.
Definition slew_limit_modifier.h:27
void interpolate(const WavetableKeyframe *from_keyframe, const WavetableKeyframe *to_keyframe, float t) override
Linearly interpolates between two keyframes.
Definition slew_limit_modifier.cpp:22
float getSlewUpLimit()
Gets the upward slew limit.
Definition slew_limit_modifier.h:49
SlewLimitModifierKeyframe()
Constructs a keyframe with default slew limit values.
Definition slew_limit_modifier.cpp:10
void jsonToState(json data) override
Restores the keyframe's state from a JSON object.
Definition slew_limit_modifier.cpp:63
json stateToJson() override
Serializes the state of this keyframe to a JSON object.
Definition slew_limit_modifier.cpp:56
virtual ~SlewLimitModifierKeyframe()
Definition slew_limit_modifier.h:33
void render(vital::WaveFrame *wave_frame) override
Renders the waveform of this keyframe into a WaveFrame.
Definition slew_limit_modifier.cpp:33
float getSlewDownLimit()
Gets the downward slew limit.
Definition slew_limit_modifier.h:58
void copy(const WavetableKeyframe *keyframe) override
Copies the state from another keyframe of the same type.
Definition slew_limit_modifier.cpp:16
float slew_down_run_rise_
Parameter controlling downward slew rate.
Definition slew_limit_modifier.h:76
float slew_up_run_rise_
Parameter controlling upward slew rate.
Definition slew_limit_modifier.h:75
void setSlewDownLimit(float slew_down_limit)
Sets the downward slew limit parameter.
Definition slew_limit_modifier.h:72
void setSlewUpLimit(float slew_up_limit)
Sets the upward slew limit parameter.
Definition slew_limit_modifier.h:65
A WavetableComponent that applies slew-rate limiting to a wave’s time-domain signal.
Definition slew_limit_modifier.h:18
SlewLimitModifierKeyframe * getKeyframe(int index)
Retrieves a SlewLimitModifierKeyframe by index.
Definition slew_limit_modifier.cpp:85
virtual ~SlewLimitModifier()
Definition slew_limit_modifier.h:87
SlewLimitModifier()
Constructs a SlewLimitModifier.
Definition slew_limit_modifier.h:86
SlewLimitModifierKeyframe compute_frame_
A keyframe used for intermediate computations.
Definition slew_limit_modifier.h:102
WavetableComponentFactory::ComponentType getType() override
Returns the type of this WavetableComponent.
Definition slew_limit_modifier.cpp:81
WavetableKeyframe * createKeyframe(int position) override
Creates a new keyframe at a given position.
Definition slew_limit_modifier.cpp:69
void render(vital::WaveFrame *wave_frame, float position) override
Renders the waveform at a given position into a WaveFrame.
Definition slew_limit_modifier.cpp:75
ComponentType
Enumerates all known WavetableComponents, including sources and modifiers.
Definition wavetable_component_factory.h:28
A base class representing a component in a wavetable synthesis chain.
Definition wavetable_component.h:32
Represents a single state of a waveform at a specific position in a wavetable.
Definition wavetable_keyframe.h:35
Represents a single frame of a wavetable, containing both time-domain and frequency-domain data.
Definition wave_frame.h:16
nlohmann::json json
Definition line_generator.h:7