Unreal Engine Audio Implementation Demo: Soul City

The goal of this project was to start to learn how to implement audio inside the Unreal Engine. I specifically didn’t want to use middleware for this, so I could get a handle on Unreal’s native audio tools without relying on the familiarity of using something like Wwise. I also wanted to get to grips with Blueprints and see how I could apply them to some of the audio systems.

The level I used for this showcase was the free Soul City project from Epic Games.

All of the audio was designed and exported for implementation using Reaper.

I’m documenting this mainly as a reference for myself. But if it aids anyone else that would be great.

Planning

After opening the project for the first time, the first thing that I did was to play through the scene a few times to get a feel for what kinds of sounds the environment would require.

As the project already contained audio, this was pretty easy for the most part. But I also spotted some areas where I thought I could add some more detail and make it my own - rather than just copying what the sound designers had done in the original project.

As rain is such a predominant part of the scene, I wanted to add as much detail as I could with it. I made a note of the different surfaces the rain was falling on, like the tarpaulin and the corrugated iron roofs and planned to add emitters for both of these surfaces.

There was also an abundance of neon signs placed around the level, so I could add a gentle hum to these. One was even flickering near the end of the scene, so I wanted to add a unique sound for that one.

I also aimed to add a bit of extra life to the scene. I had the idea to add a dog barking when you walked close to one of the apartments in the level. It would help to give the impression that this was an area that was lived in.

Some of the other elements in the level that would require sounds were: the giant metal cogs, sparks coming from the open electrical cables, the swaying of a light in the wind, wind coming through open windows and the rattling of a metal post.

Lastly, I also wanted to flesh out the ambience of the city in the distance. My plan was to enhance the sense of scale and bring life to the sounds of a city from afar.

After I had made all these notes, I began to create the sounds I would need to implement.

Ambience

With the assets made, it was time to implement them into the scene. I deleted all of the project’s original audio assets and emitters so I was left with a fresh environment to place my own.

I decided to implement the most prominent sounds first. This would give me a sonic canvas I could balance all the other sounds around. As the rain is a focal point to the level, I implemented the sounds for that first.

The main ambient bed for the rain was created with two emitters, playing different rain sounds that looped. They were placed in a way that they would be heard at maximum volume while outside in the environment, with the volume falling off as you entered a building. I didn’t want the rain to ever drop to silence, because you are never far away enough that you wouldn’t be able to hear it at any point in the scene.

Next came the wind. The goal here was to make the wind very directional, as if it was blowing in from the ocean side of the level. I positioned my wind emitters with this effect in mind and tweaked them until I was happy with the directionality. Getting the right balance between wind intensity and falloff took quite a bit of trial and error. But it was just a matter of moving the emitters, testing in the scene, and repeating until I was happy with the balance. I also used a general looping wind ambience bed that provided general coverage for the rest of the level.

The ocean waves crashing against the shore was another prominent feature. Because the animations for them were pretty intense, I wanted to make the fall off distance for their emitter quite large. But not so large you could hear it everywhere in the level. The audio emitters were placed almost directly above the waves, ensuring that they would sound loudest when directly near them. The falloff for the sound was again a mix of experimentation until I felt that it sounded natural.

With the wind, rain and ocean waves taken care of, it was time to tackle the more localised sounds.

Localised Audio Emitters

As mentioned before, I wanted to get pretty granular with my audio emitters - there was so much opportunity in the environment to add specific detail with audio and I wanted to take advantage of that.

First of all I located all the tarpaulin in the scene and added emitters to each of them that would represent the sound of the rain hitting the fabric. Additionally, I added an extra emitter that would play the sound of them ruffling in the wind to compliment the corresponding rustling animation.

Audio Emitters for the rain hitting the tarpaulin along with the sound of it rustling in the wind.

Audio Emitters for the rain hitting the tarpaulin along with the sound of it rustling in the wind.

NeonEmitter.png

Next I placed the sounds for the neon signs. This was a simple loop with a fairly short falloff distance so they wouldn’t be too distracting.

I added an emitter for the wind blowing through the opening in the first corridor. This was a unique asset and a unique emitter which was very directionally focussed.

The level also contained huge spinning cogs. I placed my emitters directly on them and as they were so large, I gave them a medium to long falloff distance.

Another spot emitter that I placed was for the rattling of a metal post which moves in the wind. I made a random sound trigger blueprint (more details in the next section) and attached that to the post.

Lastly, I added spot emitters to all the smaller elements in the scene. This included: the sparks caused by the exposed wires, the steam pouring out of the pipes, water droplets leaking from the ceiling, and the swaying of the light in the starting corridor.

Random Sound Triggers Using Blueprints

I wanted to create a system similar to a random container in Wwise - a system where a group of sounds can be triggered randomly while assigning randomisation properties to them such as variations in pitch, volume and playback rate.

A system like this would add more realism to certain sounds. The first place I used this Blueprint was for randomising metal clanks of a metal post swaying in the wind.

Here’s what my Blueprint looks like in order to achieve this:

RandomSoundBlueprint.png

On the left are the audio files I wanted to be randomised. They are going into a Random component which will select one of the files to play at random. Then we have a Delay component. With this you can specify a minimum and maximum delay time for when the sound triggers. After this is a Lopping Component, which ensures the whole system will keep triggering over and over again while the player is near the emitter. Lastly, there is a Modulator, in which I have assigned some slight pitch and volume randomisation to each sound as it triggers.

I also used the same system to randomise the sounds for the Dog Barking and the swaying squeak of the light in the first corridor.

Audio Trigger Boxes

I wanted to use Trigger Boxes for two reasons: firstly, so I had an idea of how they worked and secondly, so I could add some one shot sounds to add interest to the level. I was keen to add at least one sound that wasn’t part of the level - one that was intended as a signifying sound for the player. Which, in this case, was an entering new area sound.

The other place I used a Trigger Box was on the balcony. I used it to trigger the sound of some sirens in the distance from the city. I didn’t want to attach the sirens to my main ambient city bed, as repeating sirens would make it sound unrealistic the longer you stood there. Using a Trigger Box ensured that it was a one off event.

TriggerReal.png

The Audio Trigger box that initiates the plaback of the sirens

Footstep Playback System with BluePrints

The Soul City project does not come with a character model. So attaching footsteps sounds to a First Person Actor without any animations proved to be tricky. I wasn’t sure the best way to approach it, but luckily I came across an excellent tutorial on youtube which helped me get the results I wanted.

FootstepBlueprint.png

A Blueprint for First Person Footstep Sounds Trigger

Esentially, with this system, I am triggering the playback rate of the footstep sounds at a time interval when the first person actor moves. It required a lot of experimenting to get the timing of the triggering in line with the walking speed of the first person actor. But I soon got to a point where I thought it sounded pretty natural. The sounds of the footsteps are also getting randomly chosen each time.

This ended up being a pretty complicated way of achieving something so simple. The lack of animations for the first person actor Blueprint made it a challenge and I’m not convinced this is the best way to do it. But it works for the purposes of this demonstration. In future, I’d look at alternative ways of attaching footsteps to a First Person Actor.

The Mix

Note: The final mix is just for demonstration purposes - I’d never mix ambience this loud in a real game situation.

My overall aim was to make the weather feel powerful, like the level was in the beginning stages of a storm. I also tried to make the less important audio quieter, yet still able to be heard. Examples of these subtle sounds are the creaking of the swaying light in the corridor and the gentle hum of the neon signs throughout the level. Not sounds I wanted to necessarily draw the players attention too, but important nonetheless.

Wrapping it Up & What’s Next

This was a fun and useful exercise. I learnt a lot about the basics of implementing audio in Unreal with this project. I now have the confidence to attempt something more complex. For my next Unreal project I aim to have more elaborate audio systems and more complex events happening to trigger audio.

Do you need a freelance sound designer for your Unreal engine game? Contact me today to tell me about your project!

The Author

This article was written by Oliver Smith. A long-time remote working freelance sound designer dedicated to making gameplay enhancing sound for games.