Vital
Loading...
Searching...
No Matches
wavetable_keyframe.h
Go to the documentation of this file.
1/*
2Summary:
3WavetableKeyframe defines a single point in a wavetable where the waveform configuration is known. By interpolating between keyframes, a component can produce evolving waveforms. This class provides generic interpolation (linear and cubic) and serialization methods, while subclasses specify how waveform data is stored and rendered.
4 */
5
6#pragma once
7
8#include "JuceHeader.h"
9#include "json/json.h"
10#include "synth_constants.h"
11
12using json = nlohmann::json;
13
15
16namespace vital {
17 class WaveFrame;
18} // namespace vital
19
36public:
45 static float linearTween(float point_from, float point_to, float t);
46
60 static float cubicTween(float point_prev, float point_from, float point_to, float point_next,
61 float range_prev, float range, float range_next, float t);
62
66 WavetableKeyframe() : position_(0), owner_(nullptr) { }
67 virtual ~WavetableKeyframe() { }
68
74 int index();
75
81 int position() const { return position_; }
82
92
98 virtual void copy(const WavetableKeyframe* keyframe) = 0;
99
107 virtual void interpolate(const WavetableKeyframe* from_keyframe,
108 const WavetableKeyframe* to_keyframe, float t) = 0;
109
121 virtual void smoothInterpolate(const WavetableKeyframe* prev_keyframe,
122 const WavetableKeyframe* from_keyframe,
123 const WavetableKeyframe* to_keyframe,
124 const WavetableKeyframe* next_keyframe, float t) { }
125
131 virtual void render(vital::WaveFrame* wave_frame) = 0;
132
138 virtual json stateToJson();
139
145 virtual void jsonToState(json data);
146
153
160
161protected:
164
165 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(WavetableKeyframe)
166};
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
static float linearTween(float point_from, float point_to, float t)
Performs linear interpolation between two points.
Definition wavetable_keyframe.cpp:11
int position() const
Gets the wavetable frame position of this keyframe.
Definition wavetable_keyframe.h:81
static float cubicTween(float point_prev, float point_from, float point_to, float point_next, float range_prev, float range, float range_next, float t)
Performs cubic interpolation taking into account a previous and next point for smoother curves.
Definition wavetable_keyframe.cpp:16
int index()
Gets the index of this keyframe within its owner component.
Definition wavetable_keyframe.cpp:32
WavetableComponent * owner()
Gets the WavetableComponent that owns this keyframe.
Definition wavetable_keyframe.h:152
void setPosition(int position)
Sets the frame position of this keyframe.
Definition wavetable_keyframe.h:88
virtual void smoothInterpolate(const WavetableKeyframe *prev_keyframe, const WavetableKeyframe *from_keyframe, const WavetableKeyframe *to_keyframe, const WavetableKeyframe *next_keyframe, float t)
Performs a smooth (cubic) interpolation using four keyframes for even smoother transitions.
Definition wavetable_keyframe.h:121
virtual ~WavetableKeyframe()
Definition wavetable_keyframe.h:67
WavetableKeyframe()
Constructs a WavetableKeyframe with a default position of 0 and no owner.
Definition wavetable_keyframe.h:66
virtual void interpolate(const WavetableKeyframe *from_keyframe, const WavetableKeyframe *to_keyframe, float t)=0
Linearly interpolates between two keyframes.
int position_
The position of this keyframe along the wavetable dimension.
Definition wavetable_keyframe.h:162
virtual void render(vital::WaveFrame *wave_frame)=0
Renders the waveform of this keyframe into a WaveFrame.
virtual json stateToJson()
Serializes the state of this keyframe to a JSON object.
Definition wavetable_keyframe.cpp:37
virtual void copy(const WavetableKeyframe *keyframe)=0
Copies the state from another keyframe of the same type.
WavetableComponent * owner_
The component that owns this keyframe.
Definition wavetable_keyframe.h:163
void setOwner(WavetableComponent *owner)
Sets the owner of this keyframe.
Definition wavetable_keyframe.h:159
virtual void jsonToState(json data)
Restores the keyframe's state from a JSON object.
Definition wavetable_keyframe.cpp:41
Represents a single frame of a wavetable, containing both time-domain and frequency-domain data.
Definition wave_frame.h:16
#define VITAL_ASSERT(x)
Definition common.h:11
nlohmann::json json
Definition line_generator.h:7
Contains classes and functions used within the Vital synthesizer framework.
constexpr int kNumOscillatorWaveFrames
Number of wave frames in each oscillator’s wavetable.
Definition synth_constants.h:19