Chrono in Unreal, part 4: sound without a single audio file
There is no audio file in the project. Everything you hear is created in code, in four synthesisers that run as Unreal® Synth Components in the audio thread and get their parameters from the game thread every frame: engine speed and load, tread speed and slip per wheel, damper velocity, immersion depth, acceleration of the chassis, motor factors of the drone. This part describes the recipes, source by source. The series: part 1 overview, part 2 architecture, part 3 traps, part 5 visual effects, part 6 parasail, part 7 drone, part 8 light, part 9 sequence.
The demo the series is about. On YouTube in 1080p the console is readable.
Why procedural
The pragmatic reason: there were no samples and no licence question anyone wanted to settle in the evening. The better reason: a sample knows nothing about the physics. An engine sample is shifted in pitch and sounds the same under load and on the overrun. A canned sand noise runs when the car drives and does not get rougher when a wheel spins. The synthesiser hangs on the quantities Chrono® computes anyway, and that is why it fits the image: the bouncing over the stones is synchronous, because the trigger is the chassis acceleration and not a random generator.
The price: everything has to be tuned by ear, and the judgement comes in seconds. “Noise too loud”, “the suspension is far too long”, “it has to be a rubbing, not a clinking”, “creaking instead of clinking”. A recipe is built as layers, and every layer is judged on its own.
Engine
A V8 with a cross plane firing order: the ignition pulses follow the uneven pattern of the crankshaft with a 90 degree offset, hence the typical rhythm instead of an even hum. Underneath it half an engine order as a drone tone, above it a tanh saturation that grows with the load. Engine speed and load come from the Chrono drivetrain, so the engine sounds different on the overrun than under load, and different on the limiter on the dune than when rolling. That was the answer to “can you make it fatter still” after two reference videos of an H2.
The starter motor was the hardest sound of the whole demo. A recipe of its own from a sawtooth, amplitude modulation, a band pass and a first firing pulse, six attempts, and it still does not sound like a starter motor but suddenly comes out like a start signal instead. For time reasons we left it that way. You have to know when to stop.
The engine dies as soon as the vehicle lies in the water: a stop event that lets the firing sequence run out over half a second, after which the engine is silent. The rest of the film has no engine track any more.
Sand
Sand is the largest source and consists of three layers:
- Grains in the wheel arch: random 2 ms pulses of white noise, 10 to 2400 per second with the speed, more on slip and steering angle, through a band pass around 0.9 to 2 kHz. That is the pattering, modulated by slip and steering angle, as the author suggested.
- Grinding: pink noise below 220 Hz, amplitude modulated with the tread block rate, twelve blocks per revolution, rough instead of sinusoidal. That is the rubbing, which at first was a clinking because the modulation sat too high.
- Body boom: brown noise between 50 and 100 Hz, slightly saturated.
On top of that a slip grit between 500 Hz and 3 kHz that becomes audible on the dune when the wheels spin, and the cobblestones as knocking from the contacts, synchronous with the image. All levels were lowered several times over the course of the day. The first sand was too loud, the second too bright, the third too long. The rule that emerged: lower first, then quieter, then shorter, in that order, because a sound that is too bright still grates at half the level.

The sea
The surf is the only source with no physics behind it, and it runs all the time. Pink noise through a low pass whose cutoff frequency, between 200 Hz and 3 kHz, and whose level follow a slow random generator, periods between 29 and 55 seconds, with a cubic envelope so that the wave swells and runs out instead of pumping. The level rises with proximity to the water.
The first version was an even noise, and the judgement came promptly: “the sea does not rush constantly, it has a deeper wave noise, much quieter, slower and more strongly modulated”. The second version modulated too fast and sounded like pumping. The third one stayed.

Driving into the water
This is where most events come together, and this is where separating edge from level pays off.

- Water per wheel as a level: four slightly detuned voices, each with the immersion depth of its wheel. Four wheels in the water then sound like four wheels, not like one voice at four times the volume. In the wash margin, with two wheels in the water and two on wet sand, you hear the asymmetry.
- The water entry as an edge: a dry wheel becomes wet, at most every 0.3 seconds per wheel, with the driving speed as the strength. Three phases: impact, displacement, run out. On the jump from the jetty into the basin all four arrive within half a second.
- A wheel deep below the surface makes no surface noises, just as it throws no spray. Otherwise the vehicle floating with turning wheels was a fountain with permanent splashing.
- The engine stops with the water entry, see above. After that the surf carries the sound alone.
- Under water it is silent. When the vehicle sinks at the end, the ground synth fades out with the roof, beyond 60 cm of immersion depth, and the touchdown noises are blocked under water. The vehicle setting down on the floor of the basin used to rumble beforehand like a landing after the jump, because the landing trigger, “all wheels in the air for a long time, then ground contact”, could not tell floating from flying.

Suspension and stones
The damper hiss is a band pass between 250 and 600 Hz with a level that goes with the square of the damper velocity. The creak at the direction change of the suspension is a short pulse train in the manner of a hinge, triggered when the wheel changes from compression to rebound and the velocity was above 0.15 m/s at that moment. A thump on landings between 45 and 70 Hz comes from the vertical acceleration of the chassis, and hard blows of individual wheels, above 0.9 m/s upwards, knock on their own. The washboard track is a pulse train at the wave rate.
The suspension was the sound with the most corrections after the starter motor: too long, too loud, too high, then a clinking instead of a rubbing, then creaking instead of clinking. The ear tells metal on metal from metal in rubber immediately, a band pass does not.
ABS
The ABS is retrofitted (part 1), and its sound comes from the same synthesiser as the ground. Every re-apply pulse of a wheel brake is a beat: a dull tone at 75 hertz with a share at 140, decaying in 40 milliseconds, with a short click of noise for the valve, at least 30 milliseconds apart. As long as pulses come, the pump hums underneath, a rough sawtooth at 120 hertz that dies a quarter of a second after the last pulse. That is the rattle you hear in the pedal and the footwell of a car. A brake squeal was the first version; the developer rejected it within one run, because a vehicle with ABS does not lock up, it drums.
The drone
Four slightly detuned sawtooths, one per motor, with frequency spacings of a few hertz so that the rotors beat against each other. Every oscillator gets the factor of its motor from the flight mixer: if the drone rolls to the right, the left motors run faster, and you hear it. On top of that a small turbulence layer that was too loud at first and was perceived as a constant noise, now barely audible. The level falls with the distance to the vehicle, because the ear sits in the car, with a panorama from the direction and a Doppler from the relative velocity. A drone far away is not audible, and that is as it should be. At the end, when it flies over the dune to the starting point, it disappears from the sound as well.

Outboard
The boat has a synthesiser of its own, because an outboard does not sound like a V8. The recipe: a V6 four-stroke, idle 1300, wide open 5600 rpm, the revs follow the throttle in 0.3 seconds. The ignition pulses as a pulse train with 30 percent duty, plus a sawtooth for the mechanical whine; that is the motorbike tone the developer heard after the first version, “at speed it sounds like a motorbike”, and it is right for a fast outboard. The exhaust as a resonant low-pass whose cutoff runs with the revs between 900 and 2000 Hz, with a Q around 1.6. A rasp from the high-passed pulse edges above 2.5 kHz, more with throttle. A burble of the exhaust in the water below 160 Hz, gated by the pulses, loudest at idle. The hull slams over the chop at 1.4 Hz, the propeller unloads, and the revs flare by a few percent, which turns the engine on the test bench into the engine on the water. No starter: “no need to build the starting”.
The ears move. While the vehicle drives, the listener sits in the car, and the boat is only heard when it comes close, with Doppler from the radial speed, as the developer asked. Once the vehicle has sunk, the ears sit with the pilot on the canopy. From there only the boat’s engine is heard, 30 metres below and 50 metres ahead, no spray and no wake, plus the wind in one’s own ears, pink noise under 500 Hz with the airspeed and the flutter of the canopy at 6 Hz. The first version had mixed in spray and wake, and the verdict was “you do not hear that from the paraglider, you only hear the engine”.
What proved itself
- Every layer hangs on a quantity that really exists. No random generator without physical control, except the surf, which has no physics.
- Events are edges, states are levels. A water entry is an edge, the immersion depth is a level, and both need a layer of their own.
- Compute per wheel when it happens per wheel.
- The tuning needs ears that are there live. A recipe from the net is a starting point, the judgement “lower, quieter, shorter” comes from the listener, and it comes fast.
- The audio thread must not wait. All parameters go across atomically, smoothed in the synth, without locks.
What is missing: a tyre on wet sand sounds different from one on dry sand, and the model knows the difference but does not use it yet. A wind that grows with the driving speed. A starter motor that sounds like one. The drone has since become a Chrono body, and its four oscillators follow the rotor speeds the controller mixes from thrust and moments, part 7.
What the picture contributes to this sound, tracks in the sand, spray next to the tyres and droplets on the windscreen, is in part 5.
Keywords: procedural sound Unreal Engine, Synth Component, V8 engine sound synthesis, procedural sand noise, surf synthesis, water entry sound, drone sound rotors, vehicle simulation sound, serious gaming, simulation consulting Switzerland, swissEmbedded
Sound that hangs on the physics? We build sound models that arise from simulation quantities and stay synchronous with the image, for simulators, test benches and demonstrators.
Unreal® and Unreal Engine® are trademarks or registered trademarks of Epic Games, Inc. in the United States of America and elsewhere; these articles are neither endorsed nor reviewed by Epic Games. Project Chrono is an open-source project of the University of Wisconsin-Madison and Politecnico di Milano under the BSD-3 licence.