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

A WavetableComponent that applies a windowing function to a waveform’s head and tail. More...

#include <wave_window_modifier.h>

Inheritance diagram for WaveWindowModifier:
WavetableComponent

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...
 
- Public Types inherited from WavetableComponent
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 ()
 
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.
 
WaveWindowModifierKeyframegetKeyframe (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.
 
- 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 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.
 
- 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).
 

Detailed Description

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.

Member Enumeration Documentation

◆ WindowShape

Defines different windowing curves.

Enumerator
kCos 

A cosine-based window (smooth rise/fall).

kHalfSin 

A half-sine window shape.

kLinear 

A linear ramp window.

kSquare 

A sudden step (square) window.

kWiggle 

A more complex wiggle-based shape.

kNumWindowShapes 

Constructor & Destructor Documentation

◆ WaveWindowModifier()

WaveWindowModifier::WaveWindowModifier ( )
inline

Constructs a WaveWindowModifier with a default cosine window shape.

◆ ~WaveWindowModifier()

virtual WaveWindowModifier::~WaveWindowModifier ( )
inlinevirtual

Member Function Documentation

◆ applyWindow()

float WaveWindowModifier::applyWindow ( WindowShape window_shape,
float t )
static

Applies the chosen window shape to a given normalized position.

Parameters
window_shapeThe WindowShape to apply.
tA normalized time parameter [0,1].
Returns
The windowed amplitude at time t.

◆ createKeyframe()

WavetableKeyframe * WaveWindowModifier::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()

WaveWindowModifier::WaveWindowModifierKeyframe * WaveWindowModifier::getKeyframe ( int index)

Retrieves a WaveWindowModifierKeyframe by index.

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

◆ getType()

WavetableComponentFactory::ComponentType WaveWindowModifier::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.

◆ getWindowShape()

WindowShape WaveWindowModifier::getWindowShape ( )
inline

Gets the current window shape.

Returns
The current WindowShape.

◆ jsonToState()

void WaveWindowModifier::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.

◆ render()

void WaveWindowModifier::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.

◆ setWindowShape()

void WaveWindowModifier::setWindowShape ( WindowShape window_shape)
inline

Sets the window shape used by this modifier.

Parameters
window_shapeThe WindowShape to use.

◆ stateToJson()

json WaveWindowModifier::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_

WaveWindowModifierKeyframe WaveWindowModifier::compute_frame_
protected

A keyframe for intermediate computations.

◆ window_shape_

WindowShape WaveWindowModifier::window_shape_
protected

The global window shape used.


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