Skip to main content

Playground · research instrument

DSP · Audio

Acoustics Calculators

Speed of sound, wavelength, delay, SPL summation, dB/ratio conversion, RT60, Helmholtz resonance, Doppler shift, Mass Law (TL), and NR Curves — essential acoustic tools in one place.

Independent research instrument — not claimed as MakerPortal shipped product code. Methods, equations, assumptions, and limitations are disclosed so you can inspect what the page does and does not establish.

Calculators

Each tool shares the same speed-of-sound baseline from the temperature input in the first card. Units default to metric with imperial conversions where helpful.

Speed of Sound

ISO 9613-1
m/s

343.2 m/s

ft/s

1126.0 ft/s

Wavelength ↔ Frequency

c = f·λ
Wavelength

0.780 m

Period

2.273 ms

Delay ↔ Distance

d = c·t
Distance ft

3.281 ft

Samples @48k

140 samples

SPL Summation

incoherent sources
2 of 6
Combined SPL

83.0 dB

dB ↔ Ratio Converter

voltage / pressure & power
Ratio (linear)

1.995

dB

6.00 dB

RT60 — Sabine & Eyring

room acoustics
Volume m³

60.0

Sabine RT60

0.69 s

Eyring RT60

0.63 s

Schroeder freq

214 Hz

Critical distance

0.57 m

RT60 Calculator — full page, with the Sabine/Eyring divergence and target times →

Helmholtz Resonance

bass-reflex port + cavity
Resonance frequency

40.1 Hz

Helmholtz Resonator Calculator — full page →

Port Length Calculator

speaker box tuning
Port length

10.1 cm

Speaker Port Length Calculator — full page, with port velocity →

Doppler Shift

moving source & observer

Positive velocity means moving towards each other.

Shifted Frequency

1030.0 Hz

Mass Law (STC est.)

transmission loss
Transmission Loss (TL)

32.8 dB

NR Curve Limits

iso 1996 limits
31.5

79 dB

63

63 dB

125

52 dB

250

45 dB

500

39 dB

1k

35 dB

2k

32 dB

4k

30 dB

8k

28 dB

Essence

Every knob here is physics you can point at. Temperature sets how fast molecules shove each other, that sets wavelength, that sets whether your room is a closet or a cave at 40 Hz.

Sound isn't mysterious. It's air acting like a spring. Cold air is sluggish, hot air is snappy, a speaker cone moves and the shove travels at cc. If you know cc, you know the size of a wave, how long it takes to cross a stage, whether two speakers add or fight, and how long a room holds onto a clap. These calculators share one c(T)c(T) baseline because in real life they do — same air, same day.

Method & limitations

Speed of sound — why hot rooms are faster

From kinetic theory: c=γRTk/Mc = \sqrt{\gamma R T_k / M} where γ=1.4\gamma=1.4, RR is gas constant, MM molar mass, Tk=T+273.15T_k = T+273.15 K. For dry air at 1 atm this collapses to ISO 9613-1:

c(T)=331.31+T273.15c(T) = 331.3 \sqrt{1 + \frac{T}{273.15}}

At 20 C that's 343.2 m/s. Picture O2 and N2 darting faster when warm — a pressure pulse gets handed off quicker. Humidity makes MM lighter so cc rises less than 0.5% even at 100% RH / 40 C, negligible for audio alignment. Pressure itself cancels: denser but also stiffer. This cc feeds wavelength, delay, and Helmholtz cards. If you leave temperature at 20 C while your venue is 30 C, your delay is about 1.7% short — 17 mm per metre of path, audible as comb in line-array rigs.

Wavelength ↔ Frequency ↔ Period

The wave repeats every λ\lambda, so it must satisfy c=fλ,λ=cf,Tper=1fc = f \lambda, \quad \lambda = \frac{c}{f}, \quad T_{per} = \frac{1}{f}

That's it. No hidden constant. A 440 Hz A is about 0.78 m — about a guitar body. 20 Hz is 17 m, bigger than most rooms, which is why bass pressurizes instead of propagates. 20 kHz is 17 mm, smaller than a tweeter dome, which is why it beams. If speaker spacing is greater than λ/2\lambda/2, you get spatial aliasing; if a port is less than λ/10\lambda/10, lumped models still work. Keep that mental ruler handy.

Delay ↔ Distance

Time of flight is trivial but central:

d=ct,t=dc,Nsamp=tfsd = c t, \quad t = \frac{d}{c}, \quad N_{samp} = t f_s

1 ms is 34.3 cm at 20 C. Haas says less than 30 ms arrivals fuse; greater than 50 ms they echo. For alignment, match subs and mains within 0.5 ms at crossover — about 17 cm. The calculator also gives samples at 48 kHz because your DSP delay line lives in samples, not meters. Temperature matters again: a summer outdoor stage needs 2% less electrical delay than winter.

SPL Summation — incoherent power, not pressure

Sound level meters read pressure squared averaged over time. Intensities add for uncorrelated sources (two drummers, two HVAC units). So convert each dB back to power, sum, convert back:

LΣ=10log10(i=1N10Li/10)L_{\Sigma} = 10 \log_{10} \left( \sum_{i=1}^{N} 10^{L_i/10} \right)

Equal sources: Ltot=Lsingle+10log10NL_{tot} = L_{single} + 10\log_{10} N. Two 80 dB incoherent = 83.0 dB. Ten = 90 dB. If perfectly coherent and in-phase (same signal, same wire), pressures add linearly:

Lcoh=20log10(i10Li/20)=Lsingle+20log10NL_{coh} = 20 \log_{10} \left( \sum_i 10^{L_i/20} \right) = L_{single} + 20\log_{10} N

That gives +6 dB per doubling. Reality lives between — correlated low-frequency room modes give almost +6, diffuse mid frequencies +3. Don't blindly add decibels.

dB ↔ Ratio — why 20 vs 10

Decibel is always 10 log of a power ratio. Power scales as amplitude squared. So for field quantities (pressure pp, voltage VV, velocity):

Lp=20log10pp0,LW=10log10WW0L_p = 20 \log_{10} \left| \frac{p}{p_0} \right|, \qquad L_W = 10 \log_{10} \frac{W}{W_0}

Inversions: pp0=10L/20,WW0=10L/10\frac{p}{p_0} = 10^{L/20}, \quad \frac{W}{W_0} = 10^{L/10} Doubling power = 10 log10 2 = +3.01 dB. Doubling pressure = 20 log10 2 = +6.02 dB. Same physical change, different bookkeeping because power goes as p2p^2. Voltage gain in audio follows 20 log; amplifier power follows 10 log. Toggle matters — 6 dB vs 3 dB mistakes blow drivers.

RT60 — Sabine vs Eyring, the honest story

Sabine (1898) imagined energy sloshing uniformly, losing a tiny fraction A/S per bounce. Mean free path 4V/S, reflections per second cS/4V, exponential decay E(t)=E0ecAt/4VE(t)=E_{0} e^{-cAt/4V}. Set 10log10(E/E0)=6010\log_{10}(E/E_{0})=-60 dB:

T60Sab=0.161VA,A=Siαi=αˉST_{60}^{Sab} = 0.161 \frac{V}{A}, \quad A = \sum S_i \alpha_i = \bar{\alpha} S

0.161 = 55.26/c ~ 24ln10/c24\ln10 /c — it's just unit conversion for 60 dB and c343c\approx343. Works for αˉ<0.2\bar{\alpha} < 0.2 live rooms.

Eyring (1930) fixes high absorption by not approximating ln(1α)α\ln(1-\alpha)\approx -\alpha. Treat energy as geometric series: after nn reflections En=E0(1αˉ)nE_n = E_0 (1-\bar{\alpha})^n. Solve for 60 dB drop:

T60Eyr=0.161VSln(1αˉ)T_{60}^{Eyr} = 0.161 \frac{V}{-S \ln(1-\bar{\alpha})}

When αˉ1\bar{\alpha}\ll1, ln(1αˉ)αˉ- \ln(1-\bar{\alpha})\approx\bar{\alpha} and Eyring tends to Sabine. When αˉ=0.6\bar{\alpha}=0.6, Eyring can be 2x shorter — and more realistic. Both ignore air absorption (about 0.01 dB/m at 2 kHz, grows as f2f^2), frequency-dependent α\alpha, and non-diffuse geometry. That's why real rooms measured with swept sine differ by plus or minus 20%.

Two derived tools: room constant and critical distance. R=Sαˉ1αˉ,dc=QR16πR = \frac{S \bar{\alpha}}{1-\bar{\alpha}}, \quad d_c = \sqrt{\frac{Q R}{16\pi}} dcd_c is where direct 1/r2\propto1/r^2 equals reverberant field — beyond it you hear room, not speaker. QQ is source directivity. Schroeder's crossover:

fs=2000T60Vf_s = 2000 \sqrt{\frac{T_{60}}{V}}

Below fsf_s you hear individual eigenmodes as booms; above, a smooth decay. Constant 2000 assumes about 10 modes overlap within a half-power bandwidth — rules of thumb vary 1500 to 4000, we pick 2000. Use it to know when to fix geometry vs add absorption.

Helmholtz & Port Length — the bottle as spring-mass

Blow across a bottle: air plug in neck is mass mair=ρSLeffm_{air}=\rho S L_{eff}, cavity volume is spring with compliance V/ρc2V/\rho c^{2}. Resonance of that mass-spring:

fH=c2πSVLefff_H = \frac{c}{2\pi} \sqrt{\frac{S}{V L_{eff}}}

End correction because moving air extends past physical ends. For one flanged end (box wall) + one free end: Leff=L+0.85rL_{eff} = L + 0.85 r with r=S/πr=\sqrt{S/\pi}. Both ends flanged gives L+1.7r; both free gives L+1.2r. The 0.85r is Rayleigh's radiation reactance — extra air dragged along.

Inversion for box tuning: Leff=Sc24π2fb2V,L=Leff0.85rL_{eff} = \frac{S c^2}{4\pi^2 f_b^2 V}, \quad L = L_{eff} -0.85r That's the port length card. Assumptions: LλL\ll\lambda, V1/3λV^{1/3}\ll\lambda (lumped), circular unflared port, rigid lossless walls, no fill. Real ports with flare act longer at high SPL (end correction changes with velocity), damping material lowers effective VV by 10-20%, and driver Vas adds compliance. Start here, then measure and trim by 15%.

Doppler Shift — wavefronts chasing their source

If source moves toward observer, each crest is emitted from a closer point — wavelengths compress. Observer moving toward meets crests faster. For vsv_s source toward observer, vov_o observer toward source (positive toward each other):

f=fc+vocvsf' = f \frac{c + v_o}{c - v_s}

If vscv_s\to c, denominator goes to 0 and ff'\to\infty — boom, shock forms. Negative vsv_s means receding, drops pitch. At audio speeds (10 m/s car is 3% of cc) shift is about 0.3 semitones per 10 m/s — subtle but Doppler for rotating Leslie horn at 5 m/s rim speed is why it choruses. Keep cc from temperature to avoid phantom cents.

Mass Law & NR Curves — transmission and comfort

A limp wall's inertia resists being driven by sound. Random-incidence transmission loss for single leaf:

TL20log10(mf)47.2TL \approx 20\log_{10}(m f) - 47.2 dB

mm surface mass kg/m2, ff Hz. 6 dB per octave, 6 dB per doubling mass — mass times frequency law. Real panels dip at coincidence fc=c2/2πm/Bf_{c} = c^{2}/2\pi \sqrt{m/B} where bending wave matches trace wavelength; above that stiffness helps again. Double-leaf adds mass-spring-mass resonance. Use Mass Law as upper bound for limp, heavy, damped walls.

NR (Noise Rating) ISO 1996: linear curves Ln=an+bnNRL_n = a_n + b_n NR where nn indexes octave band 31.5 Hz to 8 kHz, an,bna_n,b_n tabulated constants. Your measured octave SPL must sit below the curve to claim that NR. NR 25 is concert hall, 35 bedroom, 45 open office. It's a single-number mask for annoyance and speech interference, not a physical law.

Playbook — how to actually use this

Speaker alignment in 60 s

Measure air temp, set top card. Enter physical distance between subs and tops in delay card — read ms and 48k samples. Flip: enter your DSP's ms to see distance. Keep within 0.5 ms at crossover.

Room quick-check

Put your room L,W,H and average α\alpha 0.15 furnished. Note Schroeder fsf_s. Below fsf_s, use mode analyzer; above, use absorption. If critical distance dcd_c is less than listening distance, you hear more room than direct — move closer or add absorption.

Box tuning without guessing

Want 38 Hz from 30 L with 5 cm dia port: enter in Helmholtz or port-length card. Get L26L\approx 26 cm effective. Cut 5% long, measure impedance peak, trim. If chuffing, increase area SS and recalc — LL scales as SS for same fbf_b.

Noise target

Pick NR 35 for a studio aircon limit, read grid for allowed SPL per octave. If 500 Hz band breaks the curve, that's HVAC midband whine — treat it first. If low bands break, it's rumble — mass law tells you how much wall mass you need.

What this is not

No air absorption in RT60, no frequency-dependent α(f)\alpha(f), no non-rectangular rooms, no modal coupling, no port nonlinearity or driver compliance shift, no coincidence or double-leaf TL, no humidity correction for cc unless you want it. These are design-estimate instruments — verified against Sabine, Eyring, and lumped Helmholtz, but validated against measurement in your air, your box, your walls.

Anatomy of the instrument

Eleven calculators, one shared physics engine. Here is what each card does, how the script ties them together, and why the temperature input sits at the top of the page.

The shared engine

  1. 01

    Temperature as the root node. The top card computes c(T)c(T) via ISO 9613-1. Every other calculator reads this single currentC variable — wavelength, delay, Helmholtz, port length, and Doppler all depend on it. Change temperature and every card recalculates in one pass, because in the real world you don't get different speeds of sound in different formulas.

  2. 02

    Event-driven recalculation. There is no polling loop. Each input's input event fires a targeted update function. The temperature handler fans out to six dependent calculators; the others trigger just their own readouts. The wlUpdating and delayUpdating flags prevent infinite circular updates when wavelength↔frequency or distance↔delay inputs drive each other bidirectionally.

  3. 03

    SPL dynamic rows. The summation card starts with two sources and lets you add up to six via a DOM factory. Each new row gets an input listener and a remove button wired at creation time. Renumbering keeps labels consistent when you delete from the middle. The splSumArray function converts each dB to linear power, sums, then converts back — the same math a sound level meter does internally.

  4. 04

    dB mode toggle. The dB↔ratio converter switches between 20·log (voltage/pressure) and 10·log (power). Changing the radio fires updateFromDb() which recomputes both fields from the current dB input value. The visual density card gives you both sides at once so you can spot-check which convention applies.

Central equation — c(T)

c(T)=331.31+T273.15c(T) = 331.3 \sqrt{1 + \frac{T}{273.15}}

Every result on this page — wavelength, delay, Helmholtz resonance, Doppler shift — traces back to this one line. At 20 °C it's 343.2 m/s; at 30 °C it's 349.0 m/s. That is 1.7%, and 1.7% of a metre is 17 mm of path — audible as comb filtering in multi-speaker arrays. Set temperature first.

RT60, Helmholtz, and the bigger cards

  1. 05

    RT60 dual-output. Both Sabine and Eyring compute in parallel from the same dimensions and α. The Sabine formula uses A=αˉSA = \bar{\alpha} S directly; Eyring uses Sln(1αˉ)-S \ln(1-\bar{\alpha}) instead. They diverge at high absorption because Sabine's small-α approximation breaks. Critical distance and Schroeder frequency derive from whichever RT60 is finite — the dashboard uses Sabine preferentially for the Schroeder constant.

  2. 06

    Helmholtz ↔ Port Length duality. These two cards are inverses of each other. Helmholtz takes port diameter, port length, and cavity volume → gives resonance frequency. Port length takes box volume, port diameter, and target tuning → gives required length. Both use the same end-correction +0.85r+0.85r. If you enter the output of one as the input of the other, the numbers should agree — a built-in sanity check.

  3. 07

    Doppler shift sign convention. Positive velocity means moving toward each other — source velocity vsv_s is + when source approaches observer, observer velocity vov_o is + when observer approaches source. This matches the standard physics convention f=f(c+vo)/(cvs)f' = f(c+v_o)/(c-v_s). If you set source velocity to negative (receding), frequency drops instead of rises.

  4. 08

    NR curve grid. The nine octave bands (31.5 Hz to 8 kHz) are hard-coded ISO 1996 constants. Each band's allowed SPL = an+bnNRa_n + b_n \cdot NR. The grid updates all nine cells when you change the target NR level. If you're measuring a room, compare each octave band against the grid — any band exceeding the limit means the room fails that NR rating, even if other bands are quiet.

  5. 09

    Mass Law baseline. The transmission loss calculator uses the limp-wall formula TL20log10(mf)47.2TL \approx 20\log_{10}(m f) - 47.2. It's accurate to about ±3 dB for single-leaf homogeneous panels above the critical frequency. Below coincidence, stiffness resonance dominates instead of mass — this tool assumes you're above that region.

  6. 10

    No idle compute. The page initializes once via initAcousticCalculators(), guarded by a data-init flag to prevent re-init on Astro page transitions. No setInterval, no requestAnimationFrame. The only computation happens on user input events. Zero CPU while you read the method section.

Gear behind this build

DSP audio · 23 picks

Audio measurement & monitoring23

More gear across every app: the full Gear list →

Two gotchas worth knowing

Decibel addition without coherence check

This page adds dB sources incoherently — 10·log sum of powers. That's right for independent noise sources, separate HVAC vents, or uncorrelated drivers. But if you're summing two outputs of the same DSP carrying the same signal, and they're wired in phase, pressure adds linearly — the result is up to 6 dB higher per doubling, not 3 dB. The calculator has no way to know your coherence scenario. Always ask: are these independent sources or two copies of the same signal?

Temperature drift across cards

The temperature input sits in the first card and every other calculator reads currentC reactively. If you change temperature, all dependent cards recompute. But if you enter dimensions first and then change temperature before noting the earlier results, you may not realize the wavelength and delay numbers you just read have shifted underneath you. Always confirm temperature before taking critical measurements — a 10 °C error is a 1.7% error in c, which propagates to every derived quantity on the page.

JavaScript — the core solver

The acoustics library underpinning all calculators on this page. Copy-paste speedOfSound and splSumArray into any audio tool — they have zero dependencies and the same math as a \approx$UMC1820-equipped measurement rig uses internally.

Core acoustics — JavaScript

const speedOfSound = (tC) => 331.3 * Math.sqrt(1 + tC / 273.15);

const splSumArray = (levels) => {
  let sum = 0;
  for (const L of levels) sum += Math.pow(10, L / 10);
  return 10 * Math.log10(sum);
};

const wavelength = (f, c) => c / f;

const frequencyFromWavelength = (wl, c) => c / wl;

const delayFromDistance = (d, c) => (d / c) * 1000;

const distanceFromDelay = (ms, c) => (ms / 1000) * c;

const rt60Sabine = (V, A) => A > 0 ? 0.161 * V / A : Infinity;

const rt60Eyring = (V, S, alpha) => {
  if (alpha <= 0 || alpha >= 1) return Infinity;
  return 0.161 * V / (-S * Math.log(1 - alpha));
};

const schroederFrequency = (V, T60) => {
  if (V <= 0 || T60 <= 0) return NaN;
  return 2000 * Math.sqrt(T60 / V);
};

const criticalDistance = (Q, R) => {
  if (Q <= 0 || R <= 0) return NaN;
  return Math.sqrt(Q * R / (16 * Math.PI));
};

const helmholtzFrequency = (S, L, V, c) => {
  const r = Math.sqrt(S / Math.PI);
  const Leff = L + 0.85 * r;
  return (c / (2 * Math.PI)) * Math.sqrt(S / (V * Leff));
};

const portLength = (Sp, fb, Vb, c) => {
  const rp = Math.sqrt(Sp / Math.PI);
  const Leff = (Sp * c * c) / (4 * Math.PI * Math.PI * fb * fb * Vb);
  return Leff - 0.85 * rp;
};

const dopplerShift = (f, vs, vo, c) => f * (c + vo) / (c - vs);

const massLawTransmissionLoss = (mass, f) => 20 * Math.log10(mass * f) - 47.2;

Every field you change is written into the URL — bookmark it or send it to a colleague.

Lead magnet · Privacy-first

Export current calculator state as a reference card

One click generates a timestamped report of all eleven calculator values above as a clean text reference — useful for studio notes, client deliverables, or sharing your tuning state with a colleague. Enter your email to unlock the clean export (no watermark). Free watermarked version always available. Privacy-first: email stays in your browser localStorage, optional newsletter via Buttondown (no tracking pixels, D-014 compliant).

Email stored in localStorage · RSS at /rss.xml

Frequently asked questions

Which RT60 formula should I trust — Sabine or Eyring?

For average absorption below 0.2 (most furnished rooms) they nearly agree, so either is fine. Once ᾱ exceeds 0.3, Eyring is more physically correct because Sabine overestimates the number of reflections per second. Real measured RT60 typically falls between the two — use Sabine as a conservative upper bound and Eyring as the physics-consistent lower bound.

Why do two 80 dB sources sum to 83 dB, not 86 dB?

Two independent noise sources are incoherent — their instantaneous pressures aren't correlated. You add intensities (power), not pressures. 10·log₁₀(10⁸ + 10⁸) = 10·log₁₀(2×10⁸) ≈ 83.0 dB. If they were perfectly in phase and coherent (same signal on two identical speakers wired together), you'd get +6 dB instead — but that only happens in controlled setups, not with independent sources.

What is Schroeder frequency and why does it matter?

It divides your room into two acoustic regimes. Below fs, room eigenmodes are sparse and audible as discrete booms — that's where you need modal treatment. Above fs, modes overlap so densely they blend into a smooth decay — that's where broadband absorption works. The tool computes it from volume and RT60 using fs = 2000·√(T₆₀/V).

Does humidity affect my delay calculations?

Negligibly for timing. At 40 °C and 100% RH, speed of sound rises only about 0.5%. Your 1 ms delay would be off by 0.005 ms — far below what a DSP delay line can resolve. Temperature matters far more: from 20 °C to 30 °C, c rises from 343.2 to 349.0 m/s — 1.7%, so a wavefront covers 1.7% more ground in the same time. Over one metre of path that is 17 mm, which is audible as comb filtering in multi-speaker arrays.

How do I use the port length calculator and actually build from it?

Enter box volume, desired tuning frequency, and port diameter. The calculator gives you the physical length including the flanged end correction. Build the port 10% longer than the computed value, install it, measure the impedance peak with your audio interface, then trim to exact length. A port that's too long tunes lower than predicted; too short tunes higher. PVC pipe with a hose clamp is forgiving for prototyping.

Shareable still

The instrument, captured—not illustrated.

This 16:9 frame is rendered from the real browser instrument above. It is the page's canonical preview for image search, link unfurls, and posts that need to show what the tool actually does.

Download 1280 × 720 JPEG
Acoustics Calculators — live MakerPortal instrument screenshot
Canonical capture · real UI · no generated scientific artwork