Game Audio Mixing With AtomCraft

This post explains the mixing process in AtomCraft.



Mixing a game can be very challenging. Like for other types of media, the final mix only comes together at the end of the production, when all the elements have been implemented. However, the interactive nature of the medium, the different constraints, the large amount of different audio assets and the very tight deadlines all contribute to making it an even more difficult task.

In this blog, we will explain how to leverage the different AtomCraft’s mixing features to create a lively mix for your game.


The mixing architecture in AtomCraft

Before starting the audio mixing process it is important to understand the mixer architecture and the audio signal path in AtomCraft.

AtomCraft’s signal path is depicted below:

Blog Picture_Mixing_Diagram_Volume_V2.0


The Encoded Volume

The Encoded Volume is the volume set at the time of encoding. We can view it like the “Trim gain” on an audio console and it affects directly the entire audio path. Changing this volume will affect all Cues that are using this audio file. It is an easy way to quickly change the volume of an audio file for the entire project.

To access this volume: go to the Materials section, click on a wave file and set the Encoded Volume.


Clip Volume

Each clip on the Timeline has its own volume. To access this volume: Go to the Timeline section, click on an audio clip (waveform), select the FX1 tab and set the Volume.


Envelope Settings

Each clip on the Timeline also has its own 4-segment (ADSR) amplitude envelope. To access these parameters: Go to the Timeline section, click on an audio clip (waveform), select the FX2 tab and set the parameters. It is a convenient way to create a fade-in / fade-out for any waveform in your project.


Volume Automation

Like your favorite Digital Audio Workstation, AtomCraft offers dedicated automation curves on each track. Timeline automation is the modification of the value of a sound parameter against time using a curve. For instance, this feature can be used to precisely adjust the volume of a voice over at any given time, without altering the original source file.

To add the Volume Automation, the first thing to do is to select the right Track. Once it is selected, click on the automation selector (displaying “No Automation”), then select add and choose Volume.


Action Trigger

In AtomCraft, an “Action” allows the sound designer to mute or change the volume of a target Cue directly from the Timeline.

To access this feature: go to the Timeline section, create an ActionTrack and insert a Mute or a Parameter Action. All the parameters will be on the Properties window on the right.


Do not forget to specify which Cue is going to be targeted. Simply drag & drop the target Cue on the Action Track.


Track Volume

Each Track of a Cue also has its own volume. To access this volume, simply select the desired Cue and adjust the volume.


Cue Volume

Each Cue has its own master volume. To access this volume, select the desired Cue and adjust the volume of the top-most track.


CueSheet Volume

A CueSheet is a sound bank composed of multiple Cues. In AtomCraft, each CueSheet has its own master volume. It means it is possible to change the volume of all the Cues in a sound bank at once.

To access this volume: go to the WorkUnit section, click on a CueSheet and set the Volume.


Category Volume

Assigning Cues to Categories allows them to share certain volume and instance limiting properties.  It is a very efficient ways to regroup certain type of Cues in “SubMixes” (EG: VO, Music, etc.). It also helps streamlining your mixing workflow.

To access this volume, first, create a Category Group and then a Category in the global settings section of the project. To assign Cues to that Category, you can drag them from the project tree onto the Category.


3D Attenuation.

In a 3D game, many cues are 3D, which means they are affected by the distance volume attenuation at run-time. It is an important aspect of the mixing of a 3D game. In AtomCraft, the distance attenuation can be controlled by an AISAC and by the Min/Max Attenuation Distance parameters of the Cue.

Because many Cues could use the same distance attenuation in the project, Global AISACs are usually more appropriate.

To access the Global AISACs, go to the Global Settings of the Project Tree and select the GlobalAISACs folder. If you have not created your distance attenuation AISAC yet, you will have to create a new one. Simply right-click on the folder, select New Object and then click on Add AISAC.


In the example above, the yellow curve will adjust the volume of the assigned Cues depending of the distance between the listener and the sound emitter.

Finally, the Attenuation Distance Min/Max parameters can be set in the 3D Positioning window of the FX2 tab.


Bus Send and Dsp Mixer Level.

We will be covering everything you need to know about this in the following section!


Working with the DSP Bus Maps

Like in your favorite DAW, there is an audio mixer in AtomCraft. It is possible to send the audio signals of your sound Cues to the different channels of the mixer and to apply real-time DSP audio effects such as reverberation, EQ, compressor to the Cues played by the game.  Let’s see how it works.

Step 1:

The first thing to do is to open the Bus Map section. Essentially, the Bus Map is used to manage the destinations of all your DSP buses. There are two types of Bus Maps in AtomCraft: the Cue configuration Bus Map, used by the Cues, and the AISAC/Automation Bus Map.

Go to the Global Settings in the Project Tree and double-click on the BusMap folder.


Step 2:

An initial bus mapping is automatically set up when you create a new project; however it is possible to create a new one if needed. Note that it is not possible to create multiple AISAC/Automation Bus Maps. There can only be one per project.

First, right-click on BusMapforCue and from the context menu Select “New Object” and choose “Create BusMap”.


You can now configure the Bus mapping in the middle pane.


Step 3:

Now things are getting interesting, let’s open the Audio Mixer.

To open the DSP Mixer, click on View and then choose Mixer (DSP Bus Setting) Window. The DSP Mixer will appear.


It is also possible to open the mixer from the DspBusSettings folder in the Global Settings pane. Simply open the folder and click on a DspBussSetting.

If you want to create a new DspBusSetting (mixer): Right-click on the DspBusSetting folder, from the context menu select “New Object” and then choose “Create DspBusSetting”.

Step 4:

It is now possible to configure the mixer and add DSP Effects.

The first thing you may need to do is to add new Bus. To add new bus: right-click in the mixer and choose Add DSP Bus.


If you like, you can change the color of a channel by right-clicking on it and selecting Color Settings.


Now, to add an effect, click on the + icon. Different effects are available depending on the target platform. Simply select the platform you are working on and then the desired effect.


The next step is to assign the channel to the MasterOut in the sends section. Click on the + icon, select MasterOut and adjust the send Level. It is also possible to assign the send of a bus to another bus.


Now, to edit the DSP effect properties, click on it in the mixer and its settings will appear on the right.


If you want to bypass or delete an effect, right click on it and use the corresponding commands in the context menu.


Step 5:

It is now possible to assign a sound Cue to a Bus. Select the desired Cue and click on the FX1 Tab. Make sure to activate the send by clicking on it. Once it is done you will see a green light.


The last thing to do is to turn up the effect send level knob.

Step 6:

Once we have assigned all our Cues to their respective Buses, we can use the mixer as a sub mixer or a DSP effects mixer using the faders.


For instance, a Voiceover Cue could be assigned to Bus2, which has a compressor inserted, but also to Bus1, which is the reverb effect track. The “wet and dry” mix will be made between those 2 tracks in the mixer.


Step 7:

In AtomCraft, it is possible to create Mix Snapshots. A Snapshot is basically a “picture” of your DSP mixer settings that can be recalled by the programmer at any time during the game. Snapshots will share the DSP Mixer architecture of their parent DSP Bus Settings but can have their own values for the levels and the effect parameters. Snapshots can also have some of the effects bypassed and the interpolation between Snapshots can be achieved in the game logic by the audio programmer.

Blog Picture_Mixing_Diagram_Snapshot



To create a Snapshot:

Go to the Global Settings in the Project Tree, open the DspBusSettings folder, select a DspBusSetting, open its context menu, select New Object and then click on Create Snapshot.


If you need to edit a Snapshot later, select it and edit it like you would do for a normal DSPBusSetting.  However, keep in mind that any change to the DSP Mixer architecture itself, like adding or removing an effect or a bus, will be reflected on all the Snapshots.


Ducking with REACT

Another important mixing feature is REACT. It is AtomCraft’s automatic ducking system.

Lowering the volume of a sound when another one is playing at the same time is called “ducking”. A ducking system is a very important tool in the game audio mixing process. It allows the game audio engine to control and prioritize what type of sound will clearly be heard by the player when the game action culminates. To accomplish this task, REACT controls at run-time the audio volume of Cues belonging to specified Categories.

A common usage of ducking is when a game is gently lowering the volume of the music when dialogue is being played. It allows for more headroom for the voice in the mix and ensures it will clearly be heard by the player.

If you want to learn more about how to use REACT we recommend you to watch this video tutorial which explains in details how it works.


Sidechaining in the DSP Bus Mixer

Another approach for ducking in AtomCraft is Sidechaining. It is an easy way to automatically lower the volume of the sounds based on their assignation to different DSP Buses in your project. For instance we could lower the volume of all the music Cues each time a VO assigned to the VO Bus is playing.


Step 1:

The first thing to do is to insert an Amplitude Analyzer on the Triggering Bus.

The Amplitude Analyzer will be used as the side chain input of the compressor.  The input signal of the amplitude analyzer is either the input of the bus send, if it is at the top of the effect chain, or the output of the effect placed immediately before it in the effect chain. For instance, we could use a band pass filter before the amplitude analyzer to make the compressor react to the loudness in a certain frequency range.

Step 2:

Simply insert the Compressor on the Ducking Track, select the right Bus in the SideChainInput section of the Compressor and adjust the Compressor parameters. In the example below, the Compressor will “listen” to the VO Bus and reduce the music Bus volume each time a VO is going play.



Real time mixing with the game

It is possible to connect AtomCraft to a running build of the game in order to mix the game in real-time. It is very helpful because you can hear the result right away.

Step 1:

First, we need to make sure that there is enough memory in the ACF and ACB files, in case we need to change parameters or add/change audio files.

Click on the Global Settings in the Project Tree and adjust the ACF Size Limit.  For instance we could add 2 KB to the ACF limit size to provide space for potential changes to AISACs, Categories and so on.


Step 2:

Now let’s adjust the memory size of our CueSheets. Go to the Work Units pane and click on the CueSheetFolder. Here we can set the maximum size for our CueSheets. For instance we could add about 500 KB to each one. It is a lot more than for the ACF because in addition to the parameters, it is also possible to add or change audio Materials.


Step 3:

The next step consists in exporting the audio data with the In-Game Preview Binary to your project audio folder.


Step 4:

We are now ready to connect to the game.  Start the game and connect it to the AtomCraft in-game previewer. To do so, select Preview in the menu bar and click on Start In-Game Preview.


The following window will appear when you are connected to the game.


From now, any parameter change made in AtomCraft will be reflected into the game. For instance, if we change the music volume, we will notice how the music level changes in real-time in the game.


Using a control surface

AtomCraft allows the usage of an external MIDI control surface to adjust various parameters such as volume or pitch, to mute a Track or even to control an AISAC. It is a very effective way to streamline the mixing process, especially when combined with in-game mixing.

Step 1:

First, we need to indicate the MIDI input device. In the Tool menu, select Properties. In the tree on the left, select the MIDI options and select the controller from the MIDI input device combo box.


Step 2:

The next step is to assign the MIDI controller numbers to the right parameters. Double click on the MIDI Icon at the top of the screen to access the MIDI Assignments window.


Step 3:

AtomCraft has a “MIDI learn” feature. It means that using your MIDI controller while the learning mode is active will automatically assign the detected control to the currently selected parameter.  To activate this feature, simply check the “Learn” box.


Step 4:

It is now possible to control AtomCraft from the MIDI device! If we move the faders on the MIDI controller we can adjust the DSP Mixer faders in real-time.


It is also possible to adjust the volumes of the Tracks in the Cues or to mute them.


Demo project

To listen and look at some examples of AtomCraft mixing features, we have created a small AtomCraft project that you can download below:



This concludes our post about the mixing in AtomCraft. As always, let us know if you want to learn more about a specific ADX2 feature!


Leave a Reply

Your email address will not be published. Required fields are marked *