audio-technology-and-innovation
Creating Custom Plugins for Fmod and Wwise to Extend Functionality
Table of Contents
Custom audio plugins extend the power of middleware engines like FMOD and Wwise, enabling developers to build sound experiences that go far beyond stock capabilities. Whether integrating a new hardware codec, crafting a proprietary reverb, or synchronizing audio to a unique gameplay mechanic, custom plugins allow you to inject project-specific logic directly into the audio pipeline. This article provides a comprehensive guide to creating such plugins, covering architecture, development workflows, testing strategies, and real-world deployment. By the end, you will have a clear roadmap for building robust plugins that enhance your interactive audio projects.
Understanding FMOD and Wwise Plugin Architectures
Both FMOD and Wwise offer extensible plugin frameworks, but each has a distinct approach. FMOD’s plugin system is built around DSP plugins (effects) and source plugins (generators), while Wwise uses the Sound Engine Plugin API with categories like Effect, Source, Sink, and Meter. Understanding these differences is crucial before writing any code.
FMOD Plugin Types
- DSP Plugins – Process audio streams in real time (e.g., custom filters, compressors, spatializers).
- Codec Plugins – Enable support for proprietary audio formats (e.g., custom encryption, lossless compression).
- Geometry Plugins – Custom collision geometry for the FMOD Studio API (rarely used).
Each FMOD plugin must expose a FMOD_DSP_DESCRIPTION struct and implement callback functions for creation, processing, and shutdown. The SDK provides a template project to start with.
Wwise Plugin Types
- Effect Plugins – Audio processing effects applied to a bus or actor-mixer.
- Source Plugins – Custom sound generators (e.g., granular synthesis, procedural audio).
- Sink Plugins – Route audio to non-standard hardware or network streams.
- Meter Plugins – Analyze audio data (e.g., spectrum, loudness).
Wwise plugins use the AK::IAkPlugin interface and require both a DSP component and a parameter node for the Wwise Authoring tool. The Wwise SDK includes a plugin wizard to generate skeleton projects.
Prerequisites and Toolchain Setup
Before diving into code, set up your development environment. Both SDKs require a C++ compiler and a modern IDE. Here are the essential steps.
- Download the SDKs: Obtain the latest FMOD Engine API from fmod.com and the Wwise SDK from the Audiokinetic website (requires a free account).
- Choose an IDE: Visual Studio (Windows) or Xcode (macOS) are recommended. The SDKs ship with Visual Studio solution templates.
- Configure Include and Library Paths: Point your project to the SDK’s
includeandlibdirectories. For FMOD, link againstfmod_vc; for Wwise, link against the appropriate AkSoundEngine library. - Understand Platform Targets: Plugins are platform-specific (Windows, macOS, iOS, Android, etc.). Build a separate plugin binary for each target using the correct toolchain.
Both SDKs offer sample plugins in their respective examples folders. Study these before writing your own.
Step-by-Step Plugin Development
Creating an FMOD DSP Plugin
We will walk through building a simple “pitch shifter” effect for FMOD. The process applies to any DSP plugin.
- Use the FMOD template: Locate the DSP plugin template in the SDK (e.g.,
examples/dsp/). Copy it to a new folder and rename. - Define the DSP description: Fill in the
FMOD_DSP_DESCRIPTIONstruct with your plugin’s name, version, and callback pointers (create, release, read, setparameter, getparameter). - Implement the
readcallback: This is where the audio processing happens. For a pitch shifter, use a delay line with interpolation. The SDK provides utility functions likeFMOD_DSP_ReadDatato manage input/output buffers. - Register the plugin: In your game or audio manager, call
FMOD::System::createDSPand pass the description. Then attach the DSP to a channel group or bus.
Creating a Wwise Effect Plugin
Let’s create a similar pitch shift effect for Wwise.
- Launch the Wwise Plugin Wizard: Open the Audiokinetic Launcher, select “Create New Plugin”, and choose “Effect”. Fill in the name and company.
- Implement the DSP interface: The wizard generates a class that inherits from
AK::IAkPluginEffect. OverrideInit(),Term(),Reset(), andExecute(). InExecute(), apply the pitch shift algorithm on the input buffer. - Define parameters: Create an XML parameter file and a corresponding struct. Use the
PropertySetsystem to allow Wwise authoring tool users to adjust pitch, wet/dry mix, etc. - Provide a custom UI (optional): Wwise supports a WinForms-based UI for the Authoring tool. You can design sliders and graphs with the Audiokinetic UI toolkit.
Handling Real-Time Parameters
Both engines allow parameters to change during playback. For FMOD, use the read callback’s parameter query; for Wwise, access the parameter values through AK::IAkPluginParam. Always apply parameter changes in a thread-safe manner, using atomic floats or double-buffering to avoid clicks.
Advanced Plugin Features
Multi-Platform Compatibility
Write platform-agnostic code by using the engine’s abstraction layers. FMOD provides FMOD_OS macros; Wwise uses AkPlatform types. When using SIMD intrinsics (e.g., SSE on x86, NEON on ARM), provide fallback paths for platforms without hardware acceleration.
Preset Systems
Enable user presets by saving plugin parameter states as JSON or binary blobs. FMOD allows storing presets in the FMOD_DSP_DESCRIPTION as default parameters; Wwise presets are handled through the Authoring tool’s preset mechanism.
Custom Sink Plugins in Wwise
For streaming audio over a network or to a proprietary device, implement a Sink plugin. Override AK::IAkSinkPlugin methods like Open(), Close(), WriteBuffer(). This is advanced but opens possibilities for multiplayer voice chat or LED syncing.
Testing and Debugging
Both SDKs provide tools to validate plugins without a full game integration.
- FMOD: Use the FMOD Studio API test tool or the standalone FMOD
Designerapplication to load your DSP plugin and test with audio files. Enable logging to catch errors (FMOD_DEBUG_MODE_TTY). - Wwise: The Wwise Authoring tool can load effect plugins directly. Create a new SoundBank with a test sound, apply your effect, and audition it. Use the Wwise Profiler to monitor CPU usage and memory.
- Unit testing: Write small C++ test harnesses that instantiate your plugin’s DSP class, feed synthetic audio, and verify output. This catches regressions early.
Pay special attention to edge cases: zero-length buffers, extremely high sample rates, and parameter updates during silence. A robust plugin handles all scenarios without crashing or producing artifacts.
Deployment and Integration
Once compiled, you need to deploy the plugin so that the audio engine can discover it.
FMOD Deployment
- Copy the plugin DLL (or .dylib/.so) to the same directory as the FMOD runtime library.
- In code, call
FMOD::System::loadPlugin()with the full path. - Alternatively, register the plugin via the low-level system
createDSPmethod if you have the description pointer.
Wwise Deployment
- Place the plugin binary in the
Pluginsfolder of your game’s Wwise project. - For runtime, the plugin must be linked into the final executable or loaded dynamically via
AK::SoundEngine::RegisterPlugin(). - Remember to include the plugin’s parameter XML and UI DLL in the Authoring tool folder if you want to edit it in Wwise.
Always test on target platforms early—especially consoles, where development kits have stricter memory and threading constraints.
Benefits and Use Cases
Custom plugins unlock capabilities beyond stock effects. Here are compelling reasons to invest in plugin development:
- Proprietary audio codecs: Wrap an encrypted audio format or a low-latency codec like Opus.
- Hardware integration: Send audio to external tactile transducers, LED arrays, or motion platforms.
- Procedural audio systems: Create a wind simulation that responds to in-game physics data via a source plugin.
- Adaptive mixing: Build a compressor that reads telemetry data (e.g., player health) to duck music dynamically.
- Custom spatialization: Implement HRTF tailored to specific headphones or 6DOF setups.
- Performance optimization: Replace generic effects with hand-optimized SIMD versions that reduce CPU on mobile devices.
In addition, a well-designed plugin can be licensed or sold on marketplaces like the Audiokinetic Plugin Store, providing a revenue stream beyond the core game project.
Conclusion
Creating custom plugins for FMOD and Wwise is a high-impact skill for audio programmers. It requires a solid grasp of C++, real-time audio processing, and the specific engine APIs. By following the architecture overview, development steps, and testing practices outlined here, you can extend either middleware to precisely match your project’s audio needs. Start with a simple effect, iterate with profiling, and soon you’ll have a library of custom audio tools that set your game apart.
For further reading, consult the official documentation: FMOD Plugin Development Guide and Wwise Plugin Creation Guide. Community forums like the Audiokinetic Community and FMOD Discord also offer valuable insights from experienced developers.