wavesculpt

wavesculpt · sources · schema v2

Hybrid 4-oscillator 3D video synth. Four wavetable "wall oscillators" sit on the faces of a 3D unit box, each emitting a colored wave ribbon (RED / GREEN / BLUE / ALPHA) that points into the box; a single user camera renders the scene, positioned via an XY pad (X/Y) and a HEIGHT slider (Z). Audio out is the sum of the four oscillators, each weighted by its per-osc ADSR and by camera↔source distance — the distance gain is the single source of truth shared by audio and visuals, so "closer = louder = bigger ribbon" stays consistent across both domains. Per oscillator: tune/fine, wavetable morph, stereo spread, wavefolder, thickness, and ADSR; camera zoom + Y-rotation shape the view. All four oscillators run in one worklet for a tight audio-rate path. Six cross-domain VIDEO WALL inputs (wall1–wall6) texture an upstream video module onto the six faces of the room (FRONT/BACK/LEFT/RIGHT/FLOOR/CEILING) seen from inside; each face has a TRANSPARENCY knob (0–100%) blending the wall over the scene and a DISTORT knob (0–1) that morphs the flat wall into a convex dome we look up into. Patch the video output back into a wall input for recursive video feedback.

A hybrid 4-oscillator 3D video synth — it makes sound AND a live 3D image from the same engine. A unit box holds four 'wall oscillators' (RED / GREEN / BLUE / ALPHA), each emitting a wave ribbon along a vector into the box. One user camera renders the scene; you fly it with an XY pad (X/Y), a HEIGHT slider (Z), ZOOM, and ROTATION. Closer = bigger ribbons AND louder — the same distance number drives both visual size and audio gain, so 'lean in' is consistently louder. Each oscillator is a full wavetable voice: pick its table (preset / factory / your own .wav), set TUNE/FINE/MORPH/SPREAD/FOLD, and shape it with a per-osc ADSR gated by its GATE input and pitched by its PITCH input, plus a pre-mix per-osc FX slot (reverb/delay). The audio output is the summed stereo mix (L/R), with four per-oscillator AUDIO taps (out_red/grn/blu/alp) for routing one voice out independently. The render goes out video_out (a mono-video with a BENTBOX-style CRT post-process baked in — sync drift, hue, bloom, noise, feedback) and can be viewed as 3D ribbons, a birds-eye floorplan, or a spectrograph (VIEW). Six VIDEO WALL inputs texture the faces of the room — self-patch video_out → a wall for recursive video feedback, and LUMINOSITY→BANDPASS lets a wall's brightness shape the audio. UNISON/DETUNE and CHORD MODE turn the four voices into a stacked or harmonized instrument; everything is CV-modulatable.

the faceplate

wavesculptgate1gatepitch_cv1cvgate2gatepitch_cv2cvgate3gatepitch_cv3cvgate4gatepitch_cv4cvmorph1_cvcvmorph2_cvcvmorph3_cvcvmorph4_cvcvpos_xcvpos_ycvpos_zcvzoomcvrotcvscalecvwigglecvalpha_invideowall1videowall2videowall3videowall4videowall5videowall6videoLaudioRaudioout_redaudioout_grnaudioout_bluaudioout_alpaudiovideo_outmono-videoaudiocvgatepitch
26 inputs · 7 outputs · 0 params

inputs

idcablewhat it does
gate1gateOscillator 1 (RED) GATE — its per-osc amp ADSR holds open WHILE this gate is high and releases on the falling edge, so a held gate sustains RED's ribbon/voice.
gate / trigger
pitch_cv1cvOscillator 1 (RED) V/oct PITCH input — sets that oscillator's pitch (summed with TUNE1 + FINE1).
control voltage (CV)
gate2gateOscillator 2 (GREEN) GATE — its per-osc amp ADSR holds open WHILE this gate is high and releases on the falling edge, so a held gate sustains GREEN's ribbon/voice.
gate / trigger
pitch_cv2cvOscillator 2 (GREEN) V/oct PITCH input — sets that oscillator's pitch (summed with TUNE2 + FINE2).
control voltage (CV)
gate3gateOscillator 3 (BLUE) GATE — its per-osc amp ADSR holds open WHILE this gate is high and releases on the falling edge, so a held gate sustains BLUE's ribbon/voice.
gate / trigger
pitch_cv3cvOscillator 3 (BLUE) V/oct PITCH input — sets that oscillator's pitch (summed with TUNE3 + FINE3).
control voltage (CV)
gate4gateOscillator 4 (ALPHA) GATE — its per-osc amp ADSR holds open WHILE this gate is high and releases on the falling edge, so a held gate sustains ALPHA's ribbon/voice.
gate / trigger
pitch_cv4cvOscillator 4 (ALPHA) V/oct PITCH input — sets that oscillator's pitch (summed with TUNE4 + FINE4).
control voltage (CV)
morph1_cvcvCV that offsets oscillator 1's MORPH (wavetable frame position), sweeping RED's timbre.
control voltage (CV); modulates morph1 (additive offset — ±1 CV sweeps the full range, centered on the knob)
morph2_cvcvCV that offsets oscillator 2's MORPH (wavetable frame position), sweeping GREEN's timbre.
control voltage (CV); modulates morph2 (additive offset — ±1 CV sweeps the full range, centered on the knob)
morph3_cvcvCV that offsets oscillator 3's MORPH (wavetable frame position), sweeping BLUE's timbre.
control voltage (CV); modulates morph3 (additive offset — ±1 CV sweeps the full range, centered on the knob)
morph4_cvcvCV that offsets oscillator 4's MORPH (wavetable frame position), sweeping ALPHA's timbre.
control voltage (CV); modulates morph4 (additive offset — ±1 CV sweeps the full range, centered on the knob)
pos_xcvCV that offsets the camera X position (drives the XY pad horizontally).
control voltage (CV); modulates pos_x (additive offset — ±1 CV sweeps the full range, centered on the knob)
pos_ycvCV that offsets the camera Y position (drives the XY pad vertically).
control voltage (CV); modulates pos_y (additive offset — ±1 CV sweeps the full range, centered on the knob)
pos_zcvCV that offsets the camera Z position / HEIGHT (depth into the box).
control voltage (CV); modulates pos_z (additive offset — ±1 CV sweeps the full range, centered on the knob)
zoomcvCV that offsets the camera ZOOM (distance scalar) — closer = bigger ribbons AND louder (the distance gain is shared by audio + visual).
control voltage (CV); modulates zoom (additive offset — ±1 CV sweeps the full range, centered on the knob)
rotcvCV that offsets the camera ROTATION about the Y axis (visual only).
control voltage (CV); modulates rot (additive offset — ±1 CV sweeps the full range, centered on the knob)
scalecvCV that offsets the BLINK SCALE — the amplitude/zoom of the scope waveform render.
control voltage (CV); modulates scale (additive offset — ±1 CV sweeps the full range, centered on the knob)
wigglecvCV that offsets WIGGLE — the pitch-driven 3D rotation strength of each ribbon/scope/tube.
control voltage (CV); modulates wiggle (additive offset — ±1 CV sweeps the full range, centered on the knob)
alpha_invideoOptional VIDEO input blended as an alpha mask over the 3D render (a cross-domain video stream shaping transparency).
RGB video stream
wall1videoVIDEO input textured onto the FRONT (−Z) face of the 3D room (the camera is inside the box). Blended by WALL 1 α (transparency) and morphable flat→dome by WALL 1 DISTORT. Self-patching video_out → wall1 makes recursive video feedback.
RGB video stream
wall2videoVIDEO input textured onto the BACK (+Z) face of the 3D room (the camera is inside the box). Blended by WALL 2 α (transparency) and morphable flat→dome by WALL 2 DISTORT. Self-patching video_out → wall2 makes recursive video feedback.
RGB video stream
wall3videoVIDEO input textured onto the LEFT (−X) face of the 3D room (the camera is inside the box). Blended by WALL 3 α (transparency) and morphable flat→dome by WALL 3 DISTORT. Self-patching video_out → wall3 makes recursive video feedback.
RGB video stream
wall4videoVIDEO input textured onto the RIGHT (+X) face of the 3D room (the camera is inside the box). Blended by WALL 4 α (transparency) and morphable flat→dome by WALL 4 DISTORT. Self-patching video_out → wall4 makes recursive video feedback.
RGB video stream
wall5videoVIDEO input textured onto the FLOOR (−Y) face of the 3D room (the camera is inside the box). Blended by WALL 5 α (transparency) and morphable flat→dome by WALL 5 DISTORT. Self-patching video_out → wall5 makes recursive video feedback.
RGB video stream
wall6videoVIDEO input textured onto the CEILING (+Y) face of the 3D room (the camera is inside the box). Blended by WALL 6 α (transparency) and morphable flat→dome by WALL 6 DISTORT. Self-patching video_out → wall6 makes recursive video feedback.
RGB video stream

outputs

idcablewhat it does
LaudioLeft channel of the summed stereo audio mix — the four oscillators after per-osc env, distance gain, and pan, post MASTER GAIN.
audio signal
RaudioRight channel of the summed stereo audio mix (the partner of L).
audio signal
out_redaudioRED oscillator's individual AUDIO tap — that single voice post env/distance/pan (the exact node the visualizer reads). Patch it to route or process the RED voice independently of the L/R mix.
audio signal
out_grnaudioGREEN oscillator's individual AUDIO tap — that single voice post env/distance/pan, routable independently of the mix.
audio signal
out_bluaudioBLUE oscillator's individual AUDIO tap — that single voice post env/distance/pan, routable independently of the mix.
audio signal
out_alpaudioALPHA oscillator's individual AUDIO tap — that single voice post env/distance/pan, routable independently of the mix.
audio signal
video_outmono-videoThe 3D render as a mono-video output (with the CRT post-process baked in). Patch it into VIDEO OUT or any video module — or back into a WALL input for recursive feedback.
mono video stream

controls

controlwhat it does
A1Oscillator 1 (RED) envelope ATTACK (0.001..5 s, log) — rise time after its GATE opens.
A2Oscillator 2 (GREEN) envelope ATTACK (0.001..5 s, log) — rise time after its GATE opens.
A3Oscillator 3 (BLUE) envelope ATTACK (0.001..5 s, log) — rise time after its GATE opens.
A4Oscillator 4 (ALPHA) envelope ATTACK (0.001..5 s, log) — rise time after its GATE opens.
D1Oscillator 1 (RED) envelope DECAY (0.001..5 s, log) — fall from the attack peak to SUSTAIN1.
D2Oscillator 2 (GREEN) envelope DECAY (0.001..5 s, log) — fall from the attack peak to SUSTAIN2.
D3Oscillator 3 (BLUE) envelope DECAY (0.001..5 s, log) — fall from the attack peak to SUSTAIN3.
D4Oscillator 4 (ALPHA) envelope DECAY (0.001..5 s, log) — fall from the attack peak to SUSTAIN4.
R1Oscillator 1 (RED) envelope RELEASE (0.001..5 s, log) — fade after GATE1 falls.
R2Oscillator 2 (GREEN) envelope RELEASE (0.001..5 s, log) — fade after GATE2 falls.
R3Oscillator 3 (BLUE) envelope RELEASE (0.001..5 s, log) — fade after GATE3 falls.
R4Oscillator 4 (ALPHA) envelope RELEASE (0.001..5 s, log) — fade after GATE4 falls.
S1Oscillator 1 (RED) envelope SUSTAIN level (0..1) — held while GATE1 stays high.
S2Oscillator 2 (GREEN) envelope SUSTAIN level (0..1) — held while GATE2 stays high.
S3Oscillator 3 (BLUE) envelope SUSTAIN level (0..1) — held while GATE3 stays high.
S4Oscillator 4 (ALPHA) envelope SUSTAIN level (0..1) — held while GATE4 stays high.
Alpha brightnessALPHA BRIGHTNESS (0..2) — brightness of the ALPHA oscillator / alpha-mask layer in the render.
Blink modeBLINK render mode within the 3D view: 0 = wavetable RIBBONS (default), 1 = SCOPES TRIAL (each osc's live oscilloscope trace from the floor corners), 2 = REALITY BASED COMMUNITY (the scopes rendered as 3D neon tubes).
BloomBLOOM (0..1, default 0.4) — glow/bloom on bright parts of the render.
Blu colorBLUE oscillator base COLOUR (colour picker) — tints the BLUE osc in every blink mode. Packed 0xRRGGBB.
Chord modeCHORD MODE (on/off) — when on, every voice reads voice 1's pitch and voices 2/3/4 are offset to build a chord (the quality set by QUALITY); each voice's TUNE becomes the chord offset.
Chord qualityCHORD QUALITY — picks the chord built in CHORD MODE: 0 = major, 1 = minor.
Chroma instabilitySHIMMER / chroma instability (0..1) — adds unstable colour-fringing shimmer to the image.
Chroma phaseHUE / chroma phase (−1..+1) — rotates the colour hue of the rendered image.
DetuneDETUNE (−1..+1) — the spread applied between voices when UNISON is on.
Feedback delayFeedback DELAY (0..1) — the delay of the video frame-feedback (longer = more spaced trails).
Feedback gainFEEDBACK gain (0..1) — frame-feedback amount of the video post-process (video echoes/trails).
Fine1Oscillator 1 (RED) FINE tune in cents (−100..+100) for tuning between TUNE1's semitones.
Fine2Oscillator 2 (GREEN) FINE tune in cents (−100..+100) for tuning between TUNE2's semitones.
Fine3Oscillator 3 (BLUE) FINE tune in cents (−100..+100) for tuning between TUNE3's semitones.
Fine4Oscillator 4 (ALPHA) FINE tune in cents (−100..+100) for tuning between TUNE4's semitones.
Fold1Oscillator 1 (RED) FOLD (0..1) — west-coast wavefolder on RED's output (0 = clean, 1 = heavily folded harmonics).
Fold2Oscillator 2 (GREEN) FOLD (0..1) — west-coast wavefolder on GREEN's output (0 = clean, 1 = heavily folded harmonics).
Fold3Oscillator 3 (BLUE) FOLD (0..1) — west-coast wavefolder on BLUE's output (0 = clean, 1 = heavily folded harmonics).
Fold4Oscillator 4 (ALPHA) FOLD (0..1) — west-coast wavefolder on ALPHA's output (0 = clean, 1 = heavily folded harmonics).
FxAmount1Oscillator 1 (RED) FX AMOUNT (0..1) — wet/mix of the per-osc FX slot selected by FX1.
FxAmount2Oscillator 2 (GREEN) FX AMOUNT (0..1) — wet/mix of the per-osc FX slot selected by FX2.
FxAmount3Oscillator 3 (BLUE) FX AMOUNT (0..1) — wet/mix of the per-osc FX slot selected by FX3.
FxAmount4Oscillator 4 (ALPHA) FX AMOUNT (0..1) — wet/mix of the per-osc FX slot selected by FX4.
FxType1Oscillator 1 (RED) per-osc FX slot type: 0 = OFF, 1 = REVERB, 2 = DELAY. Sits PRE-spatial-mix, so it shapes RED's raw oscillator before env/distance/pan.
FxType2Oscillator 2 (GREEN) per-osc FX slot type: 0 = OFF, 1 = REVERB, 2 = DELAY. Sits PRE-spatial-mix, so it shapes GREEN's raw oscillator before env/distance/pan.
FxType3Oscillator 3 (BLUE) per-osc FX slot type: 0 = OFF, 1 = REVERB, 2 = DELAY. Sits PRE-spatial-mix, so it shapes BLUE's raw oscillator before env/distance/pan.
FxType4Oscillator 4 (ALPHA) per-osc FX slot type: 0 = OFF, 1 = REVERB, 2 = DELAY. Sits PRE-spatial-mix, so it shapes ALPHA's raw oscillator before env/distance/pan.
Grn colorGREEN oscillator base COLOUR (colour picker) — tints the GREEN osc in every blink mode. Packed 0xRRGGBB.
Hsync driftHSYNC DRIFT (0..1) — horizontal-sync drift of the CRT post-process (the picture skews/tears horizontally).
Hsync lossHSYNC LOSS (0..1) — horizontal-sync loss; the image rolls/breaks up horizontally as it rises.
Lum depthLUMINOSITY → BANDPASS depth (0..1) — how strongly the wall video's brightness at each line's wall-crossing points shapes a band-pass on that line's audio (bright = open, dark = narrow). 0 = OFF.
Master gainMASTER GAIN (0..2, default 1) — overall output level of the summed audio mix (L/R).
Morph1Oscillator 1 (RED) MORPH (0..1) — wavetable frame position; scans through the loaded wavetable's frames to morph the timbre. CV via the morph1_cv input.
Morph2Oscillator 2 (GREEN) MORPH (0..1) — wavetable frame position; scans through the loaded wavetable's frames to morph the timbre. CV via the morph2_cv input.
Morph3Oscillator 3 (BLUE) MORPH (0..1) — wavetable frame position; scans through the loaded wavetable's frames to morph the timbre. CV via the morph3_cv input.
Morph4Oscillator 4 (ALPHA) MORPH (0..1) — wavetable frame position; scans through the loaded wavetable's frames to morph the timbre. CV via the morph4_cv input.
NoiseNOISE (0..1, default 0.05) — analog-style video noise/grain over the image.
Pos xCamera X position (−1..+1) — the horizontal axis of the on-card XY pad. Moves the viewpoint left/right through the box.
Pos yCamera Y position (−1..+1) — the vertical axis of the XY pad.
Pos zCamera Z position / HEIGHT (−1..+1) — depth into the box (the HEIGHT slider).
Red colorRED oscillator base COLOUR (a colour-wheel picker) — tints the RED osc's ribbon, scope line, and neon tube. Packed 0xRRGGBB; chosen via a native colour picker (not a CV knob).
RotCamera ROTATION about the Y axis (−1 full left .. +1 full right). Visual only — audio is rotation-invariant. CV via the rot input.
ScaleSCALE (0.1..10, log, unity at 1) — amplitude/zoom of the BLINK scope waveform (matches the SCOPE module's scale). Applies in the scope/tube blink modes. CV via the scale input.
Scan wobbleSCAN WOBBLE (0..1) — wobbles the scanlines for an unstable-CRT shimmer.
Spread1Oscillator 1 (RED) SPREAD (1..5) — stereo tap spread; higher values widen RED's stereo image by reading offset taps.
Spread2Oscillator 2 (GREEN) SPREAD (1..5) — stereo tap spread; higher values widen GREEN's stereo image by reading offset taps.
Spread3Oscillator 3 (BLUE) SPREAD (1..5) — stereo tap spread; higher values widen BLUE's stereo image by reading offset taps.
Spread4Oscillator 4 (ALPHA) SPREAD (1..5) — stereo tap spread; higher values widen ALPHA's stereo image by reading offset taps.
Thickness1Oscillator 1 (RED) THICKNESS (0..1) — how far the wave ribbon is extruded perpendicular to its direction (visual weight of RED's ribbon).
Thickness2Oscillator 2 (GREEN) THICKNESS (0..1) — how far the wave ribbon is extruded perpendicular to its direction (visual weight of GREEN's ribbon).
Thickness3Oscillator 3 (BLUE) THICKNESS (0..1) — how far the wave ribbon is extruded perpendicular to its direction (visual weight of BLUE's ribbon).
Thickness4Oscillator 4 (ALPHA) THICKNESS (0..1) — how far the wave ribbon is extruded perpendicular to its direction (visual weight of ALPHA's ribbon).
Tune1Oscillator 1 (RED) TUNE — coarse pitch in semitones (−36..+36). Summed with FINE1 and the pitch_cv1 input.
Tune2Oscillator 2 (GREEN) TUNE — coarse pitch in semitones (−36..+36). Summed with FINE2 and the pitch_cv2 input.
Tune3Oscillator 3 (BLUE) TUNE — coarse pitch in semitones (−36..+36). Summed with FINE3 and the pitch_cv3 input.
Tune4Oscillator 4 (ALPHA) TUNE — coarse pitch in semitones (−36..+36). Summed with FINE4 and the pitch_cv4 input.
UnisonUNISON (on/off) — stacks the oscillators on one pitch (detuned by DETUNE) for a fat, layered tone instead of four independent voices.
Video modeVIEW / video mode for the render + the video_out: 0 = PROXIMITY (the 3D ribbon scene, default), 1 = BIRDSEYE (top-down 2D floorplan of the spatial system), 2 = SPECTROGRAPH (scrolling STFT of the combined audio).
Vsync driftVSYNC DRIFT (0..1) — vertical-sync drift; the picture rolls vertically.
Wall1 alphaWALL 1 (FRONT (−Z)) TRANSPARENCY (0..100%) — 0 = the wall's video is invisible, 100 = fully opaque over the scene.
Wall1 distortWALL 1 (FRONT (−Z)) DISTORT (0..1) — morphs the wall from a flat quad (0) to a convex dome bulging toward the room centre (1), a fisheye we look up into.
Wall2 alphaWALL 2 (BACK (+Z)) TRANSPARENCY (0..100%) — 0 = the wall's video is invisible, 100 = fully opaque over the scene.
Wall2 distortWALL 2 (BACK (+Z)) DISTORT (0..1) — morphs the wall from a flat quad (0) to a convex dome bulging toward the room centre (1), a fisheye we look up into.
Wall3 alphaWALL 3 (LEFT (−X)) TRANSPARENCY (0..100%) — 0 = the wall's video is invisible, 100 = fully opaque over the scene.
Wall3 distortWALL 3 (LEFT (−X)) DISTORT (0..1) — morphs the wall from a flat quad (0) to a convex dome bulging toward the room centre (1), a fisheye we look up into.
Wall4 alphaWALL 4 (RIGHT (+X)) TRANSPARENCY (0..100%) — 0 = the wall's video is invisible, 100 = fully opaque over the scene.
Wall4 distortWALL 4 (RIGHT (+X)) DISTORT (0..1) — morphs the wall from a flat quad (0) to a convex dome bulging toward the room centre (1), a fisheye we look up into.
Wall5 alphaWALL 5 (FLOOR (−Y)) TRANSPARENCY (0..100%) — 0 = the wall's video is invisible, 100 = fully opaque over the scene.
Wall5 distortWALL 5 (FLOOR (−Y)) DISTORT (0..1) — morphs the wall from a flat quad (0) to a convex dome bulging toward the room centre (1), a fisheye we look up into.
Wall6 alphaWALL 6 (CEILING (+Y)) TRANSPARENCY (0..100%) — 0 = the wall's video is invisible, 100 = fully opaque over the scene.
Wall6 distortWALL 6 (CEILING (+Y)) DISTORT (0..1) — morphs the wall from a flat quad (0) to a convex dome bulging toward the room centre (1), a fisheye we look up into.
WavefoldWAVEFOLD (0..1) — a video-domain wavefold of the rendered image (folds bright values back for a posterized look).
Wavesculpt osc {n}Oscillator {n}'s wavetable-source strip: a colour-wheel swatch (its base tint), a PRESET dropdown, a FACTORY-table dropdown, and a LOAD button to upload your own .wav as that oscillator's wavetable. The chosen table is the wave each oscillator plays + draws as its ribbon; selection persists on the patch.
WiggleWIGGLE (0..1, 0 = OFF) — pitch-driven 3D rotation of each osc's ribbon/scope/tube; speed + magnitude scale with the detected pitch. CV via the wiggle input.
ZoomCamera ZOOM / distance scalar (0.3..3, log) — closer (smaller) = bigger ribbons visually AND louder audibly (closer = louder, one shared distance number). CV via the zoom input.

source

wavesculpt.ts on GitHub.

Generated from packages/web/src/lib/{audio,video}/module-registry.ts · repo