Receber por email
← Voltar para o catálogo

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 Wwise effect plugin", "build an FMOD DSP", "implement custom game audio middleware plugin", "how do I write a Wwise sourc

14estrelas
Atualizado há 5 meses

Ver no GitHub ↗ Licença: Unlicense

Como adicionar

/plugin marketplace add kunitoki/sonic-skills

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/game-audio-guide/svg)](https://www.skillteca.com.br/skills/game-audio-guide)

Alerta por categoria

Receba novas skills de Design e Frontend toda segunda

1 email curto, só com as skills novas de Design e Frontend. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

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).
Compartilhar X LinkedIn