print-bench

aerochord

A musical wind instrument that (a) prints in place as one piece with no supports, (b) does not correspond to any instrument in the historical record, and (c) is only really designable/printable with an FDM machine and a computed internal geometry. The brief was an explicit stress test of the whole co-design pipeline.

Overview

aerochord printed in amber-orange PLA (satin finish) — three graduated fipple pipes rising from a base bar, with the bed-resting mouthpiece snout at the front

Product Hero Studio render 1 / 4

aerochord printed in amber-orange PLA (satin finish) — three graduated fipple pipes rising from a base bar, with the bed-resting mouthpiece snout at the front

NOTE

Archived at v0.1 (2026-08-07) — frozen, not actively maintained. This design is retired from active CI to save render cycles. To improve it, fork the repo, update it against current CI, and contribute it back as a derivative per the repo's lineage tracking (see also CLAUDE.md → "Archived designs").

One breath, a whole chord. aerochord is a print-in-place wind instrument with no equivalent in the historical record: a single mouthpiece feeds a shared plenum that splits into several internal fipples (the flue-and-edge sound maker of a recorder or tin whistle), each voicing its own closed pipe tuned to a note of a chord. Blow once and every voice speaks together. It prints as one piece, standing up, with no supports — the intricate internal air path only works because it was solved to be printable. For anyone who wants an instrument that is impossible to buy and faintly impossible to explain.

The three graduated pipes are the three voices of the default major triad — the tallest is the lowest note. The windows (mouths) sit at the front base of each pipe; the mouthpiece snout you blow into is at the front, resting on the bed.

How it works

A recorder makes sound with a fipple: your breath is squeezed into a thin flat jet (the flue) and thrown across a window at a sharp edge (the labium), which splits it and sets the air in the pipe oscillating. aerochord puts one fipple per voice and feeds them all from a single plenum (a shared air reservoir), so a single breath drives several pipes at once. Each pipe's length is solved from the closed-pipe relation f = c / (4·L) so its pitch is one note of the chosen chord.

A cutaway through one voice shows the whole path — mouthpiece → plenum → windway → flue → window → labium → the closed-pipe bore with its self-supporting conical top:

…and the fipple itself close up — the thin windway, the flue exit, the open window, and the beveled labium:

Honest note on sound. The repo's gate proves this print is watertight, printable, and sliceable — it does not prove the pitch or that a given voice speaks. Those depend on fine fipple geometry and airflow that only a physical print confirms. The dimensions follow documented whistle/recorder practice, and the design ships a one-voice coupon and a tune knob precisely so you can calibrate on a short print. Treat the printed pitches as nominal and expect to tune. See NOTES.md for the full acoustic derivation and caveats.

What you get

A single print-in-place object — no assembly, no supports, no fasteners.

  • aerochord — the full instrument, default 3 voices (approx. 22 × 67 × 106 mm, ~4 h, ~26 g PLA)
  • aerochord-couponprint this first: one voice to dial in the fipple and pitch on a ~1 h print before committing to the full chord
  • Material: PLA (or PETG). Any color; the sound doesn't care.
  • Layer height: 0.2 mm. Finer layers only sharpen the labium.
  • Nozzle: 0.2 mm or 0.4 mm (a 0.4 mm nozzle is assumed throughout). The thin 1 mm flue is the make-or-break feature — a larger nozzle can't form it.
  • Infill: 15–20 % is plenty; the acoustic volumes are the hollow bores, not infill.
  • Supports: none needed. Everything is self-supporting by construction.
  • Orientation: exactly as it renders — base flat on the bed, pipes up.
  • Brim: recommended. The instrument is tall and slim; a 5 mm brim keeps it planted. The slicer's generic "stability" warning is expected and is what the brim answers.
  • Print the coupon first (aerochord-coupon.scad) and tune before the full run — see NOTES.mdPrint this first.

Parameters

All parameters live at the top of aerochord.scad, grouped in Customizer sections. The ones most worth touching:

ParameterDefaultWhat it does
chord_ratios[1, 5/4, 3/2]The chord, as just-intonation ratios. [1, 6/5, 3/2] = minor; add 2 for a root+octave; more entries = more voices
root_freq1046.5 Hz (C6)Pitch of the lowest voice. Lower = taller, floppier pipes; higher = shorter, sturdier
tune1.0Scales every pipe length together to correct measured pitch. Set tune = measured/target after a test print (pitch ∝ 1/tune, so >1 lengthens tubes and lowers pitch)
flue_h1.0 mmWindway air-gap — the critical FDM feature. Raise in 0.1 mm steps if a voice won't speak. Guarded ≥ 0.8
cutup4.5 mmFlue-to-labium distance; the fipple's tone control. Breathy → lower it; shrill → raise it
bore_d10 mmPipe bore diameter — louder/lower-impedance when wider
window_corr2 mmThe open-window end correction folded into every tube's length so the chord intervals stay true (see NOTES). ~0.3–0.6 × bore radius; calibrate physically if the intervals sound off

Override on the command line, e.g. a warmer minor chord an octave down:

export OPENSCADPATH="$PWD/lib:$PWD"   # so `use <printability.scad>` resolves
xvfb-run -a openscad -o build/aerochord.stl \
  -D 'chord_ratios=[1, 6/5, 3/2]' -D 'root_freq=523.25' \
  designs/aerochord/aerochord.scad

(Or just ./scripts/render.sh aerochord, which sets OPENSCADPATH for you.)

Assembly & use

No assembly. Snip the brim, clear any stray strands from the windows and the flue slots (a slip of paper or a 0.3 mm feeler through each window helps), and blow steadily into the mouthpiece. All voices should sound at once. If one is silent or airy, that's a fipple to tune — see NOTES.mdPrint this first.

Workbench

View in 3D

Inspect the real geometry — drag to rotate, scroll to zoom. The model is rendered from this design's own source at its default settings, right in your browser; nothing is uploaded.

Make it fit

This design has 21 tunable parameters. Change them and render your own STL — OpenSCAD runs in your browser, so nothing is uploaded and nothing is installed.

An STL you configure here is ungated. The files this project ships have each passed a printability check and a PrusaSlicer test-slice; your variant has not. Treat it as a starting point, and print the fit coupon first if the design has one.