Skip to content
Back to skills

Game Audio Guide

ASecurity

Guides implementation of custom Wwise or FMOD DSP plugins from scratch — effect, source, and mixer plugin types. Use when the user wants to create a new Wwise plugin, build an FMOD DSP effect, or implement a custom game audio middleware plugin. Trigger on phrases like "create a Wwise effect plugin", "build an FMOD DSP", "implement custom game audio middleware plugin", "how do I write a Wwise source plugin", or "set up an FMOD DSP description".

  • 18 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added May 26, 2026
development

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add kunitoki/sonic-skills --skill game-audio-guide --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Game Audio Guide?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Game Audio Guide
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kunitoki-game-audio-guide/badge)](https://www.skillsdirectory.com/skills/kunitoki-game-audio-guide)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: game-audio-guide
description: >
  Guides implementation of custom Wwise or FMOD DSP plugins from scratch — effect, source,
  and mixer plugin types. Use when the user wants to create a new Wwise plugin, build an FMOD
  DSP effect, or implement a custom game audio middleware plugin. Trigger on phrases like
  "create a Wwise effect plugin", "build an FMOD DSP", "implement custom game audio middleware
  plugin", "how do I write a Wwise source plugin", or "set up an FMOD DSP description".
---

# Game Audio Plugin Implementation Guide

Steps apply to both Wwise and FMOD unless noted.

## Step 1 — Choose middleware and plugin type

| Middleware | Effect plugin | Source plugin | Mixer plugin |
|------------|--------------|---------------|--------------|
| Wwise | `IAkInPlaceEffectPlugin` or `IAkOutOfPlaceEffectPlugin` | `IAkSourcePlugin` | `IAkMixerEffectPlugin` |
| FMOD | `FMOD_DSP_DESCRIPTION` (process callback) | `FMOD_DSP_DESCRIPTION` (generatetone or read) | `FMOD_DSP_DESCRIPTION` on a bus |

- Effect plugins modify an existing signal in place or out of place.
- Source plugins generate audio from scratch (synthesisers, procedural audio).
- Mixer plugins operate on a mix bus and see the summed signal from all inputs.
- Confirm the plugin type before writing any code — changing it later requires reworking the descriptor and callback signatures.

## Step 2 — Set up the plugin descriptor

**Wwise:**
- Declare an `AkPluginInfo` struct with your company ID, plugin ID, and plugin type.
- Implement `GetPluginInfo()` to return it from your plugin class.
- Provide a `CreateXxx` factory function and register it with `AK::SoundEngine::RegisterPlugin`.
- Implement a matching `AkPluginParamBase` subclass for parameter storage.

**FMOD:**
- Declare an `FMOD_DSP_DESCRIPTION` struct with name, version, channel counts, and all callback pointers.
- Fill `FMOD_DSP_PARAMETER_DESC` entries for every parameter the DSP exposes.
- Export a `FMODGetDSPDescription()` function (or pass the struct directly to `FMOD::System::createDSP`).
- Keep the description in static storage — FMOD holds a pointer to it for the lifetime of the DSP.

## Step 3 — Implement the audio callback

**Wwise (`Execute`):**
- Read channel count and frame count from `AkAudioBuffer` at runtime — never hardcode.
- Use `io_pBuffer->GetChannel(ch)` to access per-channel float pointers.
- Allocate during `Init` with the `AK::IAkPluginMemAlloc*` allocator; never allocate inside `Execute`.
- Return early if `uValidFrames == 0` to avoid processing silent tail unnecessarily.

**FMOD (`read` or `process`):**
- Use `inchannels` and `outchannels` from the callback signature — do not assume stereo.
- Allocate during create/reset with `dsp_state->functions->alloc` / `free`; never allocate inside `read` / `process`.
- Never block, lock, or perform I/O; FMOD calls this from a mixer thread with a hard deadline.
- Return `FMOD_OK` after producing valid output; return `FMOD_ERR_DSP_SILENCE` only when the DSP intentionally produces silence.

## Step 4 — Handle parameters

**Wwise RTPC binding:**
- Declare parameter IDs as an enum in your plugin header.
- Implement `SetParam` on your `AkPluginParamBase` subclass to copy incoming values into your struct.
- Wwise copies the parameter struct before calling `Execute` — read from the struct, not from `SetParam` directly.
- Clamp every RTPC value to its valid range before feeding it to DSP computation.

**FMOD parameter system:**
- Define one `FMOD_DSP_PARAMETER_DESC` per parameter in your `FMOD_DSP_DESCRIPTION`.
- Implement `setparameterfloat` / `getparameterfloat` callbacks to read/write from your plugin state.
- Use a fixed enum for parameter indices and keep it in the same order as `paramdesc`; do not rely on magic numbers.
- Use `FMOD_DSP_PARAMETER_DESC` with `FMOD_DSP_PARAMETER_TYPE_FLOAT` and the appropriate float mapping (`LINEAR`, `AUTO`, or piecewise linear) so Studio renders controls correctly.

## Step 5 — Register, test, and package

- Wwise: call `AK::SoundEngine::RegisterPlugin` during engine init before loading banks; ship a `.dll`/`.so` plus a `.xml` authoring descriptor.
- FMOD: pass the `FMOD_DSP_DESCRIPTION` to `createDSP` or load via `loadPlugin`; ship as `.plugin.dll`/`.so`.
- Unit-test with known input buffers outside the engine; cover channel counts 1, 2, and 6.
- Test bypass, all-zeros input, and extreme parameter values.
- Guard debug logging behind `#ifndef AK_OPTIMIZED` (Wwise) or equivalent release flag (FMOD).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.