Sound reflecting between parallel walls forms standing waves at resonant room modes. The heatmap draws the pressure field of the selected mode across the room plan:
p(x,y) = cos(nx·π·x/W) · cos(ny·π·y/D)
f_axial = n·c / (2L)
f_tang = (c/2)·√((nx/W)² + (ny/D)²)
RT60 = 0.161·V / (α·S) (Sabine)
f₀ = 2000·√(RT60 / V) (Schroeder)
Dark patches are nodes (silence), bright patches are antinodes (loud). Click the room to place the source or listener and read the relative SPL at that point. This is a plain Canvas2D port of the 3D (WebGL) version — identical physics, same formulas, no Three.js.