chirpWave

a chirp wave with linearly changing frequency.

Parameters

NameTypeDescription
xf32Input position.
startFrequencyf32Starting frequency.
endFrequencyf32Ending frequency.
amplitudef32Wave amplitude.
periodf32Period over which frequency changes.

Returns

f32wave value.

WGSL Code

fn chirpWave(x: f32, startFrequency: f32, endFrequency: f32, amplitude: f32, period: f32) -> f32 {
// Calculate the time within the current period
let t = fract(x / period);
// Calculate the frequency at the current time (linear interpolation)
let freq = mix(startFrequency, endFrequency, t);
// Calculate the phase which increases with changing frequency
let k = (endFrequency - startFrequency) / period;
let phase = 2.0 * 3.14159 * (startFrequency * t + 0.5 * k * t * t);
// Return the sine wave with the calculated phase
return sin(phase) * amplitude;
}
Showing 5/14 lines

noiseWave

a wave using interpolated noise for organic variation.

Parameters

NameTypeDescription
xf32Input position.
frequencyf32Wave frequency.
amplitudef32Wave amplitude.
seedf32Random seed for noise generation.

Returns

f32wave value.

Dependencies

WGSL Code

//! requires hash1D
fn noiseWave(x: f32, frequency: f32, amplitude: f32, seed: f32) -> f32 {
// Create interpolated noise
let t = x * frequency;
let floorT = floor(t);
let fractT = fract(t);
// Get four noise values and interpolate between them
let n0 = hash1D(floorT + seed);
let n1 = hash1D(floorT + 1.0 + seed);
// Smooth interpolation
let u = fractT * fractT * (3.0 - 2.0 * fractT); // Smoothstep
return mix(n0, n1, u) * amplitude;
}
Showing 5/16 lines

pulseWave

a pulse wave with smooth falloff edges.

Parameters

NameTypeDescription
xf32Input position.
frequencyf32Wave frequency.
amplitudef32Wave amplitude.
phasef32Phase offset.
widthf32Pulse width (0-1).
fallofff32Smooth falloff duration.

Returns

f32wave value.

WGSL Code

fn pulseWave(x: f32, frequency: f32, amplitude: f32, phase: f32, width: f32, falloff: f32) -> f32 {
let t = x * frequency + phase;
let tt = fract(t);
// Create a pulse with smooth edges
var pulse = 0.0;
// If tt is within the width, pulse is 1.0
if (tt < width) {
pulse = 1.0;
} else if (tt < width + falloff) {
// Smooth falloff
pulse = 1.0 - (tt - width) / falloff;
}
return pulse * amplitude;
}
Showing 5/17 lines

sawtoothWave

a sawtooth wave with linear ramp.

Parameters

NameTypeDescription
xf32Input position.
frequencyf32Wave frequency.
amplitudef32Wave amplitude.
phasef32Phase offset.

Returns

f32wave value.

WGSL Code

fn sawtoothWave(x: f32, frequency: f32, amplitude: f32, phase: f32) -> f32 {
let t = x * frequency + phase;
let tt = fract(t);
return tt * amplitude;
}

squareWave

a square wave with configurable duty cycle.

Parameters

NameTypeDescription
xf32Input position.
frequencyf32Wave frequency.
amplitudef32Wave amplitude.
phasef32Phase offset.
dutyCyclef32Duty cycle (0-1) for wave on/off ratio.

Returns

f32wave value.

WGSL Code

fn squareWave(x: f32, frequency: f32, amplitude: f32, phase: f32, dutyCycle: f32) -> f32 {
let t = x * frequency + phase;
let tt = fract(t);
return select(0.0, amplitude, tt < dutyCycle);
}

triangleWave

a triangle wave with configurable frequency and amplitude.

Parameters

NameTypeDescription
xf32Input position.
frequencyf32Wave frequency.
amplitudef32Wave amplitude.
phasef32Phase offset.

Returns

f32wave value.

WGSL Code

fn triangleWave(x: f32, frequency: f32, amplitude: f32, phase: f32) -> f32 {
let t = x * frequency + phase;
let tt = fract(t);
let result = abs(2.0 * tt - 1.0);
return (1.0 - result) * amplitude;
}
Showing 5/6 lines