Skip to content
Pipfold

Four rounds of synthesis — and the recording won

· sound · game

Pipfold makes exactly two noises: a flap striking wood, a die landing. Both came from the shared mana toolkit until this point and sounded like a menu tone — right for a menu, wrong for an object made of wood.

So: build them. For four rounds.

Round 1: four tuned sines sound like an instrument

Twelve candidates, all built the same way: a sum of sines plus a noise burst. Of the twelve, the two that survived listening were exactly the ones with the highest noise content.

That is not chance, that is the finding. A stack of tuned sines sounds like an instrument, not like a thing. You pick out the individual tones, and the moment you do, it stops being wood.

Round 2: four things a real impact has

The construction was replaced. Instead of stacking tones, what actually happens when two bodies collide was rebuilt:

  1. A contact pulse instead of a noise burst. Two bodies do not touch in zero time — the force rises and falls over 0.3 to 1.5 ms. That shape (a raised cosine) determines the timbre of the strike. It rolls off gently above 1/T instead of hissing like white noise.
  2. Thirty to forty modes instead of four. A wooden plate has densely spaced, inharmonic eigenmodes. You pick four out individually; forty merge into material.
  3. Damping from the loss factor. Wood has η ≈ 0.01–0.02, so Q = 1/η and τ = Q/(π·f). High modes therefore die by themselves faster — which is precisely what separates “wood” from “bell”. Hand-tuned decay times never land on that.
  4. A room. That was the biggest giveaway: every sound from round 1 stood in a vacuum. Seven early reflections between 4 and 22 ms plus a short, dark tail. Very quiet — but without them everything sounds “computed”.

Depending on the candidate, add a body as a second, lower mode bank (the hollow box under the flap, the tray under the die), rattle chains with geometrically narrowing intervals — that is how a tile really clatters — and friction as grainy noise with a jagged envelope.

Round 3 layered the dice sounds and put a low layer underneath. Round 4 straightened the levels.

That is honest work, and it does sound considerably better than round 1.

And then this

In parallel, a stack of CC0 recordings lay next to it for comparison — a real die on a real table, a real flap. Listening settled it in two minutes. Till’s verdict: “real 2 for the die and real 5 for the flap are the best.”

Hear for yourself. On the left the best of four rounds of synthesis, on the right what shipped:

Flap — synthesis, round 3Candidate "Klapper": mode bank plus body plus rattle chain. Centroid 1428 Hz, decay 186 ms.
Flap — the recordingFrom "87 Clickety Clips" (click83.wav), OpenGameArt, CC0. This is what runs in the game today.
Die — synthesis, round 3Candidate "mix-schwer": three layers plus a low layer.
Die — the recordingA single impact from "Wooden dice on wooden table roll", CC0.

With that, Pipfold has external game assets for the first time. HERKUNFT.md lists both with source and licence, and echt_holen.py verifies CC0 on the page and aborts otherwise — a platform’s search filter is metadata and does not count as evidence.

Two things still had to be done to the recordings

Both were pulled to the same energy as the synthetic ones had been, so the levels in klang.gd (−17 / −15 dB) still hold.

And a trap that has nothing to do with sound design: Godot imports WAV lossily by default (compress/mode=2, QOA). audio/*.wav.import now carries compress/mode=0, and a guard in tools/pruefe_kerne.gd checks format, sample rate, silence, clipping and decay of all three files. Otherwise you spend four rounds filing at modes and lose the result on import.

The victory wave keeps the synthetic sound — measured, not felt

The obvious move would have been to use the new flap sound for the victory wave too. Eighteen strikes, a scale up and back down — the same flap, just often.

My worry was that the strikes would merge into a rattle with the drier “Klapper”. That worry was unfounded — the sequence stays even more clearly separated with Klapper. It fails on something else:

Victory wave with the old sound — chosenThe dominant partial audibly rises (178 → 200 → 222 Hz) and stands 50–55 dB above the rest.
Victory wave with "Klapper" — rejectedCleanly separated strikes, but the partial stands only 26–29 dB out. The scale disappears into the material.

So audio/welle.wav is the old sound (196 / 337 / 611 Hz) — it was too tonal for a single flap, and that is exactly why it is right here: the wave is the one place in the game where a pitch says something.

A sound that was too musical as a strike is exactly right as a melody. You could have guessed that; you only knew it after the measurement.

What remains of the four rounds

The lost rounds still sit in tools/klang/ — not as a headstone. The traps in them apply to every next sound this house builds: contact pulse, mode phase, body level, room normalisation, the measurement trap in the Hann window, the levelling of low frequencies.

And without them the recording would not have been chosen correctly. It was the measurement against the synthetic candidates that showed which of the found dice sounds was usable — before that they were twenty indistinguishable files with names like roll_03.wav.

Still open: our own recordings. Something is missing at the top of the found dice files — the band edge sits at 12–15 kHz, which means a lossy source. What is needed: 15–20 individual impacts with half a second of silence between them, the flap additionally lowered slowly by hand and dropped, microphone 20–30 cm above the box, 48 kHz / 24 bit, peak at −12 dB, not normalised. Installing them is then a file swap in audio/.

The lesson is uncomfortable for anyone who likes to compute: four rounds of physics lost, and they were not wasted anyway. Just not for what they were built for.

← Devlog