Chrono in Unreal, part 4: sound without a single audio file

Software Projekte Agentic Engineering

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:

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.

Spinning wheels on the slope: slip grit and grinding, seen from the drone

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.

The north beach with the sea: the surf always runs, louder near the shore

Driving into the water

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

Two wheels in the wash, two on wet sand: four water voices with four immersion depths

The vehicle sinks, the surface sound fades out with the roof

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.

The drone in low flight over the sand, on its way to the start point

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

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.

Contact us →

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.