# Wave
## Microsim
### Live player
<div class="microsim-player">
<iframe src="https://editor.p5js.org/sciencenibber/full/pQPM1m6eN" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<div class="microsim-fallback">
<img src="Microsims/thumbs/Wave.png" alt="Wave microsim poster" style="width:100%;border:1px solid #4445;border-radius:6px;">
<p><em>Live microsim (desktop) · <a href="https://editor.p5js.org/sciencenibber/sketches/pQPM1m6eN">open sketch in the p5.js editor</a></em></p>
</div>
**Editor URL:** https://editor.p5js.org/sciencenibber/sketches/pQPM1m6eN
**Description (100 words):**
A two-panel anatomy of the wave concept driven by the same y(x, t) = A * sin(k*x - omega*t). The upper panel is a spatial snapshot — a propagating sinusoid through 4 m of medium with a magenta bracket annotating one wavelength between adjacent crests and a vertical bracket showing the amplitude A. The lower panel is the temporal trace at a fixed probe x0, scrolling left as time advances, with a magenta bracket spanning one period T between two adjacent crests. Sliders for f, A, c update lambda, T, k, and omega live, and an audio-gated sine tone makes the temporal axis literally audible at the slider frequency.
```js
// =====================================================================
// Wave - a Wikitube microsim
// Article: en.wikitube.io/wiki/Wave
// Room: Audio Pattern: 1. Wave physics - Pattern D foundations
//
// What this microsim shows
// ------------------------
// "Wave" is the umbrella concept that every other Audio article
// specialises. Anatomically, a wave is a propagating disturbance
// characterised by FIVE measurables that the rest of the room takes
// for granted:
//
// A - amplitude (peak displacement from rest)
// lambda - wavelength (spatial period; crest to crest)
// f - frequency (temporal cycles per second, Hz)
// T - period (temporal period; T = 1 / f)
// c - propagation speed (the medium's; c = f * lambda)
//
// The defining identity c = f * lambda chains spatial and temporal
// periodicity. The travelling-wave solution to the linear wave
// equation
//
// d2 y / d t2 = c2 * d2 y / d x2
//
// is
//
// y(x, t) = A * sin(k * x - omega * t),
// k = 2 * pi / lambda, omega = 2 * pi * f.
//
// We render TWO views of the SAME y(x, t) so the reader sees the
// spatial and temporal halves of "wave" at once:
//
// * SPATIAL panel (top): a snapshot y(x, t = now) over the medium.
// We annotate one wavelength explicitly between two adjacent
// crests, and the amplitude as a vertical bracket. This is the
// shape a high-speed camera would capture at a single instant.
//
// * TEMPORAL panel (bottom): the time series y(x = x0, t) at a
// fixed probe point on the medium, scrolling left as time
// advances. We annotate one period T explicitly between two
// adjacent crests in time. This is what a microphone at x0
// would record.
//
// Sliders for f, A, and c let the reader trade off the parameters
// and see all three of (lambda, k, omega, T) update live. An audio-
// gated sine tone at the slider frequency makes the temporal axis
// audible: turning the f slider literally raises the pitch.
//
// Audio gating
// ------------
// Browsers refuse to start an AudioContext without a real user
// gesture. We render a "click to start audio" overlay; the
// userStartAudio() call and the p5.Oscillator construction both
// happen inside the SAME mousePressed() handler so iOS Safari
// accepts the gesture. The "play tone" checkbox lets the reader
// silence the audio in classroom or library settings while keeping
// the visual demo functional.
//
// Equation displayed
// ------------------
// y(x, t) = A * sin(k*x - omega*t) with c = f * lambda, T = 1 / f
// =====================================================================
const ARTICLE = "Wave";
p5.disableFriendlyErrors = true;
// ---------- Palette (Audio room: dark canvas, bright traces) ----------
const BG = 16;
const INK = [220, 220, 230];
const DIM = [120, 130, 150];
const GRIDC = [60, 70, 90];
const SPATC = [120, 220, 140]; // spatial-trace colour, green
const TEMPC = [240, 200, 80]; // temporal-trace colour, amber
const ANNOTC = [200, 110, 230]; // annotations (lambda, A, T) magenta
const PROBEC = [240, 130, 130]; // probe marker, red
// ---------- Physical scaling ----------
// Map a 4 m wide stretch of medium onto the spatial panel so that
// at c = 343 m/s and f = 343 Hz, lambda = 1 m occupies one quarter
// of the panel. The temporal panel similarly shows 4 * T_max worth
// of past samples to keep at least four full cycles visible at low f.
const WORLD_M = 4.0; // physical extent of spatial panel (meters)
const SCROLL_S = 0.040; // physical extent of temporal panel (seconds)
const N_PARTS = 80; // particle dots drawn in spatial panel
// ---------- p5.sound nodes (constructed AFTER the user gesture) -------
let osc = null;
let started = false;
// ---------- DOM controls ----------
let freqSlider, ampSlider, speedSlider, runToggle;
// ---------- Ring buffer for the temporal trace ------------------------
// Stored as samples of y(x0, t). We push a sample every frame and
// render the most recent N samples as a polyline. Sized to comfortably
// hold SCROLL_S worth of frames at 60 fps.
const TRACE_LEN = 480;
let trace = [];
function setup() {
// Canvas wide enough for two stacked 1D panels plus a left strip
// for sliders. Pixel density 2 keeps text crisp on retina screens.
createCanvas(880, 580);
pixelDensity(2);
textAlign(LEFT, TOP);
textFont("system-ui");
// Sliders along the bottom of the left strip. We draw labels in
// draw() so the labels track the slider positions across DPIs.
freqSlider = createSlider(40, 1000, 220, 1).position(20, height - 92).size(200);
ampSlider = createSlider(0.05, 1.0, 0.45, 0.01).position(20, height - 64).size(200);
speedSlider = createSlider(80, 800, 343, 1).position(20, height - 36).size(200);
// A tone-on/off toggle so silent classrooms can still see the visual.
runToggle = createCheckbox(" play audio tone", true);
runToggle.position(width - 200, height - 36);
runToggle.style("color", "#dde");
// Pre-fill the trace with zeros so the temporal panel has a clean
// baseline before any frames have rendered.
for (let i = 0; i < TRACE_LEN; i++) trace.push(0);
}
// First user gesture: start AudioContext, then create + start the
// oscillator inside the SAME call stack so iOS Safari accepts the
// gesture as valid. Amplitude starts at zero; draw() ramps it up.
function mousePressed() {
if (!started) {
userStartAudio();
osc = new p5.Oscillator("sine");
osc.start();
osc.amp(0);
started = true;
}
}
function touchStarted() { mousePressed(); return false; }
function draw() {
background(BG);
// Read every parameter once into named locals so the rest of the
// frame uses canonical wave-physics symbols, not slider getters.
const f = freqSlider.value(); // Hz
const A = ampSlider.value(); // dimensionless
const c = speedSlider.value(); // m/s
const lambda = c / f; // m
const k = TWO_PI / lambda; // 1/m
const omega = TWO_PI * f; // rad/s
const T = 1.0 / f; // s
const t = millis() * 0.001; // seconds since page load
// Update audio (only after user gesture). Smoothing time constant
// 0.05 s avoids zipper noise on slider drags. The 0.18 ceiling
// protects the reader from sudden loud sustained tones.
if (started && osc) {
osc.freq(f, 0.05);
osc.amp(runToggle.checked() ? min(0.18, A * 0.4) : 0, 0.05);
}
// -------- Layout: two panels stacked vertically --------------------
const panelX = 240;
const panelW = width - panelX - 20;
const topY = 60;
const panelH = 180;
const gapY = 60;
const botY = topY + panelH + gapY;
// Probe x position (in meters) for the temporal panel - fixed at
// the centre of the spatial panel so the reader can see the same
// sinusoid in space and in time.
const xProbe = WORLD_M * 0.5;
drawSpatialPanel (panelX, topY, panelW, panelH, A, k, omega, t, lambda);
drawTemporalPanel (panelX, botY, panelW, panelH, A, k, omega, t, T, xProbe);
// Push a fresh sample into the ring buffer for the temporal trace.
// Done after drawing so this frame's spatial snapshot and this
// frame's right-edge sample coincide visually.
trace.push(A * Math.sin(k * xProbe - omega * t));
if (trace.length > TRACE_LEN) trace.shift();
// -------- HUD ------------------------------------------------------
drawHud(f, A, c, lambda, T, k, omega);
// Gate overlay last so it covers everything until first click.
if (!started) drawGate();
}
// ---------------------------------------------------------------------
// Spatial panel: y(x, t = now)
// ---------------------------------------------------------------------
// Frame, baseline, continuous waveform, particle dots, then the two
// pedagogical annotations: a horizontal bracket for one wavelength
// between two adjacent crests, and a vertical bracket for the
// amplitude from the baseline up to the first crest.
function drawSpatialPanel(x0, y0, w, h, A, k, omega, t, lambda) {
push();
translate(x0, y0);
// Frame and zero-line
noFill(); stroke(...GRIDC); strokeWeight(1);
rect(0, 0, w, h);
const yMid = h / 2;
stroke(...GRIDC);
line(0, yMid, w, yMid);
// Continuous waveform - dense polyline of analytic samples.
noFill(); stroke(...SPATC); strokeWeight(1.6);
beginShape();
for (let px = 0; px <= w; px += 2) {
const xMeters = (px / w) * WORLD_M;
const yDisp = A * Math.sin(k * xMeters - omega * t);
const sy = yMid - yDisp * (h * 0.4);
vertex(px, sy);
}
endShape();
// Particle dots so the reader sees that the polyline IS the medium.
noStroke(); fill(...SPATC);
for (let i = 0; i < N_PARTS; i++) {
const u = i / (N_PARTS - 1);
const px = u * w;
const xM = u * WORLD_M;
const y = A * Math.sin(k * xM - omega * t);
const sy = yMid - y * (h * 0.4);
circle(px, sy, 4);
}
// Wavelength annotation: bracket between two adjacent crests of
// the *current* phase. A crest occurs where k*x - omega*t = pi/2
// mod 2*pi, i.e. x = (pi/2 + 2*pi*n + omega*t) / k. Pick the first
// two crests inside the panel.
const phase = (omega * t);
// Solve for n such that x is in [0, WORLD_M].
const xCrest0 = solveCrest(0, k, phase);
const xCrest1 = xCrest0 + lambda;
if (xCrest0 >= 0 && xCrest1 <= WORLD_M) {
const px0 = (xCrest0 / WORLD_M) * w;
const px1 = (xCrest1 / WORLD_M) * w;
const yA = yMid - (A * (h * 0.4)) - 14;
stroke(...ANNOTC); strokeWeight(1.2); noFill();
line(px0, yA, px1, yA);
line(px0, yA - 5, px0, yA + 5);
line(px1, yA - 5, px1, yA + 5);
noStroke(); fill(...ANNOTC); textSize(13);
textAlign(CENTER, BOTTOM);
text("lambda", (px0 + px1) / 2, yA - 4);
textAlign(LEFT, TOP);
}
// Amplitude annotation: vertical bracket on the right edge from
// the zero line up to the peak.
const xAnn = w - 18;
const peakPx = yMid - A * (h * 0.4);
stroke(...ANNOTC); strokeWeight(1.2); noFill();
line(xAnn, yMid, xAnn, peakPx);
line(xAnn - 5, yMid, xAnn + 5, yMid);
line(xAnn - 5, peakPx, xAnn + 5, peakPx);
noStroke(); fill(...ANNOTC); textSize(13);
textAlign(LEFT, CENTER);
text(" A", xAnn + 6, (yMid + peakPx) / 2);
textAlign(LEFT, TOP);
// Probe marker: vertical dotted line at x0 = WORLD_M / 2 so the
// reader can correlate the spatial picture with the temporal panel.
const pxProbe = w * 0.5;
stroke(...PROBEC); strokeWeight(1); drawingContext.setLineDash([4, 4]);
line(pxProbe, 0, pxProbe, h);
drawingContext.setLineDash([]);
noStroke(); fill(...PROBEC); textSize(11);
text("probe x0", pxProbe + 5, 6);
// Panel labels
fill(...INK); textSize(13);
text("Spatial snapshot y(x, t = now)", 10, 8);
fill(...DIM); textSize(11);
text("crest-to-crest distance is one wavelength lambda", 10, 26);
pop();
}
// Helper: find the smallest x >= 0 such that k*x - phase = pi/2 mod 2*pi.
// That gives the first crest of A*sin(k*x - phase) at x >= 0.
function solveCrest(xMin, k, phase) {
const target = HALF_PI + phase;
let n = Math.ceil((k * xMin - target) / TWO_PI);
return (target + n * TWO_PI) / k;
}
// ---------------------------------------------------------------------
// Temporal panel: y(x = x0, t) scrolling left
// ---------------------------------------------------------------------
// Frame, baseline, polyline through the ring buffer (oldest sample
// at the left edge, newest at the right edge). Annotation: a
// horizontal bracket spanning one period T between two adjacent
// crests in the scrolling trace.
function drawTemporalPanel(x0, y0, w, h, A, k, omega, t, T, xProbe) {
push();
translate(x0, y0);
// Frame + zero line
noFill(); stroke(...GRIDC); strokeWeight(1);
rect(0, 0, w, h);
const yMid = h / 2;
stroke(...GRIDC);
line(0, yMid, w, yMid);
// Polyline through the ring buffer. We map index 0 to the LEFT
// edge (oldest) and index TRACE_LEN-1 to the RIGHT edge (newest).
noFill(); stroke(...TEMPC); strokeWeight(1.6);
beginShape();
for (let i = 0; i < trace.length; i++) {
const u = i / (TRACE_LEN - 1);
const px = u * w;
const sy = yMid - trace[i] * (h * 0.4);
vertex(px, sy);
}
endShape();
// Period annotation: the rightmost crest is at the current time;
// the previous one was T seconds ago. In screen pixels, T seconds
// map to (T / SCROLL_S) * w pixels, but only if T <= SCROLL_S.
// Otherwise we cannot fit a full period in the panel.
const periodPx = (T / SCROLL_S) * w;
if (periodPx > 16 && periodPx < w - 8) {
const px1 = w - 4;
const px0 = px1 - periodPx;
const yA = yMid - (A * (h * 0.4)) - 14;
stroke(...ANNOTC); strokeWeight(1.2); noFill();
line(px0, yA, px1, yA);
line(px0, yA - 5, px0, yA + 5);
line(px1, yA - 5, px1, yA + 5);
noStroke(); fill(...ANNOTC); textSize(13);
textAlign(CENTER, BOTTOM);
text("T", (px0 + px1) / 2, yA - 4);
textAlign(LEFT, TOP);
}
// Probe-tip marker: dot at the right edge showing the current y(x0, t).
const yNow = trace[trace.length - 1];
noStroke(); fill(...PROBEC);
circle(w - 4, yMid - yNow * (h * 0.4), 7);
// Panel labels
noStroke(); fill(...INK); textSize(13);
text("Temporal trace at probe y(x0, t)", 10, 8);
fill(...DIM); textSize(11);
text("crest-to-crest interval is one period T = 1 / f", 10, 26);
// Time axis hint (right edge = now, left edge = ~SCROLL_S ago).
textAlign(RIGHT, BOTTOM);
fill(...DIM); textSize(10);
text("now", w - 4, h - 4);
textAlign(LEFT, BOTTOM);
text(nf(-SCROLL_S, 1, 3) + " s", 4, h - 4);
textAlign(LEFT, TOP);
pop();
}
// ---------------------------------------------------------------------
// HUD: title TL, control hints TR, live readouts BL, equation BR.
// All on-canvas text is plain ASCII per the standards rule; Greek
// names are spelled out (lambda, omega).
// ---------------------------------------------------------------------
function drawHud(f, A, c, lambda, T, k, omega) {
// Title block (TL)
noStroke();
fill(0, 200); rect(8, 8, 360, 38);
fill(20); textSize(20); textAlign(LEFT, TOP);
text("Wave", 14, 10);
fill(110); textSize(12);
text("Wikitube microsim - en.wikitube.io/wiki/" + ARTICLE, 14, 32);
// Control hints (TR)
fill(110); textSize(11); textAlign(RIGHT, TOP);
text("sliders: f (Hz), A, c (m/s) - tick: play tone", width - 14, 12);
text("watch lambda and T scale together via c = f * lambda",
width - 14, 28);
// Live readouts (BL)
fill(...INK); textSize(13); textAlign(LEFT, BOTTOM);
const colA = 240;
const colB = 480;
const rowY = height - 110;
text("f = " + nf(f, 1, 1) + " Hz", colA, rowY + 8);
text("A = " + nf(A, 1, 2), colA, rowY + 28);
text("c = " + nf(c, 1, 0) + " m/s", colA, rowY + 56);
text("lambda = " + nf(lambda, 1, 3) + " m", colB, rowY + 8);
text("T = " + nf(T, 1, 4) + " s", colB, rowY + 28);
text("k = " + nf(k, 1, 2) + " 1/m", colB, rowY + 48);
text("omega = " + nf(omega, 1, 0) + " rad/s", colB, rowY + 68);
// Equation footer (BR), ASCII only.
fill(80); textSize(11); textAlign(RIGHT, BOTTOM);
text("y(x,t) = A * sin(k*x - omega*t) c = f * lambda T = 1 / f",
width - 14, height - 8);
textAlign(LEFT, TOP);
}
// ---------------------------------------------------------------------
// Click-to-start gate.
// ---------------------------------------------------------------------
function drawGate() {
noStroke(); fill(0, 220);
rect(0, 0, width, height);
fill(255); textSize(28); textAlign(CENTER, CENTER);
text("click to start audio", width / 2, height / 2 - 14);
textSize(13); fill(190);
text("Browsers require a user gesture before any sound can play.",
width / 2, height / 2 + 22);
textAlign(LEFT, TOP);
}
```
## Links (Wikipedia order)
<!-- injected from _registry/childlinks/Wave.json (2026-07-30T02:09:12Z) -->
`Absorption_(acoustics)` · `Absorption_(electromagnetic_radiation)` · `Acoustic_resonance` · `Acoustic_wave` · `Adolf_Zeising` · `Airplane` · `Airport` · `Airy_wave_theory` · `Alan_Turing` · `Alfvén_wave` · `Amplitude` · `Amplitude_modulation` · `Analytic_geometry` · [[Angular_frequency]] · `Angular_spectrum_method` · `Antenna_(radio)` · `Aristid_Lindenmayer` · `Atmospheric_wave` · `Augustus_Edward_Hough_Love` · `Austria` · `Ballistics` · `Beat_(acoustics)` · `Belousov–Zhabotinsky_reaction` · `Benoit_Mandelbrot` · `Binary_star` · `Biology` · `Bloch's_theorem` · `Branched_flow` · `Bridge_(instrument)` · `Bulk_modulus` · `Camouflage` · `Capillary_wave` · [[Chaos_theory]] · `Cherenkov_radiation` · `Chiang_C._Mei` · `Christian_Doppler` · `Circle` · `Classical_physics` · `Cnoidal_wave` · `Complex_number` · `Continuous_wave` · `Cortical_spreading_depression` · `Creeping_wave` · `Crystal` · [[Crystal_structure]] · `Cymatics` · `D'Alembert's_formula` · `D'Arcy_Wentworth_Thompson` · `Deformation_(physics)` · [[Density]] · `Dielectric` · `Diffraction` · `Dirac_equation` · `Disk_(mathematics)` · `Dispersion_(optics)` · `Dispersion_(water_waves)` · `Dispersion_relation` · `Doppler_effect` · `Dover_Publications` · `Drum_stick` · `Drumhead` · `Duhamel's_principle` · `Dune` · `Dyakonov_surface_wave` · `Dyakonov–Voigt_wave` · `Earth–ionosphere_waveguide` · `Edge_wave` · `Elasticity_(physics)` · `Electric_field` · `Electromagnetic_radiation` · `Electromagnetic_spectrum` · `Electromagnetic_wave_equation` · [[Electron]] · [[Electronics]] · [[Emergence]] · `Empedocles` · [[Energy]] · [[Engineering]] · `Envelope_(waves)` · `Envelope_detector` · `Ernst_Haeckel` · `Evanescent_field` · `Faraday_wave` · `Fibonacci` · `Field_(physics)` · `Fir_wave` · `Floral_symmetry` · `Fluid` · [[Fluid_dynamics]] · `Foam` · [[Fourier_analysis]] · `Fourier_transform` · [[Fractal]] · `Fracture` · `Frequency` · `Frequency_modulation` · `Front_velocity` · `Function_(mathematics)` · `Fundamental_frequency` · `Gamma_ray` · `Gaussian_function` · `General_relativity` · `Gerald_B._Whitham` · `Gradient` · `Gravitational_wave` · `Gravity_wave` · `Group_velocity` · `Harmonic` · `Heat_equation` · `Heinrich_Hertz` · `Helmholtz_decomposition` · `Helmholtz_resonance` · `Huygens–Fresnel_principle` · `Hydraulic_jump` · `Index_of_wave_articles` · `Inertia` · `Inertial_wave` · [[Information]] · `Infrared` · `Insertion_loss` · `Internal_wave` · [[Isaac_Newton]] · `James_Clerk_Maxwell` · `James_Lighthill` · `John_N._Shive` · `Joseph_Plateau` · `Kármán_vortex_street` · `Lamb_waves` · [[Least-squares_spectral_analysis]] · `Liber_Abaci` · `Light` · `Linear_combination` · `Linear_polarization` · `List_of_types_of_equilibrium` · `List_of_waves_named_after_people` · [[Logarithmic_spiral]] · `Longitudinal_wave` · [[Loudspeaker]] · `Louis_de_Broglie` · `Magnetic_field` · `Mathematics` · `Mathematics_and_art` · `Matter` · `Matter_wave` · `Maxwell's_equations` · `Meander` · `Mechanical_equilibrium` · `Mechanical_wave` · `Mechanics` · `Metachronal_rhythm` · `Microwave` · `Mimicry` · `Momentum` · `Monochromatic_radiation` · `Motion` · `Natural_selection` · `Node_(physics)` · `Normal_(geometry)` · `Nut_(string_instrument)` · `On_Growth_and_Form` · `Operator_(mathematics)` · `Organ_pipe` · [[Oscillation]] · `Outline_of_physical_science` · `Overtone` · `P_wave` · `Parameter` · `Parastichy` · [[Partial_differential_equation]] · `Particle` · `Particle_velocity` · [[Pattern_formation]] · `Pattern_recognition_(psychology)` · `Patterns_in_nature` · `Periodic_function` · `Periodic_travelling_wave` · `Perpendicular` · `Phase_(waves)` · `Phase_modulation` · `Phase_velocity` · [[Photon]] · `Phyllotaxis` · `Physical_quantity` · [[Physics]] · `Piston` · `Planck_constant` · `Plane_wave` · `Plateau's_laws` · `Plato` · `Polarization_(waves)` · `Polarizer` · `Poynting_vector` · `Pp-wave_spacetime` · `Pressure` · `Prism_(optics)` · `Propagation_constant` · `Pulse_(physics)` · `Pythagoras` · [[Quantum_mechanics]] · [[Quasicrystal]] · `Radar` · `Radio_propagation` · `Radio_wave` · `Ray_(optics)` · `Rayleigh_wave` · [[Reaction–diffusion_system]] · `Real_number` · `Recorder_(musical_instrument)` · `Rectilinear_propagation` · `Reflection_(physics)` · `Reflection_coefficient` · `Refraction` · `Refractive_index` · `Relativistic_wave_equations` · `Resonance` · `Ripple_tank` · `Rogue_wave` · `Rotation` · `S_wave` · `Sawtooth_wave` · `Scalar_(physics)` · `Scalar_field` · `Scattering` · [[Schrödinger_equation]] · `Seismic_tomography` · `Seismic_wave` · `Seismology` · [[Self-organization]] · `Sexual_selection` · `Shallow_water_equations` · `Shock_wave` · [[Signal]] · [[Signal_processing]] · `Signal_velocity` · [[Simple_harmonic_motion]] · [[Sine_wave]] · `Sinusoidal_plane_wave` · `Snell's_law` · `Soap_bubble` · `Soliton` · `Sonic_boom` · `Sound` · `Sound_pressure` · `Spacetime` · `Spectrum_(physical_sciences)` · `Speed` · `Speed_of_light` · `Speed_of_sound` · `Spin_density_wave` · `Spin_wave` · `Square_wave_(waveform)` · `Standing_wave` · `Standing_wave_ratio` · `Stokes_drift` · `Stoneley_wave` · `Strain_(mechanics)` · `Stress_(mechanics)` · `String_(music)` · `String_vibration` · `Subset` · `Superposition_principle` · `Surface_wave` · `Symmetry` · `Symmetry_in_biology` · `Temperature` · [[Tensor]] · `Tensor_field` · [[Tessellation]] · `The_Chemical_Basis_of_Morphogenesis` · `Tollmien–Schlichting_wave` · `Traffic_wave` · `Transmission_medium` · `Transmittance` · `Transparency_and_translucency` · `Transverse_wave` · `Triangle_wave` · `Trojan_wave_packet` · `Tsunami` · `Ultraviolet` · `Vacuum` · `Vector_(mathematics_and_physics)` · `Vector_field` · `Velocity_factor` · `Violin` · `Wave_(audience)` · `Wave_(disambiguation)` · `Wave_Motion_(journal)` · [[Wave_equation]] · `Wave_function` · `Wave_interference` · `Wave_motion_(disambiguation)` · `Wave_packet` · `Wave_power` · `Wave_turbulence` · `Wave_vector` · `Waveform` · `Wavefront` · `Wavelength` · `Wavenumber` · `Waves_(disambiguation)` · `Waves_in_plasmas` · `Wave–particle_duality` · `Waving` · [[Wayback_Machine]] · `Widmanstätten_pattern` · `Wilson_Bentley` · `Wind_instrument` · `Wind_wave` · `X-ray` · `YouTube`
## From the Real GENERATIVE library (beauty pass)

*Wave — animation hotlinked from Wikimedia Commons (via the Real G.E.N.E.R.A.T.I.V.E. course library, Audio room). [Details & license](https://commons.wikimedia.org/wiki/File:Santos_E_et_al_Neuroimage_2014_.gif).*

*Wave — image hotlinked from Wikimedia Commons (via the Real G.E.N.E.R.A.T.I.V.E. course library, Audio room). [Details & license](https://commons.wikimedia.org/wiki/File:2006-01-14_Surface_waves.jpg).*
> In physics, mathematics, engineering, and related fields, a wave is a propagating dynamic disturbance (change from equilibrium) of one or more quantities. Periodic waves oscillate repeatedly about an equilibrium (resting) value at some frequency. ([Wikipedia](https://en.wikipedia.org/wiki/Wave))
<!-- BEAUTY-PASS-MEDIA:END -->
<!-- SIGN-SYSTEMS:START -->
**Semiotic universals** (the notations and alphabet letters this article speaks — each opens its canonical card): wave · frequency · sampling · amplitude · cycle. Index: the glyph gallery · SEMIOTICS PORTAL.
<!-- SIGN-SYSTEMS:END -->
> **Room:** Audio · **Status:** ✅ shipped
## Overview
A wave is a propagating disturbance that transports [[Energy|energy]], momentum, and [[Information|information]] through space, time, or an abstract field, without any net transport of the medium itself. The unifying definition reduces to a small list of measurables — amplitude A, wavelength lambda, frequency f, period T, propagation speed c — bound by two universal identities: T = 1 / f and c = f * lambda. Every wave, mechanical or electromagnetic, scalar or vector, transverse or longitudinal, satisfies (in its linear regime) a wave equation d^2 y / dt^2 = c^2 * (d^2 y / dx^2), whose canonical travelling-wave solution y(x, t) = A * sin(k * x - omega * t) — with wavenumber k = 2 * pi / lambda and [[Angular_frequency|angular frequency]] omega = 2 * pi * f — is the visual anchor every reader of the wave articles already half-knows. From this single sinusoid the entire room unfolds: superposition explains interference and standing waves, the dispersion relation omega(k) explains why some waves spread out while others travel rigidly, the boundary conditions explain modes and resonance, and the spectrum of a periodic [[Signal|signal]] is just a sum of these sinusoids. The Wave article is the umbrella under which every later Audio article specialises.
## See also
- Room hub: Audio
- p5.js Editor conventions: P5 JS EDITOR
- Wiki root: MAIN
---
*Scaffolded by `generative-microsim` from row 0 of the Audio sheet on 2026-04-30T17:37:09Z.*
Letters: wave · frequency · sampling · amplitude · cycle · flow · oscillation · energy
<!-- BEAUTY-PASS-MEDIA:START -->
<!-- CRAFT-LINK:START g12 -->
*Built to the [[WT!P5_js_Microsim_Master_Class|p5.js Master Class]].*
<!-- CRAFT-LINK:END -->
<!-- ACOUSIM:BEGIN g22 — Acoustics portal microsim (framework build, specs/acoustics/sims/Wave.json); do not hand-edit inside -->
**Microsim — three.js (Wikitube framework):** *Wave*
<div class="wt-sim" data-src="https://wikitube-3d-microsims.netlify.app/acoustics/Wave.html" data-title="Wave"></div>
*Built from `MICROSIM_GUIDE/specs/acoustics/sims/Wave.json`; part of the [[PORTAL_Acoustics|Acoustics portal]] spine (section sims and See-also variants).*
<!-- ACOUSIM:END -->
<!-- MATTERSIM:BEGIN g33 — Matter & Energy Cluster microsim (framework build, specs/sims/Wave.json); do not hand-edit inside -->
**Microsim — three.js (Wikitube framework):** *Wave*
<div class="wt-sim" data-src="https://wikitube-3d-microsims.netlify.app/matter/Wave.html" data-title="Wave"></div>
*Built from `MICROSIM_GUIDE/specs/sims/Wave.json`; part of the [[PORTAL_Matter|Matter portal]] spine (section sims and See-also variants).*
<!-- MATTERSIM:END -->
## Wikipedia : Wikitube
**Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Wave) : [Wikitube](https://en.wikitube.io/wiki/Wave)
## Previous hub tags
Tree parent: [[Self-organization]].
Legacy hubs: `GENERATIVE`.
---
*Sources: 1 legacy note. Minted wave 1, 2026-07-30 (v1.6 order).*