Cake Mix – Monstrum’s Audio Systems

Originally posted on the Team Junkfish blog. Also a little old, as I meant to repost it here a few months ago, but this is pretty much how things work in the game.

This’ll be a quick blog on some of the more technical audio aspects of Monstrum. For audio guys this might be fairly basic stuff but it’ll give you a look at how we’re managing some of our audio systems. There isn’t exactly much of an understanding of game audio and its processes to those outside of the audio sphere, so hopefully it’ll be useful in opening up the black box of audio voodoo to people who aren’t too familiar with what we actually get up to.


As Monstrum is built using Unity 4 without any audio middleware (or Unity 5’s fancy/awesome new audio features) we’ve had to be a bit creative for a lot of the audio implementation. So things like our reverb system are quite different to Unity’s standard method, as we do things on a per room/corridor piece basis as opposed to spheres to avoid reverb zones bleeding into areas they shouldn’t be in. As Monstrum’s ship is procedurally generated we could have had a lot of scenarios with overlapping reverb zones, so completely removing that possibility gives us one less issue to worry about!

Similarly, dynamic mixing in Unity 4 isn’t something that’s completely doable out of the box, so Gary managed to build a little workaround for that too. We have a fairly simple system that involves tagging groups of sounds and creating “snapshots” of mixes based on certain gameplay parameters. Snapshot mixing isn’t anything new in games and is one of the easiest methods of doing real-time mixing. Subgrouping audio isn’t new either, and Unity 5 makes it a bit more obvious and easier to do thanks to its new mixer features, but we’re working with what we’ve got! While the word “snapshot” might make this seem like a fairly static technique it can be used in a more active fashion, triggering a set of conditions to alter a mix dynamically as opposed to jumping between different parameters.

Duck Tags! Awoohoo!

This is how we do things in Monstrum. With this system we can dynamically change the sound scape depending on where you are or what’s going on. The most obvious implementation of this in game is when you’re in a hiding space, which triggers a snapshot in which the mix is altered based on the monster’s proximity to you. As you’re keeping out of sight under a desk or in a locker, you might hear the monster’s footsteps and growls becoming more apparent while less important sounds like water in pipes or flickering lights begin to move out of your listening field. As it moves closer to you the focus shifts further to the monster’s sounds and the player’s breathing with other sounds being pushed down the ladder. We can use this snapshot mix to build up tension and make it really feel like the monster is closing in on the player’s location, and slowly release it as it moves away to give that sense of relief that comes with not being squished…

A slightly more traditional example (that we’re still working on) is transitioning between different area of the ships, where the different environmental noises and airs change depending on where you are. After all, it doesn’t make much sense to hear the wind and sea when you’re climbing through some containers, so by grouping the sounds into their locations we can quickly (and cheaply!) swap between them.

Snapshots aren’t the only mixing solution available, with High Dynamic Range Audio being adopted by more companies and middleware providers. I’ll not go into that right now, so here’s a nice summary of a few different techniques.

Cheers,
Jaime

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s