Vital
|
A WavetableComponent that applies a windowing function to a waveform’s head and tail. More...
#include <wave_window_modifier.h>
Classes | |
class | WaveWindowModifierKeyframe |
A keyframe class that stores the window shape and positions at a given table position. More... | |
Public Types | |
enum | WindowShape { kCos , kHalfSin , kLinear , kSquare , kWiggle , kNumWindowShapes } |
Defines different windowing curves. More... | |
![]() | |
enum | InterpolationStyle { kNone , kLinear , kCubic , kNumInterpolationStyles } |
Defines how interpolation is performed between keyframes. More... | |
Public Member Functions | |
WaveWindowModifier () | |
Constructs a WaveWindowModifier with a default cosine window shape. | |
virtual | ~WaveWindowModifier () |
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. | |
WaveWindowModifierKeyframe * | getKeyframe (int index) |
Retrieves a WaveWindowModifierKeyframe by index. | |
void | setWindowShape (WindowShape window_shape) |
Sets the window shape used by this modifier. | |
WindowShape | getWindowShape () |
Gets the current window shape. | |
![]() | |
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 Member Functions | |
static float | applyWindow (WindowShape window_shape, float t) |
Applies the chosen window shape to a given normalized position. | |
Protected Attributes | |
WaveWindowModifierKeyframe | compute_frame_ |
A keyframe for intermediate computations. | |
WindowShape | window_shape_ |
The global window shape used. | |
![]() | |
std::vector< std::unique_ptr< WavetableKeyframe > > | keyframes_ |
The list of keyframes sorted by position. | |
InterpolationStyle | interpolation_style_ |
Current interpolation style (none, linear, cubic). | |
A WavetableComponent that applies a windowing function to a waveform’s head and tail.
WaveWindowModifier uses a specified window shape (cosine, half-sine, linear, square, or "wiggle") to smoothly taper the waveform’s amplitude near its start and end. By adjusting the window’s left and right positions, the user can control how much of the wave is affected and how abruptly it transitions at the boundaries.
|
inline |
Constructs a WaveWindowModifier with a default cosine window shape.
|
inlinevirtual |
|
static |
Applies the chosen window shape to a given normalized position.
window_shape | The WindowShape to apply. |
t | A normalized time parameter [0,1]. |
|
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.
WaveWindowModifier::WaveWindowModifierKeyframe * WaveWindowModifier::getKeyframe | ( | int | index | ) |
Retrieves a WaveWindowModifierKeyframe 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.
|
inline |
Gets the current window shape.
|
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.
|
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.
|
inline |
Sets the window shape used by this modifier.
window_shape | The WindowShape to use. |
|
overridevirtual |
Serializes the component’s state and all keyframes to a JSON object.
Reimplemented from WavetableComponent.
|
protected |
A keyframe for intermediate computations.
|
protected |
The global window shape used.