Tags: unity, audio, fmod, wwise, middleware, 3d-attenuation, mixing, ducking, pitch, game-dev Last updated: 2026-06-27

Audio Middleware (FMOD / Wwise / Unity Audio) Cheatsheet

Quick Reference

SystemBest ForComplexity
Unity AudioSimple 2D/3D sounds, quick prototypingLow
FMODIndie to AA, strong Unity integrationMedium
WwiseAAA, complex dynamic mixingHigh
Unity + MixerModerate projects, snapshot-based mixingLow–Medium

Unity Audio Basics

AudioSource Properties

PropertyDescription
ClipAudioClip to play
Volume0–1 output level
PitchPlayback speed (0.5 = half, 2 = double)
Spatial Blend0 = 2D, 1 = 3D
LoopRepeat on finish
Play On AwakeAuto-play when object spawns
Priority0–255 (0 = most important, 255 = can be stolen)
AudioSource source = GetComponent<AudioSource>();
source.Play();
source.PlayOneShot(clip, 0.8f);
source.Stop();
source.Pause();
source.UnPause();
source.mute = true;

if (source.isPlaying) { }

Pitch Variation

public AudioSource source;
public float pitchMin = 0.9f;
public float pitchMax = 1.1f;

void PlayVaried() {
    source.pitch = Random.Range(pitchMin, pitchMax);
    source.Play();
}

3D Spatial Settings

SettingEffect
Spatial Blend0 (2D, no distance) → 1 (3D, full attenuation)
Doppler LevelPitch shift from relative velocity
SpreadStereo-to-mono spread angle
Volume RolloffLogarithmic / Linear / Custom curve
Min DistanceDistance where volume is max
Max DistanceDistance where volume reaches zero
source.spatialBlend = 1f;
source.dopplerLevel = 0.5f;
source.minDistance = 2f;
source.maxDistance = 50f;
source.rolloffMode = AudioRolloffMode.Logarithmic;

Unity Audio Mixer

Mixer Groups & Routing

Master Group
├── Music Group
├── SFX Group
│   ├── Environment
│   └── UI
├── Voice Group
└── Ambient Group

Snapshot Transitions

AudioMixer mixer;
mixer.SetFloat("MusicVolume", Mathf.Log10(volume) * 20);
mixer.SetFloat("SFXPitch", 1.2f);
mixer.SetFloat("LowpassCutoff", 500f);

AudioMixerSnapshot pauseSnapshot;
pauseSnapshot.TransitionTo(0.5f);    # 0.5s blend

Ducking & Effects

SFX plays → music compresses → music fades back after.

EffectUse Case
Lowpass/HighpassUnderwater, radio, distance
EchoLarge spaces, caverns
ReverbRooms, halls, outdoor
Chorus/FlangerMagic, alien, weird effects
CompressorDucking, loudness normalisation
DistortionRobot voices, overloaded speakers

FMOD (Overview)

Core Concepts

ConceptDescription
EventsPlayable audio assets (prefabs for sound)
ParametersFloat/Label values for real-time control
SnapshotsGlobal mixing states
BanksContainers of events (load/unload at runtime)
BusesMixer signal chains
VCAsVolume control groups

FMOD Studio Integration (Unity)

# Play one-shot
FMODUnity.RuntimeManager.PlayOneShot("event:/SFX/Explosion");

# Instance for control
FMOD.Studio.EventInstance instance =
    FMODUnity.RuntimeManager.CreateInstance("event:/Music/Battle");
instance.start();
instance.setParameterByName("Intensity", 0.7f);
instance.stop(FMOD.Studio.STOP_MODE.ALLOWFADEOUT);
instance.release();

Wwise (Overview)

Core Concepts

ConceptDescription
EventsTrigger sound playback
Game SyncsStates, Switches, RTPCs (parameters)
SoundBanksPackaged audio data
Game ObjectsUnity GameObjects registered in Wwise
ListenersUsually the camera
Auxiliary SendsSend to reverb/effects busses

Wwise Unity Integration

AkSoundEngine.PostEvent("Play_Explosion", gameObject);
AkSoundEngine.SetRTPCValue("PlayerHealth", health, gameObject);
AkSoundEngine.SetState("Location", "Cave");
AkSoundEngine.SetSwitch("Material", "Stone", gameObject);

Choosing an Audio System

SituationRecommendation
Small/rapid project, few soundsUnity Audio
Indie, moderate dynamic audioFMOD (free for indies)
AAA, complex mixing, many platformsWwise
In-editor workflow, quick iterationFMOD
Non-commercial / open sourceUnity Audio