Skip to content
Development
Skill

/game-audio-guide

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

From plugin
sonic-skills
2018 skills
Install
$ npx -y skills add kunitoki/sonic-skills --skill game-audio-guide --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/game-audio-guide

Context preview

The summary Claude sees to decide when to auto-load this skill.

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

SKILL.md

game-audio-guide.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).
Read more
Ships withsonic-skills

Precision audio-engineering skills for AI agents. Sonic Skills is a curated pack of Markdown skills for reviewing, debugging, explaining, and implementing audio software.

Get the whole plugin
Stats
20
Stars
1
Forks
Maintained
Maintenance
Shell
Language
Unlicense
License
4mo ago
Last commit
4mo ago
Created

Repo: kunitoki/sonic-skills

Other skills on sonic-skills.