← Cheatsheets
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
| System | Best For | Complexity |
| Unity Audio | Simple 2D/3D sounds, quick prototyping | Low |
| FMOD | Indie to AA, strong Unity integration | Medium |
| Wwise | AAA, complex dynamic mixing | High |
| Unity + Mixer | Moderate projects, snapshot-based mixing | Low–Medium |
Unity Audio Basics
AudioSource Properties
| Property | Description |
| Clip | AudioClip to play |
| Volume | 0–1 output level |
| Pitch | Playback speed (0.5 = half, 2 = double) |
| Spatial Blend | 0 = 2D, 1 = 3D |
| Loop | Repeat on finish |
| Play On Awake | Auto-play when object spawns |
| Priority | 0–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
| Setting | Effect |
| Spatial Blend | 0 (2D, no distance) → 1 (3D, full attenuation) |
| Doppler Level | Pitch shift from relative velocity |
| Spread | Stereo-to-mono spread angle |
| Volume Rolloff | Logarithmic / Linear / Custom curve |
| Min Distance | Distance where volume is max |
| Max Distance | Distance 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.
| Effect | Use Case |
| Lowpass/Highpass | Underwater, radio, distance |
| Echo | Large spaces, caverns |
| Reverb | Rooms, halls, outdoor |
| Chorus/Flanger | Magic, alien, weird effects |
| Compressor | Ducking, loudness normalisation |
| Distortion | Robot voices, overloaded speakers |
FMOD (Overview)
Core Concepts
| Concept | Description |
| Events | Playable audio assets (prefabs for sound) |
| Parameters | Float/Label values for real-time control |
| Snapshots | Global mixing states |
| Banks | Containers of events (load/unload at runtime) |
| Buses | Mixer signal chains |
| VCAs | Volume 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
| Concept | Description |
| Events | Trigger sound playback |
| Game Syncs | States, Switches, RTPCs (parameters) |
| SoundBanks | Packaged audio data |
| Game Objects | Unity GameObjects registered in Wwise |
| Listeners | Usually the camera |
| Auxiliary Sends | Send 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
| Situation | Recommendation |
| Small/rapid project, few sounds | Unity Audio |
| Indie, moderate dynamic audio | FMOD (free for indies) |
| AAA, complex mixing, many platforms | Wwise |
| In-editor workflow, quick iteration | FMOD |
| Non-commercial / open source | Unity Audio |