FMOD Engine User Manual 2.03

1. Welcome to the FMOD Engine | New in FMOD Engine 2.02

What's New in 2.02?

This section describes the major features introduced in the 2.02 release. See the Detailed Revision History for information regarding each patch release.

Minimum / Maximum Distance

Events (rather than spatializer DSPs) now encapsulate the functionality of minimum and maximum distance.

As a result, Studio::EventDescription::getMinimumDistance and Studio::EventDescription::getMaximumDistance have been removed. Those APIs which returned values reported by FMOD spatializers have been replaced with the new Studio::EventDescription::getMinMaxDistance. The new API returns the initial values specified for minimum and maximum distance as set in FMOD Studio. If the minimum or maximum distance have been automated you can query the runtime value per EventInstance using Studio::EventInstance::getMinMaxDistance.

DSP plugins interested in receiving the new Event level min/max distance information can now add a data parameter of data type FMOD_DSP_PARAMETER_ATTENUATION_RANGE. For compatibility with the old behavior of each spatializer DSP having its own min/max distance, FMOD_DSP_TYPE_PAN and FMOD_DSP_TYPE_OBJECTPAN now have override properties that ignore the Event level values. Resonance Audio has been updated to use the new method, so if the old method is desired please use the Resonance plugin from v2.01.xx.

Using the new Event level min/max we are able to provide a new built-in parameter, FMOD_STUDIO_PARAMETER_AUTOMATIC_DISTANCE_NORMALIZED, that presents the range from min to max as 0 to 1.

Labeled Parameters

Labeled or enumerated parameters have existed in FMOD Studio for a while, however until now they have been unavailable in the API.

With this release we have introduced a way to query all of the labels associated with one of these parameters. You can fetch labels for global parameters via Studio::System::getParameterLabelByID or Studio::System::getParameterLabelByName and you can fetch labels for local parameter via Studio::EventDescription::getParameterLabelByID, Studio::EventDescription::getParameterLabelByName or Studio::EventDescription::getParameterLabelByIndex. The main purpose of this API is to expose these strings to your level editor for ease of value selection. We recommend still storing the related index in you level data for best performance at runtime when setting enumerated parameters.

Despite this advice, we also provide some new APIs for setting enumerated parameter with their string value. For global parameters you can use Studio::System::setParameterByIDWithLabel or Studio::System::setParameterByNameWithLabel to lookup the parameter by ID or name respectively then set the value string. For local parameters you can use Studio::EventInstance::setParameterByIDWithLabel or Studio::EventInstance::setParameterByNameWithLabel to lookup the parameter by ID or name respectively then set the value string.

Ports

To accompany the addition of Ports into the FMOD Studio tool an additional API was necessary for setting the port index. In the Core API, System::attachChannelGroupToPort would accept both a port type and an index in order to disambiguate between multiple ports targeting the same device type, for example controller speakers. In the Studio API the port type is set on a bus at design time, for ports that require disambiguation you can now use Studio::Bus::setPortIndex to provide that value and Studio::Bus::getPortIndex to query it back.

With this change we have now unified all port types previously spread over platform specific APIs in the form of FMOD_<PLATFORM>_PORT_TYPE. Now you can find the complete set in the FMOD_PORT_TYPE enumeration with information of availability in each platforms getting started guide.

Platform Notes

API Differences

APIs that have changed with this release that haven't been called out explicitly above.

Studio API

Core API

Output Plugin API

Codec Plugin API

FSBank API

What's new since 2.01 initial release?

This section describes any major changes that occurred in 2.01.xx leading up to the release of 2.02.

Platforms

API differences

APIs that have changed with this release that haven't been called out explicitly above.

Studio API

Core API