Three heal orbs drop from a crate. The player sweeps through all of them inside 400 ms, and the audio comes out as one woodpecker. Ten variants went into the build, and in that moment it sounded like one sound played ten times.
That is the usual failure, and the count is rarely the cause. The variants were made by moving sliders until the waveform looked different, without deciding in advance which properties were allowed to move at all. Ten files that disagree about the interval are ten sounds. Ten files that agree are one sound with options.
Write the Identity Anchors Down First
A heal cue is short, and the player recognises it through three properties. Lock those three before rendering anything, and the rest of the set can drift without losing the family resemblance.
The interval set
Decide which pitches the cue lands on and treat them as fixed. If the base rises from 660 Hz to 990 Hz, a variant can sit ten cents off, but it cannot land on 880 Hz. The interval is what says gain rather than alert, and a third in one file and a fifth in another will read as two events.
The gesture direction
Upward, two steps, second step stable. A variant that swoops down or adds a third step is a different gesture. The rule is cheap to keep, and it prevents the most common drift in a large set: each file shaped slightly differently until none of them match.
The spectral centre
Measure where the energy sits. For a warm heal cue, a centre of gravity near 1.8 kHz, with the body between 500 Hz and 2.5 kHz, holds up across speakers. Past 2.6 kHz the cue starts to read as a coin. Below 1.2 kHz it reads as a muffled thud.
The anchors double as an audit tool. Load all ten files, look at a spectrogram, and check that the interval set and the gesture are constant. If they are not, no texture work will rescue the set.
Build the base once and keep it. A short two-step shimmer with a filtered noise layer underneath is enough, and the construction is covered in synthesizing the base shimmer if you would rather start from a known shape.
A Three-Axis Jitter Plan
Once the anchors are fixed, variation becomes a budgeting problem. Split the budget across pitch, texture and timing, give each axis a range you can defend, and treat anything outside those ranges as a new sound.
Pitch, measured in cents
Ten cents at 660 Hz is about 3.8 Hz: small enough that nobody calls it out of tune, large enough that two files are not identical to the ear. Keep most of the set inside plus or minus 8 to 12 cents, with one or two outliers at 18 cents.
Do not use semitones. A 100-cent shift moves the fundamental to 698 Hz, which is a different scale degree and reads as a different cue. The window and its reasoning are worked through in how much pitch variation is safe .
Unity AudioSource.pitch is a linear ratio, so plus 10 cents is 1.0058, not 0.10, and it drags duration with it. Wwise random containers and Unreal pitch modulators express the range in cents, but they apply it at runtime, so each value has to survive stacking.
Texture, at the filter and the noise layer
Move the low-pass cutoff by about 6 percent, so a 2.4 kHz setting travels between 2.25 and 2.55 kHz. Move the noise bed by 1.5 dB either way. Leave the oscillator type alone: a sine that becomes a triangle is a timbre change, and timbre carries identity.
Keep the harmonic content steady and let the balance between tone and air shift instead. Listeners read that as slightly softer or more breath without deciding the file is a different sound. The same principle underpins controlled randomness in generated effects : the random element only works when a fixed frame bounds it.
Timing, in milliseconds
An attack of 5 ms can move by 1.5 ms. A total length of 380 ms can move by 6 percent, which gives 357 to 403 ms. Release can travel between 85 and 100 ms. Those small numbers are what stops three overlapping cues from phase-aligning into a metallic ring.
- Pitch: plus or minus 10 cents for the bulk, one or two files at 18 cents.
- Texture: cutoff plus or minus 6 percent, noise bed plus or minus 1.5 dB.
- Timing: attack plus or minus 1.5 ms, length plus or minus 6 percent, release 85 to 100 ms.
Why Three to Five Variants Usually Cover a Heal
A heal is not a footstep. Players hear it tens of times in a session, not thousands, and the events are usually seconds apart. The problem is short-term repetition: two heals close together, or a regeneration tick landing while an orb is collected.
Three to five variants break that pattern. The ear compares a cue against the last one or two, not the whole library, so four files keep consecutive events from sounding identical. Ten buys little unless the game heals constantly, and it costs more files to keep in sync.
If the design really needs ten, do not spread them wider. Keep every file inside the same three ranges and accept that some pairs are nearly indistinguishable. A tight ten is safer than a wide five. The same trade-off appears when building a variation system : variety comes from structure, not from file count.
Why Ten Equal-Length Variants Turn Into a Machine Gun
Machine-gunning is a periodicity artefact. It happens when triggers arrive at even spacing while each sound has the same length and envelope shape. Three orbs collected at 130 ms intervals give a repetition rate near 7.7 Hz, fast enough that the ear stops hearing separate events and starts hearing a rhythm.
Equal length adds a second problem. If every variant runs 380 ms with an identical release, the overlapping tails keep a fixed phase relationship, and copies of the same envelope sum into comb filtering. Varying the release by 10 or 15 ms is often enough to break that alignment.
The fix is not more variants. It is variation in the two dimensions the files do not control: length and trigger spacing. Let the engine add 20 to 40 ms of random delay before playback, and make the rendered lengths actually differ. If the game can heal faster than the cue length, let the first cue finish rather than stacking a second one on top.
Naming the Set So It Stays Usable
A ten-file set lives or dies on its filenames. The pattern that holds up is role, size, index: heal_small_01.wav through heal_small_05.wav, with a parallel heal_large group if the game has two tiers. Role first so the folder sorts by purpose, size second so a designer finds the right tier.
Avoid adjectives and version words. heal_soft_warm_final_v3.wav tells the next person nothing, and it will be the file that gets overwritten. Keep parameter values out of the name too, since they drift on every re-render. Put them in a CSV manifest: file, pitch_cents, cutoff_hz, noise_db, length_ms. The manifest is the record. The filename is only the handle.
Render at 24-bit, 48 kHz WAV, leave peaks near minus 3 dBFS, and resist normalising every variant to the same peak. A decibel of difference is part of what makes the set feel alive.
Build the Base, Then Copy It
Start from one heal cue you are happy with, render it dry, and make variants by re-rendering with small parameter changes rather than by processing the finished file. Pitch shifting a rendered cue moves the formants with it, which is the drift the anchors exist to prevent.
Open the Heal Sound Generator →The Blind Same-or-Different Test
Before the set ships, run a listening test that answers one question per pair: same sound, or different sound. Do not ask which one is better, and do not tell the listener what changed.
Play the base against each variant in random order, ten trials per pair, and count how often the listener says different. A variant called different nine times out of ten has left the family. One that is never called different is not doing any work. The useful band sits between those extremes: audible as a change, still judged the same cue.
Run it with three to five people who have played the game, not only the audio team. Designers who heard the cue during implementation are pattern-matched to it and will accept changes a fresh player reads as a new sound. Then play three cues in a row at 130 ms spacing, because that is where the machine gun lives.
If the set passes both, stop. Ten variants that survive the anchors and the blind test are worth more than fifty that only sound different inside a folder.