Version 2.2.2
This special Beta version of Fabric introduces a number of new features, improvements and bug fixes.
New Features
Global Parameters
It is now possible to create different type of Global parameters that make it easier to control multiple components at the same time. The parameters available are:
Global Parameter:
The global parameter allows to create and set a global value that components can read using the RTP window.
A global parameter can also be driven by a volume meter.
To set a Global Parameter from the game you can either use the EventTrigger component or through the API,
Fabric.EventManager.Instance.SetGlobalParameter("ParameterName", 1.0f);
Global Switch:
Global switch parameter is used by the switch component only and it allows to switch multiple components from the game.
To set a Global Parameter from the game you can either use the EventTrigger component or through the API,
Fabric.EventManager.Instance.SetGlobalSwitch("globalSwitchName", "SwitchName");
Event Sequencer
This new feature is now available on every event and allows to create a sequence of events from existing events.
Audio Buses
The audio buses in Fabric provide a method of controlling the volume, pitch, setting Unity's audio mixer group and limiting the number of voices
Audio Asset Importer
The audio asset importer makes the process of importing audio files as well as audio clips into the Fabric hierarchy very easy.
Edit In Reaper
Fabric provides a number of features that makes the streamlines the work-flow when creating assets with Reaper. A new button is now available in the component menu bar that allows to open the Reaper project directly from an audio component that uses a wavfile that has been rendered from Reaper.
Improvements
Component virtualization
The component Virtualization has been improved greatly and allows you to define different types of behaviors such as:
- Resume: When the component turns virtual the position of the audio components are paused and then resumed when they turned physical
- Play From Start: All audio components will start from the beginning when they become physical
- Play From Elapsed Time: In this behavior Fabric tracks the time of the audio components whilst they are virtual and sets them at the elapsed time when they turn physical again.
Component Probability
It is now possible to set the probability value at the component level and not just at the event
Volume Threshold and Virtual Events
Volume Threshold
Fabric introduces a new volume threshold property which is used to determine if a component will be active. The volume threshold is used in the following situations:
- PlaySound event action: When a play event action is posted and the current volume of the component is less than the threshold then the component is not played
- Virtualization: If a component is playing and its volume drops below the threshold (through RTP or game input) then the component will turn virtual until its volume threshold is higher again.
Virtual Events
In order to reduce memory usage and performance it is possible to set the maximum number of virtual events that will be used by all components.
Audio Source Pool
The audio source pool now allows to define fade in/out times for when they are acquired by an audio component. This feature can smooth out clicks/pops during virtualization switching on components that have a large and dense amount of virtual events in close proximity.
A new audio source pool window has also been introduced that shows the component and audio source allocated by the pool as well as the total number of allocated voices.
Event Actions
A new set of EventActions have been added,
- PlayScheduled
- StopScheduled
- UnregisterGameObject
- SetGlobalParameter
- SetGlobalSwitch
External GroupComponent
Improvements have been made so when external group components are destroyed any components with a fade out will be respected before the group component is destroyed.
API Functions
The Event Manager introduces the following new API functions:
/// <summary>
/// Set Global Parameter
/// </summary>
/// <param name="parameterName"> Name of the parameter</param>
/// <param name="value"> Value to set</param>
/// <returns> True, False</returns>
public bool SetGlobalParameter(string parameterName, float value)
/// <summary>
/// Get Global parameter value
/// </summary>
/// <param name="parameterName"> Parameter to get value from</param>
/// <returns>Parameter value in float</returns>
public float GetGlobalParameter(string parameterName)
/// <summary>
/// Set Global Switch
/// </summary>
/// <param name="globalSwitchName"> Name of global switch </param>
/// <param name="switchName"> Name of Switch to set</param>
/// <returns>True, false</returns>
public bool SetGlobalSwitch(string globalSwitchName, string switchName)
/// <summary>
/// Set a Transition between two events, sample accurate
/// </summary>
/// <param name="transition"> Transition description class </param>
/// <param name="gameObject"> GameObject </param>
/// <returns>True, False</returns>
public bool SetTransition(TransitionData transition, GameObject gameObject)
The Transition data class is defined as follows:
public class TransitionData
{
/// <summary>
/// Name of the event to start transition
/// </summary>
public string _startEvent = "";
/// <summary>
/// Schedule start transition in secs
/// </summary>
public double _scheduleStart = 0.0;
/// <summary>
/// Name of the event to stop
/// </summary>
public string _stopEvent = "";
/// <summary>
/// Schedule stop transition in secs
/// </summary>
public double _scheduleStop = 0.0;
}
Complete Changelist
New Features
- Added BWF support in wavfile reader
- Added "Edit In Reaper" audio component menu option
- Added AudioAssetImporter
- Added new external group component that handles ref counting
- Added ReverbZoneMix component property
- Added Audio Bus feature with voice limiting support
- Added probability property in the component
- Added support to wavfile reader to parse SampleLoop chunks
- Added support to region audio component to read and handle wavfile regions- Added AudioSourcePool window
- Added new EventSequencer support
- Added new RegionAudioComponent
- Added optimization when checking virtualization is active
- Added option to not deal with OnDestroy when the application quits
- Added static Generic class with SetGameObjectActive (allows to disabled the calls to active flags)
- Added helper script to multi edit max instances property
- Added support so volume meter can set global parameter
- Added support so RTP parameters can have negative range values
- Added component volume threshold override support
- Added Global parameters
- Added new audio source pool
- Added parameter stretch/preserve support
- Added support so group components will wait for fade outs before they get unloaded
- Added new FastList
- Added the option to sync advance event action across all sequence instances
- Added ignoreUnloadUnusedAssets option in WwwAudioComponent
- Added virtualization beheviors (i.e. Resume, PlayFromElapsedTime)
- Added external group support to event editor
- Added support for components to expose their own RTP properties
- Added GetEventInfo function
- Added ability to set transitions between events through code
Bug fixes
- Fix audio bus not saving on a prefab when clicking the apply button
- Fix for fade in/out issues when calling events on the same frame (BIG CHANGE)
- Fixed issue whtn calling stopping components while fade out is in progress
- Fixed audio component delay not working on second play
- Fixed AudioBusWindow null error
- Fixed null ref error with RTP global parameters
- Fixed compact mixer group null reference error
- Fixed RTP manager not reporting handled event actions
- Fixed dynamic audio clip loading error
- Fixed RTP and Previewer window not refreshing correctly
- Fixed fade out resetting when playing
- Fixed virtualization not working if volume threshold was 0
- Fixed PlaySound event action not working when calling it multiple times (only with stealing behavior to oldest)
- Fixed null reference error in switch component
- Fixed volume threshold not working with virtualization
- Fixed resize allocation in audio source pool
- Fixed scroll view in audio source pool UIs- Fixed NumLoops issue when not loading a loop region
- Fixed menu bar option to show a child component only in Fabric manager
- Fixed virtualization null reference error
- Fixed EventSequence not showing when the event name is set to _UnSet_
- Fixed issue when updating the component _isComponentActive flag
- Fixed side chain issue
- Fixed EventNotification issues
- Fixed virtualization issues
- Fixed recursive init with external group component option enabled
- Fixed random component weight options not serialised
- Fixed issue when trying to play audio component without a valid audio clip
- Fixed issue with virtualization ignoring max distance value
- Fix for component virtualization not working correctly
- Fixed ComponentHolder not storing the main component instance
- Fixed a number of null referene errors
- Fixed fade issue (using wrong property values and adding fade times twice)
- Fixed Timeline window layout issues
- Fixed WWWAudioComponent not updating its audio clip path correctly
- Exposed _dsTimeTriggered property
- Fixed audio clip resource memory leak
- Fixed OnFinished event notification firing immediately with WwwAudioComponent
- Potential null reference fix to Sequence Component
Changes and performance improvements
- Enabled prefab play mode persistence mode
- Allow posting SetVolumeProperty/SetPitchProperty event actions from event trigger
- Remove multiple calls to SetDirty on the languages window
- Removed debug log call when event name has no listeners
- Added optimization to avoid multiple calls to UpdateProperties function on the same update
- Changed Whats New to point to the online manual
- Exposed num of virtualized event instances in the UI
- Component virtualization supports volume threshold as well
- Moved OnApplicationPause support from audio component to fabric manager
- Dynamic mixer performance improvements
- Removed Modular Synth dependencies
- Removed allocation when using virtualization
- Only activate debug log in the editor