Skip to main content

Playground · research instrument

DSP · Audio

Acoustic Horn Calculator

Design acoustic horns and waveguides using the 1D Webster horn equation. Explore exponential, conical, and oblate spheroidal profiles and visualize their cross-sections in real time.

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.

Horn Parameters

Throat Dia. (mm)
Flare m (1/m)
Length (mm)

Exit dimension

Mouth Dia. mm

Total exit area

Mouth Area cm²

Approx. low limit

Cutoff fc Hz

HF beamwidth

Directivity °

Cross-Section Profile

Profile

Shape controls where sound goes

A horn is an impedance transformer. Thin air at throat, dense air at mouth. Webster's equation tells you how area change loads the driver down to a cutoff, and how mouth size sets directivity when kaka gets big. Get shape right — you keep directivity constant. Get it wrong — beam narrows, HOMs ring, response ripples.

1 — Webster: 1D horn physics

Assume pressure is uniform across cross-section, varies only along axis xx. Conservation of mass + momentum gives Webster:

1Sx(Spx)=1c22pt2\frac{1}{S}\frac{\partial}{\partial x}\left(S\frac{\partial p}{\partial x}\right) = \frac{1}{c^2}\frac{\partial^2 p}{\partial t^2}

S(x)S(x) is area profile. Solve for harmonic ejωte^{j\omega t} → spatial ODE whose solutions propagate only if ω\omega above cutoff set by area flare rate. Ignore transverse modes — that is the core approximation. Valid up to ka35ka\approx 3–5 depending on flare angle, beyond you need BEM.

2 — Three profiles, three bargains

Exponential: S(x)=S0emxS(x)=S_0 e^{mx}. Classic Keele / Klipsch. Area doubles every ln2/m. Loads driver with frequency-independent resistance above cutoff, then dies below:

fc=mc4πf_c = \frac{m c}{4\pi}

Great LF loading, terrible directivity — beamwidth shrinks as 1/f\propto 1/f because curved walls repeatedly reflect higher-order modes.

Conical: S(x)=π(r0+xtanθ)2S(x)=\pi(r_0 + x\tan\theta)^2. Straight walls. Poor loading — no sharp fcf_c, just gradual transformer — but wall angle sets beamwidth directly: full angle 2θ\approx 2\theta. That is constant directivity by geometry.

Oblate Spheroidal (OSWG): S(x)=S0(1+(x/a)2)S(x)=S_0(1+(x/a)^2) where aa governs throat curvature. Derived by Geddes: define oblate spheroidal coordinates ξ,η\xi,\eta so wavefronts are spherical caps. Matches flat piston to spherical expansion at mouth with minimal discontinuity, killing HOMs that plague exponential and rapid-flare horns. Best CD + low HOM, slight price in LF loading vs exponential.

3 — Directivity, ka, and why size matters

Mouth directivity kicks in when mouth circumference comparable to wavelength. Formal parameter:

ka=2πamouthλ=ωamouthcka = \frac{2\pi a_{mouth}}{\lambda} = \frac{\omega a_{mouth}}{c}

$ka < 1$ → mouth omnidirectional, waveguide does little. ka23ka\approx 2–3 → pattern control starts. $ka >5$ → strong beam. For constant directivity you want kathroatka_{throat} small enough that driver doesn't beam before waveguide takes over, and mouth kaka large enough to hold pattern to lowest desired frequency: fminc/(2mouth_diameter)f_{min}\approx c/(2\cdot mouth\_diameter). That is why HF beaming shows as ___ in this canvas? The tool visual scales 1:1 so you can read mouth vs throat ratio immediately.

Beamwidth 2arcsin(0.707λ2a)\approx 2\arcsin\left(\frac{0.707\lambda}{2a}\right) for rigid disk, but actual horn beam 2θ\approx 2\theta conical above ka1ka\approx1.

4 — Playbook: choosing OSWG vs conical vs exponential

  • Studio monitor CD: Use oblate spheroidal. Set throat to driver diameter (25.4 mm for 1"), length 150–250 mm, half-angle 40–50°. Mouth ends 180220\approx 180–220 mm gives pattern control to ~1.2 kHz.
  • PA long throw: Conical with 30° half-angle gives 60° nominal (−6 dB) beam that stays ~60° from 2 kHz to 16 kHz. Pay with LF loading — add separate mid horn below.
  • Bass horn: Exponential wins. Choose mm from desired fcf_c via fc=mc/(4π)f_c=m c/(4\pi). Example: fc=80f_c=80 Hz → m=4πfc/c2.93m=4\pi f_c /c \approx 2.93 m1m^{-1}. Then length sets mouth size: Smouth=S0emLS_{mouth}=S_0 e^{mL}.
  • HOM check: If flare changes slope abruptly (throat kink), you create higher-order modes that bounce and create time smear. OSWG curvature continuity fixes this — watch profile in canvas: smooth second derivative = good.

5 — Honesty: 1D is not 3D

Webster assumes planar or spherical isophase wavefronts. Real horn with wide angle, sharp walls, or diffraction slot launches transverse modes above fc/(2throat)f \approx c/(2\cdot throat). The tool does not predict those modes, nor diffraction at mouth edge, nor polar lobing, nor driver diaphragm breakup interacting with throat. Directivity number shown is geometric half-angle only, not measured DI. For accurate directivity maps (DI(f,θ)DI(f,\theta)) and throat impedance Zthroat(ω)Z_{throat}(\omega), run BEM (AKABAK, COMSOL, or open VACS). Use this designer to get first-cut area profile and mouth size that fits your cabinet, then validate with simulation and polar measurements.

Anatomy of the instrument

Three parameters, three profile types, one live cross-section canvas. Here is how the sliders connect to the Webster area function and how the canvas draws the horn walls at true 1:1 aspect ratio.

Parameters and the profile engine

  1. 01

    Throat diameter → S₀. The first parameter sets the initial throat area S0=π(d0/2)2S_0 = \pi (d_0/2)^2. All three profile types use this as the starting area. For a 1" compression driver, the standard throat is 25.4 mm. The slider range (10–100 mm) covers everything from small tweeter throats to large-format midrange horns.

  2. 02

    Flare parameter — dual identity. For exponential, this is the flare constant m (1/m), ranging 1–50. For conical and OSWG, it's the half-angle θ in degrees (5–85°), internally converted to radians. Switching profile type updates the label, slider range, and default value so the parameter never goes out of bounds.

  3. 03

    Length → mouth size. The third parameter is total horn length L (10–500 mm). The websterHornArea() function evaluates S(L) for the given profile: exponential gives S0emLS_0 e^{mL}, conical gives π(r0+Ltanθ)2\pi(r_0+L\tan\theta)^2, OSWG gives S0(1+(L/a)2)S_0(1+(L/a)^2) where aa is derived from the half-angle. Mouth diameter is then 2Smouth/π2\sqrt{S_{mouth}/\pi}.

  4. 04

    Cutoff and directivity outputs. For exponential, fc = m·c/(4π) — the frequency below which the horn doesn't load. For conical/OSWG, fc is not sharply defined (shown as "—"), and directivity is estimated as 2θ — the full geometric beamwidth. These are first-order approximations: real fc is influenced by mouth size, and real directivity depends on ka at the mouth.

The cross-section canvas

  1. 05

    True 1:1 aspect ratio. The canvas enforces equal x and y scaling — the horn profile is not stretched. The scale is computed as min((cw80)/L,(ch80)/(2rmax))\min((cw-80)/L, (ch-80)/(2\cdot r_{max})) where r_max is the mouth radius. This means very long/narrow horns fill the canvas width, and very wide horns are constrained by height. The result always shows the geometric shape accurately.

  2. 06

    Area-to-radius conversion. The canvas samples 201 points along the horn axis, computing S(x)S(x) at each x via websterHornArea(). Each S is converted to radius r=S/πr = \sqrt{S/\pi}. The upper wall is drawn at ycenterry_{center} - r, the lower wall at ycenter+ry_{center} + r. The area between them is filled with semi-transparent magenta.

  3. 07

    Dimension annotations. Throat diameter is labeled at the left edge, mouth diameter at the right edge. A dimension line below the profile shows the total length in mm. The central axis is drawn as a dashed line. These labels update live as you drag sliders — compare different flare rates side-by-side by noting the mouth diameter at a fixed length.

  4. 08

    Raf-throttled, no idle loop. Slider updates are batched via requestAnimationFrame — changing any slider triggers a recompute of the mouth area, dashboard readouts, and canvas redraw in the next frame. There is no animation loop, no idle computation. The canvas also redraws on window resize and theme change via a MutationObserver on data-theme.

The area functions defined

Exponential: S(x)=S0emxS(x)=S_0 e^{mx}. Conical: S(x)=π(r0+xtanθ)2S(x)=\pi(r_0+x\tan\theta)^2. OSWG: S(x)=S0(1+(2xtanθ/r0)2)S(x)=S_0(1+(2x\tan\theta/r_0)^2). All three share S₀ and converge at x=0. The difference is the second derivative: exponential accelerates, conical is constant d²S/dx², OSWG starts flat at the throat and smoothly transitions to spherical-cap expansion.

Gear for waveguide & horn measurement

Measurement stack · 18 picks

Audio interfaces & monitoring18

More gear across every app: the full Gear list →

Two gotchas worth knowing

The 1D assumption breaks at wide angles

Webster's equation assumes isophase wavefronts are planar or spherical caps — pressure varies only along the axis, not across the cross-section. This holds for half-angles below ~30°. At 45° and above, transverse pressure variation becomes significant and higher-order modes (HOMs) appear. The tool will still compute an area profile and draw a cross-section, but the acoustic predictions (fc, directivity) become increasingly inaccurate. For wide-angle horns, use this for geometry only and verify acoustically with BEM.

The exponential flare rate m is wavelength-dependent in real horns

In a true exponential horn, m is constant. But many "exponential" horns in practice have a flare rate that changes along the length — the throat may expand slowly for loading, then the mouth flares more rapidly to reach the desired mouth size within a practical length. This tool uses strict mathematical exponentials with constant m. The cutoff frequency fc = m·c/(4π) only applies if the flare rate is truly constant over the entire length. Real horns with variable flare rates have a more gradual cutoff transition.

JavaScript — the horn profile solver

The websterHornArea() function that computes cross-sectional area at any point along the horn axis. Three profiles, one function, zero dependencies.

Horn area profile — JavaScript

const websterHornArea = (type, S0, param, x) => {
  switch (type) {
    case 'exponential': {
      return S0 * Math.exp(param * x);
    }
    case 'conical': {
      const r0 = Math.sqrt(S0 / Math.PI);
      return Math.PI * (r0 + x * Math.tan(param)) ** 2;
    }
    case 'oblate-spheroidal': {
      const r0 = Math.sqrt(S0 / Math.PI);
      const a = r0 / (2 * Math.tan(param));
      return S0 * (1 + (x / a) ** 2);
    }
    default:
      return S0;
  }
};

// Cutoff for exponential horns
const hornCutoff = (m, c = 343) => (m * c) / (4 * Math.PI);

// Mouth diameter from throat + profile + length
const mouthDiameter = (type, d0, param, L) => {
  const S0 = Math.PI * (d0 / 2) ** 2;
  const S_mouth = websterHornArea(type, S0, param, L);
  return 2 * Math.sqrt(S_mouth / Math.PI);
};

Frequently asked questions

What is the Webster horn equation and what does it assume?

Webster's equation is a 1D wave equation that assumes planar or spherical isophase wavefronts — pressure is constant across each cross-section and varies only along the horn axis. It's valid when the flare rate is moderate (wall angle < 30° half-angle) and ka < 3–5 at the throat. Beyond that, transverse (higher-order) modes appear and you need a 3D boundary element method (BEM) solver.

Which profile should I choose for a studio monitor waveguide?

Oblate spheroidal (OSWG). It transitions from a flat throat to a spherical-cap mouth with continuous second-derivative curvature, minimizing higher-order mode (HOM) generation at the throat-wall junction. Set throat to driver diameter (25.4 mm for 1"), length 150–250 mm, half-angle 40–50°. This gives pattern control down to ~1.2 kHz with a mouth diameter around 180–220 mm.

Why doesn't the conical horn have a defined cutoff frequency?

The conical horn's area grows as x² — it has no exponential flare rate m. There is no sharp cutoff like the exponential fc = m·c/(4π). Instead, loading drops gradually: the throat radiation impedance transitions from resistive at high frequencies to mass-like at low frequencies. Conical horns are used for constant-directivity applications (PA) where controlled beamwidth matters more than maximum loading efficiency.

How do I read the cross-section profile canvas?

The canvas shows a 1:1 true-aspect-ratio side view of the horn. The central dashed line is the axis. The upper and lower magenta curves are the horn walls — their gap at the left is the throat, and at the right is the mouth. The profile area is filled with a semi-transparent magenta tint. Throat diameter and mouth diameter are labeled at the ends. The total length is dimensioned below the profile. You can compare profiles side-by-side by switching types and watching the shape update.

What is the beamwidth number on the dashboard?

For conical and OSWG profiles, beamwidth is estimated as 2× the half-angle θ. A 45° half-angle gives ~90° nominal beamwidth. This is geometric directivity — it assumes ka at the mouth is large enough (>2–3) for pattern control to hold. At low frequencies where ka < 2, the mouth is acoustically small and beamwidth widens toward omnidirectional regardless of wall angle. The dashboard number is the high-frequency asymptote.

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
Acoustic Horn Calculator — live MakerPortal instrument screenshot
Canonical capture · real UI · no generated scientific artwork