Voice Limiting in Atom Craft
Voices in ADX2 refer to the raw audio playback of single waveforms. Each Voice contributes to the game’s processing load, which can further increase when compression codecs and DSP effects are involved. To avoid putting too much strain on the hardware, we need to carefully control which Voices are allowed to playback. It may also be unintuitive for certain sounds to overlap, such as several lines of the same character’s dialog. Let’s uncover what options we have available.
Voice Limit Groups
Since a Waveform essentially represents a Voice, this is the lowest level at which we can apply limiting. To limit at this level, we need to create a Voice Limit Group. In the Project Tree, right-click the respective folder → New Object → Create Voice Limit Group. We can then drag-and-drop a Cue, Track, or Waveform onto a given group to add it to the group. Doing this at higher hierarchy levels will add all subsequent child Waveforms to the group.
To set a limit, we can change the Voice Limits value in the Inspector with the group selected.
To access more advanced logic, we can navigate to the Priority tab in the Inspector of any Waveform within the group.
Voice Priority determines which Voices should play or stop, with a higher value denoting higher priority.
Voice Priority Type controls the behavior for new playback requests, where “last” will prioritize new requests, and “first” will prioritize older requesters.
Category Cue Limit
The Category feature is used chiefly to group similar sounds together for mixing. For example, we might want to create different Categories for music, sound effects, and dialog to make broad-stroke changes to the mix.
However, we can additionally use these Categories to set macro limiting for a given sound type. Let’s first select a Category and then navigate to the Priority tab in the Inspector.
Category Cue Limit Flag is used to turn this feature on, and the Cue Limits for the Category sets how many Cues in this Category can be played simultaneously.
The Short Distance Priority Flag sets whether a sound is prioritized based on distance, which is great for scenes with much ambient content.
Cue Limits work similar to Voice Limit Groups but only apply to a given Cue. We can find these if we select a Cue and navigate to the Priority tab in the Inspector. Like with Voice Limit Groups, we can specify the amount to limit and prioritize newer or older playback requests. These priorities can also (separately) be applied to any Category Cue Limits.
Although not quite the same thing as limiting, we can further optimize our game by deciding what happens when a Cue’s volume reaches 0. This can be helpful in situations where we are applying distance-based attenuation. If the player can no longer hear the sound source, it often makes sense to stop processing it. We can find the Voice Behavior setting in the Inspector under the Cue heading on any Cue.
By default (Normal), a sound will continue playing even if it reaches 0.
Voice Stop will simply stop the Cue when it reaches 0.
Virtual Voice stores the parameters needed to start the Voice back from where it stopped when the volume increases again.
Virtual Voice Retrigger starts the Voice from the beginning when the volume increases again.
It is worth noting that virtualization can cause synchronization issues, so it should be avoided for tightly timed music.