You can build most game ambience without a sample library by shaping noise. Rain is filtered noise plus random droplet ticks, wind is band-passed noise with a slowly moving filter, and fire is a low rumble plus random crackles. Because the result comes from a few parameters and a random seed, it loops cleanly and costs almost nothing to store.
Last reviewed: October 2026
What is procedural audio, in plain terms?
Procedural audio means generating a sound from rules and numbers rather than playing back a recording. Instead of storing thirty seconds of rain as a 5 MB file, you store a recipe: "noise, high-passed at this frequency, plus this many droplets per second". The recipe is a handful of numbers. The computer follows it to produce the audio on demand.
The trade-off is realism. A good field recording of a specific storm will beat a synthesised one for a cinematic moment. Procedural audio wins on size, variety and control: you can change the intensity of the rain with one slider, and no two players need hear the same drops.
What are the four building blocks?
Nearly every procedural ambience uses the same four ideas.
- Noise: a random signal with energy at many frequencies. White noise is bright and hissy, pink noise falls off toward the highs and sounds more natural, and brown noise is rumbly and dark. Noise is the raw material for rain, wind, surf and fire.
- Filters: they remove frequencies. A low-pass filter makes noise darker and further away. A high-pass makes it thinner. A band-pass keeps one band and gives noise a pitch-like character, which is how wind gets its "whistle".
- Envelopes: they shape how a sound changes over a short time, usually attack, decay, sustain and release. A droplet is noise with a very fast attack and a quick decay. A footstep is a short burst with a slower tail.
- LFOs (low-frequency oscillators): slow wobbling control signals. Point an LFO at a filter's cutoff and the wind swells and fades. Point one at volume and you get gentle pulsing.
If you have used a synthesiser, you already know all four. The creative work is deciding what to connect to what.
How do you make rain, wind, fire and water?
| Sound | Core recipe | What makes it feel real |
|---|---|---|
| Rain | Pink or white noise, high-passed | Random droplet ticks with fast envelopes, varying brightness by surface |
| Wind | Noise through a band-pass filter | Slow LFO on the cutoff, plus irregular gusts |
| Fire | Low-passed brown noise for the body | Random sharp crackles at irregular intervals, a few louder pops |
| Water | Filtered noise for flow | Short pitched blips for bubbles, rising in frequency |
| Birds | Sine tones with fast pitch sweeps | Sparse, random timing, short phrases |
| Crickets | Narrow band tone, amplitude pulsing | Fast, steady pulse with slight detune between voices |
| Room tone | Very quiet low-passed noise | Barely audible, but silence feels wrong without it |
A pseudo-recipe for rain looks like this:
bed = highpass(pinkNoise, 800 Hz) // the hiss of many drops
drops = randomClicks(density = 40 per sec) // individual hits
drops = bandpass(drops, 3000 Hz) * envelope(attack 1ms, decay 30ms)
rain = bed * 0.5 + drops * 0.5Change the surface by changing the filter. Rain on a roof is bright and sharp, rain on leaves is softer and rounder, and rain on a window has a distinct tapping quality.
How do you make footsteps and one-shot foley?
One-shots are short events, and their realism comes from layering and variation:
- Impact: a very short noise burst, band-passed to suit the surface (higher for gravel, lower for wood).
- Body: a quick low thump from a sine whose pitch drops fast.
- Texture: a slightly longer noise tail, such as grit for gravel or a squeak for snow.
- Variation: randomise pitch, timing and level slightly on every trigger. Round-robin a few variants so the same footstep never plays twice in a row.
Doors, knocks, UI clicks and impacts follow the same pattern with different filter choices and envelope lengths. UI sounds lean on clean tones with short envelopes rather than noise.
Why do seeded procedural sounds loop and stay tiny?
Two properties make this approach well suited to games.
Determinism. A seeded random generator produces the same sequence every time. Give it the same seed and the same settings, and you get the identical rain. Change the seed and you get a different but equivalent rain. That means you can store a few numbers instead of audio, and reproduce the sound exactly on any machine.
Seamless loops by construction. Loops click when the end of a buffer does not meet the start. A procedural generator can avoid this by design: filters can be run twice over the buffer so their internal state is warmed up, events near the end can wrap around to the beginning, and slow LFOs can be set to complete a whole number of cycles per loop. No crossfade has to be baked in. The loop is continuous because the maths is.
Size follows from the same idea. A 30-second stereo bed as 16-bit 44.1 kHz audio is about 5 MB. The parameters that describe it are a few bytes.
What can go wrong?
- Too uniform. Pure noise sounds like a fan. Add slow modulation and sparse events.
- Too bright. Synthesised noise tends to be harsher than a recording. Roll off the top end, especially for distant sounds.
- Too loud and too dense. Ambience should sit underneath music and dialogue. Lower density before you lower volume.
- Repetition. A 10-second loop is obvious after a minute. Use longer loops, or layer two loops with different lengths so the combination rarely repeats.
How does Mowjera handle this?
Mowjera, a browser-based DAW for adaptive game music, includes a procedural SFX and ambience engine. Looping beds are rain, wind, fire, water, birds, crickets and room tone. One-shots are footstep, knock, door, UI and impact. Beds expose controls for density, brightness, gust, loop length and a seed, with a few variants per type (rain, for example, has roof, leaves, window and puddle). Generated sound is synthesised in the browser and cached, so a track costs a few parameters rather than audio files.
These tracks behave like any other track: they get EQ, sends and automation, they can be tied to an intensity layer so rain only fades in during storms, and they export with the rest of the score. That last point connects to adaptive music basics: ambience is often the cheapest adaptive layer to add. For atmosphere that works with silence rather than against it, read horror game sound design.
The sound is stylised synthesis, not field recording. If you need a specific real-world sound, record it and upload it as a sample instead. Current docs describe SFX tracks being created through Mowjera's AI-assistant tools, so check the editor for what your version exposes. You can try the editor to hear the music side first.
FAQ
Can you make rain sound from noise?
Yes. Rain is well approximated by high-passed pink or white noise for the dense hiss, plus randomly timed short droplet ticks with fast envelopes. Adjust the filter brightness for surface type and the droplet density for intensity. It will not match a field recording of a specific storm but works well as a loop.
What does seed mean in procedural audio?
A seed is the starting number for a random generator. The same seed and settings always produce the same audio, while a new seed produces a different version with the same character. This makes procedural sounds reproducible, shareable and tiny to store, since you keep the numbers rather than the waveform.
How do you make a procedural sound loop seamlessly?
Make the end of the buffer continue into the start. Wrap events that cross the boundary back to the beginning, warm up filter state before recording, and set slow modulation to complete whole cycles per loop. This avoids baking in crossfades, which can dip the volume at the seam.
Is procedural SFX better than sample libraries?
Neither is universally better. Samples give maximum realism for hero sounds. Procedural audio gives tiny size, endless variation, parameter control and guaranteed loops, which suit ambience, prototypes and small projects. Many teams combine them, using recordings for key moments and procedural beds underneath.
How big is procedural audio compared to WAV?
A 30-second stereo WAV at 44.1 kHz and 16-bit is about 5 MB. A procedural bed stored as parameters is a few bytes, because the audio is generated at runtime. You pay with a little CPU time at load, typically a fraction of a second to about a second for dense beds.