Vital
Loading...
Searching...
No Matches
WaveLineSource Class Reference

A WavetableComponent that generates waveforms from a series of line segments. More...

#include <wave_line_source.h>

Inheritance diagram for WaveLineSource:
WavetableComponent

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
 
WavetableKeyframecreateKeyframe (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.
 
WaveLineSourceKeyframegetKeyframe (int index)
 Retrieves a WaveLineSourceKeyframe by index.
 
- Public Member Functions inherited from WavetableComponent
 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.
 
WavetableKeyframeinsertNewKeyframe (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.
 
WavetableKeyframegetFrameAt (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.
 
WavetableKeyframegetFrameAtPosition (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.
 
- Protected Attributes inherited from WavetableComponent
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

- Public Types inherited from WavetableComponent
enum  InterpolationStyle { kNone , kLinear , kCubic , kNumInterpolationStyles }
 Defines how interpolation is performed between keyframes. More...
 

Detailed Description

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.

Constructor & Destructor Documentation

◆ WaveLineSource()

WaveLineSource::WaveLineSource ( )
inline

Constructs a WaveLineSource with a default number of points.

◆ ~WaveLineSource()

virtual WaveLineSource::~WaveLineSource ( )
virtualdefault

Member Function Documentation

◆ createKeyframe()

WavetableKeyframe * WaveLineSource::createKeyframe ( int position)
overridevirtual

Creates a new keyframe at a given position.

Implemented by subclasses to produce a keyframe type suited to their functionality.

Parameters
positionThe wavetable frame index (0 to kNumOscillatorWaveFrames-1).
Returns
A pointer to the newly created WavetableKeyframe.

Implements WavetableComponent.

◆ getKeyframe()

WaveLineSource::WaveLineSourceKeyframe * WaveLineSource::getKeyframe ( int index)

Retrieves a WaveLineSourceKeyframe by index.

Parameters
indexThe index of the desired keyframe.
Returns
A pointer to the WaveLineSourceKeyframe.

◆ getType()

WavetableComponentFactory::ComponentType WaveLineSource::getType ( )
overridevirtual

Returns the type of this WavetableComponent.

Used to identify the specific component for serialization and UI mapping.

Returns
The component type enumerated in WavetableComponentFactory.

Implements WavetableComponent.

◆ jsonToState()

void WaveLineSource::jsonToState ( json data)
overridevirtual

Restores the component’s state from a JSON object.

Clears existing keyframes and reconstructs them from the provided JSON data.

Parameters
dataThe JSON object containing saved state data.

Reimplemented from WavetableComponent.

◆ numPoints()

int WaveLineSource::numPoints ( )
inline

Returns the current number of points in the line generator.

Returns
The number of points.

◆ render()

void WaveLineSource::render ( vital::WaveFrame * wave_frame,
float position )
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.

Parameters
wave_frameThe WaveFrame to fill with the resulting waveform.
positionThe position along the wavetable dimension [0, kNumOscillatorWaveFrames-1].

Implements WavetableComponent.

◆ setNumPoints()

void WaveLineSource::setNumPoints ( int num_points)

Sets the number of points used by the line generator.

Parameters
num_pointsThe desired number of points.

◆ stateToJson()

json WaveLineSource::stateToJson ( )
overridevirtual

Serializes the component’s state and all keyframes to a JSON object.

Returns
A JSON object representing the entire state.

Reimplemented from WavetableComponent.

Member Data Documentation

◆ compute_frame_

WaveLineSourceKeyframe WaveLineSource::compute_frame_
protected

A keyframe for intermediate computations.

◆ kDefaultLinePoints

int WaveLineSource::kDefaultLinePoints = 4
staticconstexpr

The default number of line points used if none are specified.

◆ num_points_

int WaveLineSource::num_points_
protected

The number of points defining the line-based waveform.


The documentation for this class was generated from the following files: