# 1. Welcome to the FMOD Engine | New in FMOD Engine 2.01

## What's New in 2.01?

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

### Performance improvements

With every release of FMOD performance is kept in mind, however particularly with this release a strong focus has been made to improve performance across several key areas.

- Mixing
- Resampling
- FSB Vorbis
- Convolution reverb
- Multiband EQ

This process involved improving existing and adding new hardware specific optimization for SSE, AVX, AVX2, AVX-512 and Neon instruction sets which cover all platforms FMOD currently targets.

- Synthetic benchmarks for Vorbis playback with resampling for mono, stereo, quad, 5.1 and 7.1 showed performance increase of 2-2.5x.
- Synthetic benchmarks for Multiband EQ showed performance increase of 2-3x for stereo and higher channel counts.
- Replay of commands from existing games showed real world improvements of 20% for a mix of workloads.

### Thread attributes

Prior to this release setting thread related attributes such as priority, stack size and thread affinity was split over several API locations (some platform specific).
Now we have a unified API for controlling all these values in a single place accessed via Thread_SetAttributes.

In 2.0 you could override the stack size for the stream, non-blocking and mixer threads using `FMOD_ADVANCEDSETTINGS::stackSizeStream`, `FMOD_ADVANCEDSETTINGS::stackSizeNonBlocking` and `FMOD_ADVANCEDSETTINGS::stackSizeMixer` respectively. These have all been removed in favor of using the new set attributes function as follows:

    FMOD::Thread_SetAttributes(FMOD_THREAD_TYPE_STREAM,      FMOD_THREAD_AFFINITY_GROUP_DEFAULT, FMOD_THREAD_PRIORITY_DEFAULT, stackSizeStream);
    FMOD::Thread_SetAttributes(FMOD_THREAD_TYPE_NONBLOCKING, FMOD_THREAD_AFFINITY_GROUP_DEFAULT, FMOD_THREAD_PRIORITY_DEFAULT, stackSizeNonBlocking);
    FMOD::Thread_SetAttributes(FMOD_THREAD_TYPE_MIXER,       FMOD_THREAD_AFFINITY_GROUP_DEFAULT, FMOD_THREAD_PRIORITY_DEFAULT, stackSizeMixer);

In 2.0 you could override the affinity for all threads in a platform specific way, e.g. `FMOD_UWP_SetThreadAffinity` or `FMOD_Android_SetThreadAffinity`. These have all been removed in favor of using the new set attributes function as follows:

    FMOD::Thread_SetAttributes(FMOD_THREAD_TYPE_MIXER, FMOD_THREAD_AFFINITY_CORE_5);
    FMOD::Thread_SetAttributes(FMOD_THREAD_TYPE_STREAM, FMOD_THREAD_AFFINITY_CORE_3);

Additionally it's now possible to specify the thread priority for all FMOD threads using the same API.

### Minor API differences

- Removed the deprecated `FMOD_ADVANCEDSETTINGS::commandQueueSize` field
- Renamed `FMOD_OUTPUT_DESCRIPTION::polling` to FMOD_OUTPUT_DESCRIPTION::method
- Modified Memory_Initialize so that the `userrealloc` callback is now optional
- Modified Studio::System::getListenerAttributes / Studio::System::setListenerAttributes to accept separate `attenuationposition`
- Added FMOD_STUDIO_PARAMETER_AUTOMATIC_SPEED_ABSOLUTE
- Added FMOD_STUDIO_EVENT_CALLBACK_START_EVENT_COMMAND

## What's new since 2.00 initial release?

### Improved CPU tracking

It is now possible to track both inclusive and exclusive CPU usage costs for the Studio update thread via Studio::Bus::getCPUUsage and Studio::EventInstance::getCPUUsage.

### Improved memory tracking

It is now possible to track the instances and sample data memory usage for each System, Bus and EventInstance via Studio::System::getMemoryUsage, Studio::Bus::getCPUUsage and Studio::EventInstance::getCPUUsage respectively.

### Stadia platform

Official support for the Stadia platform has been added.

### Minor API differences

- Added FMOD_OUTPUTTYPE_AAUDIO output mode for newer Android devices
- Added FMOD_STUDIO_EVENT_PROPERTY_COOLDOWN to allow per-event instance cool down override
- Added FMOD_SPEAKER_NONE to identify the absence of a speaker
- Added FMOD_DSP_CHANNELMIX_OUTPUT_CH0 ... FMOD_DSP_CHANNELMIX_OUTPUT_CH31 to support re-routing input channels in the Channel Mix DSP
- Added FMOD_DSP_CHANNELMIX_OUTPUT_ALL7POINT1POINT4 to support 7.1.4 output in the Channel Mix DSP
- Modified FMOD_ADVANCEDSETTINGS::ASIOSpeakerList to accept FMOD_SPEAKER_NONE for supporting high channel count devices