When a battle gets busy, the problem is rarely that every sound is badly made. It is that too many events compete at once: automatic fire repeats, enemies call out, impacts stack on top of explosions, and small interface cues keep firing. Sound prioritization decides which events deserve to remain audible. Voice limiting decides how many instances of a sound—or a group of sounds—may compete at the same time. They work together, but they solve different problems.
A useful implementation starts with a design rule, not an arbitrary maximum voice count: protect information the player needs, limit repetition that adds little, and define what should happen when a cap is reached. The exact numbers depend on the game, platform, and audio middleware, so treat the values below as a starting policy to test rather than universal limits.
First decide what must never disappear
Do not assign priority solely by asset type or loudness. A nearby enemy attack cue may be more important than a louder explosion behind the player. A menu confirmation may need to play reliably even during combat, while the tenth debris impact from the same blast can be dropped without changing what the player understands.
Start by sorting events into gameplay roles. A compact policy might look like this:
| Role | Typical examples | Suggested policy |
|---|---|---|
| Critical information | Player damage cue, boss attack tell, mission failure | High priority; avoid routine caps that can suppress the only cue |
| Primary action | Player weapon, close enemy hit, parry or dodge feedback | High or medium-high priority; allow a small number of overlaps |
| Frequent feedback | Footsteps, repeated weapon tails, UI hover, pickup clusters | Medium priority; cap, merge, or vary repeated events |
| Background detail | Distant combat, debris, small foliage rustles, minor ambient loops | Lower priority; virtualize or discard when inaudible or over budget |
This is a design classification, not a ranking that should be copied unchanged into every engine. If a stealth game depends on a distant guard’s footstep, that footstep is gameplay information and should not be treated as disposable ambience. If a rhythm game depends on precise transient timing, its note and hit events need stronger protection than they would in a casual action game.
Voice limiting: cap the repetition, not the whole soundscape
In game audio, a voice generally means an active sound instance or playback voice, not necessarily a spoken character voice. A limit can apply to one event, one emitter, a category or bus, or the whole audio system. These scopes are not interchangeable.
Consider a machine gun that triggers a new shot sound every few frames. A per-event limit can prevent dozens of nearly identical shot tails from overlapping. A separate cap for all weapon events can prevent a large firefight from consuming the entire available voice budget. A global limit is a final safety net, not a replacement for sensible local caps.
Use different rules for different event shapes
- Short transient: clicks, UI taps and light impacts may need a brief cooldown or a small overlap cap. If repeated triggers are expected, rejecting a new instance can be preferable to cutting off the one already playing.
- Long tail: explosions, magic bursts and weapon reports can leave tails that overlap long after the action. Limit their simultaneous instances or let a new, more important event replace a less audible one.
- Looping ambience: avoid starting a separate loop for every nearby object if one shared bed or a small set of representative emitters can communicate the same environment.
- Continuous automatic fire: consider a short voice cap, rate control, or a looped firing layer while preserving distinct start, stop and impact cues.
- One-off warning: avoid placing unique, time-sensitive warnings behind the same cap as plentiful decorative sounds.
The right limit is often lower than the number of objects in the scene. Ten visible shells hitting the floor do not necessarily need ten equally prominent impact sounds. They may be represented by a few selected impacts, a shared debris layer, or a quieter cluster sound. Reducing redundant events at the source usually sounds more deliberate than letting the engine arbitrarily remove voices later.
Choose what happens when a limit is reached
A cap is incomplete until you define its overflow behavior. The available options differ by engine, but most implementations follow one of these patterns:
- Reject the new instance: preserve sounds already playing. This can suit UI clicks or a short event where cutting off the current instance would be more noticeable than skipping the new one.
- Stop the oldest: favor the newest event. This can work for repeated shots when recent action matters most, but can truncate a long sound that is still useful.
- Replace the quietest or least audible: favor the instance that contributes most at the listener’s position. Check how the middleware calculates audibility; attenuation and event gain may matter.
- Replace the furthest: useful when distance is a strong proxy for relevance, though a distant warning may still be important in some games.
- Virtualize: keep an event logically progressing without producing audible output, where the engine supports it. This is useful for sounds that may become audible later, but is not automatically suitable for every transient.
- Stop or discard low-value detail: for short debris ticks or excess foliage hits, playback may not need to resume later at all.
Virtualization and stopping are different. A virtualized loop may continue advancing and later become audible again; a stopped transient cannot resume from its original moment. For a one-shot impact, resuming halfway through after the player approaches may sound wrong. For a distant engine loop, virtual playback may be a reasonable choice. Set behavior according to the event’s meaning, not only performance.
A concrete policy for a crowded combat encounter
Imagine a third-person action game with the player, six enemies, automatic weapons, explosions, debris, footsteps and a boss warning. The following example gives the team something testable:
- Boss warning: high priority; do not let routine weapon or debris limits suppress it. If necessary, reduce competing layers through a mix state as well.
- Player weapon: high priority, with a modest per-event cap so old tails do not build into a constant wall of sound.
- Enemy weapon fire: medium-high priority; cap per emitter and set a broader limit for all enemy weapon events.
- Explosions: medium-high priority for nearby blasts, with a group cap. Prefer the closest or most audible instances when supported, rather than allowing every distant blast to dominate.
- Debris impacts: low priority, small cap, and discard-on-overflow behavior because missed individual fragments rarely change gameplay understanding.
- Footsteps: medium priority by default, but raise the relevant character’s priority in stealth or tracking gameplay where footsteps communicate location.
- UI confirmation and error cues: separate from world-detail limits so combat audio cannot accidentally silence essential interface feedback.
For an initial test, you might try a limit of 2–4 overlapping instances for one repeated small impact event, 3–6 for a repeated weapon event on one emitter, and a separate category cap for the total number of weapon instances. Those are example test values, not engine recommendations. The useful number is the lowest cap that still communicates the action clearly in the busiest intended scene.
How Unity, FMOD and Wwise handle the problem
Unity AudioSource priority
Unity exposes an AudioSource.priority value. In the current Unity 6 documentation, the range is 0 (highest priority) to 256 (lowest priority); Unity’s older versioned documentation describes a 0–255 range, so check the documentation for the version your project actually uses. When the maximum number of real voices is exceeded, Unity virtualizes lower-priority sources first, using volume to break ties. A virtualized source is muted while Unity tracks its playback state, allowing it to become real again if its priority or volume warrants it.
Priority does not by itself define a clean event-specific cap. For repeated sounds, also manage how often your gameplay code creates instances, reuse or stop sources deliberately, and test the project’s maximum real and virtual voice settings. Read Unity’s AudioSource priority documentation for the current behavior and version-specific details.
FMOD Studio: Max Instances and stealing behavior
FMOD lets you set Max Instances on events and group buses. When another instance would exceed the limit, the event or bus stealing behavior determines whether an instance is stopped, rejected, virtualized, or selected by age, audibility or distance. A bus-level limit can control a whole family of events; an event-level limit is more targeted. Be deliberate when combining them, because a bus cap can suppress an event even when that event’s own cap has not been reached.
Start with the official FMOD documentation on stealing and virtualization and its mixing and Max Instances reference. Check the version matching your integration, as menu labels and available behavior can change between releases.
Wwise: playback limits, priority and virtual voices
Wwise provides playback limits and priority controls that can determine which sounds remain active when the limit is exceeded. Virtual voice behavior can keep a sound under engine management without rendering it as a physical voice; configured behavior determines whether a voice later returns or is killed. Test these settings with your actual actor-mixer hierarchy and platform profile rather than assuming one priority scale fits every project.
Audiokinetic’s documentation explains how virtual voices work and describes playback limits, priority and virtual voice behavior in its voice optimization guide. In all three systems, the editor setting is only half the implementation: event triggering, bus routing, attenuation and runtime states still determine what the player hears.
Test the policy by forcing it to fail
Do not validate voice limits in an empty test room. Build a repeatable stress scene that deliberately exceeds the expected number of events: several automatic weapons firing, multiple explosions, nearby and distant enemies, looping ambience, UI activity and at least one critical warning. Then test the same scene with limits disabled and enabled so the team can hear what is being removed.
- Lower the caps temporarily. Make the limit small enough that stealing or virtualization happens frequently. This reveals wrong priorities faster than waiting for a rare overload.
- Listen for missing information. Confirm that a warning, player hit cue or interaction sound remains clear. If it disappears, fix the policy or event grouping rather than simply raising every limit.
- Listen for abrupt cutoffs. A weapon tail stopping may be acceptable; a long charge sound or spoken line being cut off may not be. Change the overflow behavior for that event family.
- Move around the scene. Check whether distance and attenuation produce sensible choices. The quietest sound is not always the least important sound.
- Profile the target platform. Record the peak number of active/physical voices, CPU cost and any audible gaps on the hardware that matters. Do not assume desktop results predict a low-end mobile device.
- Repeat during state changes. Enter a dialogue, pause menu, boss phase or stealth state while the scene is busy. Confirm that state changes do not leave the wrong priority or limit active.
Keep a small event policy sheet with the event name, scope of its cap, overflow behavior, priority rationale and the scene used to verify it. This is particularly useful when programmers add new events: without a documented rule, every new sound tends to inherit a default value that may be inappropriate.
Prioritization also sits alongside mixing rather than replacing it. If dialogue or a boss warning needs space, a deliberate mix change may reduce music or low-value ambience while preserving the important event. The game audio mix hierarchy guide covers how to organize those control points, while the Wwise dynamic combat audio guide explores combat-state behavior. For projects targeting phones, the mobile sound-effect performance guide covers other constraints that voice limiting cannot solve on its own.
The goal is not to make the engine play as few sounds as possible. It is to ensure that when the scene becomes crowded, the sounds that explain the action survive and the sounds that merely repeat it give way.