Vital
|
A WavetableComponent that generates waveforms from a series of line segments. More...
#include <wave_line_source.h>
Classes | |
class | WaveLineSourceKeyframe |
A keyframe class that represents a particular line-based waveform configuration at a given position. More... | |
Public Member Functions | |
WaveLineSource () | |
Constructs a WaveLineSource with a default number of points. | |
virtual | ~WaveLineSource ()=default |
WavetableKeyframe * | createKeyframe (int position) override |
Creates a new keyframe at a given position. | |
void | render (vital::WaveFrame *wave_frame, float position) override |
Renders the waveform at a given position into a WaveFrame. | |
WavetableComponentFactory::ComponentType | getType () override |
Returns the type of this WavetableComponent. | |
json | stateToJson () override |
Serializes the component’s state and all keyframes to a JSON object. | |
void | jsonToState (json data) override |
Restores the component’s state from a JSON object. | |
void | setNumPoints (int num_points) |
Sets the number of points used by the line generator. | |
int | numPoints () |
Returns the current number of points in the line generator. | |
WaveLineSourceKeyframe * | getKeyframe (int index) |
Retrieves a WaveLineSourceKeyframe by index. | |
![]() | |
WavetableComponent () | |
Constructs a WavetableComponent with a default linear interpolation style. | |
virtual | ~WavetableComponent () |
virtual void | prerender () |
Called before rendering to perform any needed precomputation. | |
virtual bool | hasKeyframes () |
Indicates whether this component relies on multiple keyframes. | |
void | reset () |
Clears all keyframes and inserts a default one at position 0. | |
void | interpolate (WavetableKeyframe *dest, float position) |
Interpolates a destination keyframe at a given position. | |
WavetableKeyframe * | insertNewKeyframe (int position) |
Inserts a new keyframe at the given position, creating and sorting it into the array. | |
void | reposition (WavetableKeyframe *keyframe) |
Repositions a keyframe in the keyframe list after its position changed. | |
void | remove (WavetableKeyframe *keyframe) |
Removes a specific keyframe from the component. | |
int | numFrames () const |
Gets the number of keyframes. | |
int | indexOf (WavetableKeyframe *keyframe) const |
Finds the index of a given keyframe. | |
WavetableKeyframe * | getFrameAt (int index) const |
Gets a keyframe by index. | |
int | getIndexFromPosition (int position) const |
Finds the insertion index for a given position to keep keyframes sorted. | |
WavetableKeyframe * | getFrameAtPosition (int position) |
Gets a keyframe by position if one matches exactly, or nullptr otherwise. | |
int | getLastKeyframePosition () |
Gets the highest position among all keyframes. | |
void | setInterpolationStyle (InterpolationStyle type) |
Sets the global interpolation style. | |
InterpolationStyle | getInterpolationStyle () const |
Gets the current global interpolation style. | |
Static Public Attributes | |
static constexpr int | kDefaultLinePoints = 4 |
The default number of line points used if none are specified. | |
Protected Attributes | |
int | num_points_ |
The number of points defining the line-based waveform. | |
WaveLineSourceKeyframe | compute_frame_ |
A keyframe for intermediate computations. | |
![]() | |
std::vector< std::unique_ptr< WavetableKeyframe > > | keyframes_ |
The list of keyframes sorted by position. | |
InterpolationStyle | interpolation_style_ |
Current interpolation style (none, linear, cubic). | |
Additional Inherited Members | |
![]() | |
enum | InterpolationStyle { kNone , kLinear , kCubic , kNumInterpolationStyles } |
Defines how interpolation is performed between keyframes. More... | |
A WavetableComponent that generates waveforms from a series of line segments.
WaveLineSource uses a LineGenerator
internally, which defines a waveform by connecting a set of points with lines (optionally smoothed). Each point has both a position and a power parameter that influence the shape. Interpolation between keyframes allows for dynamic changes in the line-based waveform shape across the wavetable dimension.
By controlling the number of points and their arrangement, one can create simple waves (e.g., linear ramps) or more complex curves. The pull_power_
parameter affects how interpolation behaves, allowing for nonlinear transitions.
|
inline |
Constructs a WaveLineSource with a default number of points.
|
virtualdefault |
|
overridevirtual |
Creates a new keyframe at a given position.
Implemented by subclasses to produce a keyframe type suited to their functionality.
position | The wavetable frame index (0 to kNumOscillatorWaveFrames-1). |
Implements WavetableComponent.
WaveLineSource::WaveLineSourceKeyframe * WaveLineSource::getKeyframe | ( | int | index | ) |
Retrieves a WaveLineSourceKeyframe by index.
index | The index of the desired keyframe. |
|
overridevirtual |
Returns the type of this WavetableComponent.
Used to identify the specific component for serialization and UI mapping.
Implements WavetableComponent.
|
overridevirtual |
Restores the component’s state from a JSON object.
Clears existing keyframes and reconstructs them from the provided JSON data.
data | The JSON object containing saved state data. |
Reimplemented from WavetableComponent.
|
inline |
Returns the current number of points in the line generator.
|
overridevirtual |
Renders the waveform at a given position into a WaveFrame.
Uses interpolation between keyframes based on the current interpolation style to produce a waveform for the given position.
wave_frame | The WaveFrame to fill with the resulting waveform. |
position | The position along the wavetable dimension [0, kNumOscillatorWaveFrames-1]. |
Implements WavetableComponent.
void WaveLineSource::setNumPoints | ( | int | num_points | ) |
Sets the number of points used by the line generator.
num_points | The desired number of points. |
|
overridevirtual |
Serializes the component’s state and all keyframes to a JSON object.
Reimplemented from WavetableComponent.
|
protected |
A keyframe for intermediate computations.
|
staticconstexpr |
The default number of line points used if none are specified.
|
protected |
The number of points defining the line-based waveform.