Skip to content

Terrain 3D Shader

@sonoscope/terrain-spectrogram renders audio as a 3D landscape. Frequencies rise up into mountain ridges as sound plays, giving you an immediate sense of volume and depth.



Terminal window
npm install @sonoscope/terrain-spectrogram @sonoscope/core

Importing the /auto path automatically registers the "terrain" renderer keyword:

import "@sonoscope/terrain-spectrogram/auto";
import { Sonoscope } from "@sonoscope/core";
const scope = await Sonoscope.fromUrl("/audio/sample.wav");
scope.createSpectrogram(canvas, {
renderer: "terrain",
});
scope.attachNavigation(canvas);

OptionTypeDefaultWhat it does
heightScalenumber0.55Mountain peak height multiplier
heightGammanumber1.0Peak contrast curve (higher sharpens loud peaks)
meshResolutionnumber | [number, number]64Triangle grid density (lower is low-poly, higher is smooth)
fovnumber70Camera field of view in degrees
cameraPitchnumber0Camera tilt angle in degrees (0° = top-down 2D, 45° = isometric, 80° = horizon)
cameraYawnumber0Camera horizontal orbit angle in degrees
cameraDistancenumber1.5Distance from the terrain center
cameraHeightnumber1.5Camera vertical altitude above terrain
cameraEye[number, number, number]Exact 3D camera eye position (overrides pitch/yaw/distance)
cameraTarget[number, number, number][0, 0, 0]3D look-at center point
cameraUp[number, number, number]3D camera up vector
ambientLightnumber0.75Base fill light level (0 to 1)
diffuseLightnumber0.25Directional slope shading strength (0 to 1)
lightDirection[number, number, number][0.15, 0.85, 0.45]3D light direction vector
smoothingnumber0.6Height smoothing weight to soften jagged noise (0 to 1)

Tweak height scaling, FOV angles, lighting, and mesh resolution in the live sandbox: