> For the complete documentation index, see [llms.txt](https://sonity.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sonity.gitbook.io/docs/soundmanager/soundmanager-functions.md).

# SoundManager Functions

Reference of all the functions accessible in SoundManager.Instance

The [SoundManager](/docs/soundmanager.md) is the master object which is used to play sounds and manage global settings.\
An instance in the scene is required to play [SoundEvents](/docs/soundevent.md).\
You can either add the pre-made prefab called “SoundManager” or add the “Sonity - Sound Manager” component to an empty GameObject in the scene.

Example code:

```csharp
using UnityEngine;
using Sonity;

public class PlayStopExample : MonoBehaviour {

    public SoundEvent soundEvent;

    void PlayExample() {
        // Plays the SoundEvent at the position of the transform
        SoundManager.Instance.Play(soundEvent, transform);
    }

    void StopExample() {
        // Stops the SoundEvent playing at the transform
        SoundManager.Instance.Stop(soundEvent, transform);
    }
}
```

### Play

{% code fullWidth="false" %}

```csharp
// Plays the SoundEvent at the position of the owner Transform
public void Play(SoundEvent soundEvent, Transform owner);
public void Play(SoundEvent soundEvent, Transform owner, SoundTag localSoundTag);
public void Play(SoundEvent soundEvent, Transform owner, params SoundParameterInternals[] soundParameterInternals);
public void Play(SoundEvent soundEvent, Transform owner, SoundTag localSoundTag, params SoundParameterInternals[] soundParameterInternals);
```

{% endcode %}

<table><thead><tr><th width="219.6500244140625">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to play</td></tr><tr><td>owner</td><td>The owner Transform</td></tr><tr><td>localSoundTag</td><td>The <a href="/docs/soundtag.md">SoundTag</a> which will determine the Local <a href="/docs/soundtag.md">SoundTag</a> of the <a href="/docs/soundevent.md">SoundEvent</a></td></tr><tr><td>soundParameterInternals</td><td>For example <a href="/docs/soundparameter.md">SoundParameterVolumeDecibel</a> is used to modify how the SoundEvent is played</td></tr></tbody></table>

### PlayAtPosition

```csharp
// Plays the SoundEvent at the Vector3 position with another Transform as the owner
public void PlayAtPosition(SoundEvent soundEvent, Transform owner, Vector3 position);
public void PlayAtPosition(SoundEvent soundEvent, Transform owner, Vector3 position, SoundTag localSoundTag);
public void PlayAtPosition(SoundEvent soundEvent, Transform owner, Vector3 position, params SoundParameterInternals[] soundParameterInternals);
public void PlayAtPosition(SoundEvent soundEvent, Transform owner, Vector3 position, SoundTag localSoundTag, params SoundParameterInternals[] soundParameterInternals);

// Plays the SoundEvent at the Transform position with another Transform as the owner
public void PlayAtPosition(SoundEvent soundEvent, Transform owner, Transform position);
public void PlayAtPosition(SoundEvent soundEvent, Transform owner, Transform position, SoundTag localSoundTag);
public void PlayAtPosition(SoundEvent soundEvent, Transform owner, Transform position, params SoundParameterInternals[] soundParameterInternals);
public void PlayAtPosition(SoundEvent soundEvent, Transform owner, Transform position, SoundTag localSoundTag, params SoundParameterInternals[] soundParameterInternals);
```

<table><thead><tr><th width="213.11669921875">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to play</td></tr><tr><td>owner</td><td>The owner Transform</td></tr><tr><td>position</td><td>The Transform or Vector3 where is should play at (Transform can follow position)</td></tr><tr><td>localSoundTag</td><td>The <a href="/docs/soundtag.md">SoundTag</a> which will determine the Local <a href="/docs/soundtag.md">SoundTag</a> of the <a href="/docs/soundevent.md">SoundEvent</a></td></tr><tr><td>soundParameterInternals</td><td>For example <a href="/docs/soundparameter.md">SoundParameterVolumeDecibel</a> is used to modify how the <a href="/docs/soundevent.md">SoundEvent</a> is played</td></tr></tbody></table>

### Stop

```csharp
// Stops the SoundEvent at the owner Transform
public void Stop(SoundEvent soundEvent, Transform owner, bool allowFadeOut = true);

// Stops the SoundEvent at the position Transform
public void StopAtPosition(SoundEvent soundEvent, Transform position, bool allowFadeOut = true);

// Stops all the SoundEvents at the owner Transform
public void StopAllAtOwner(Transform owner, bool allowFadeOut = true);

// Stops the SoundEvent everywhere
public void StopEverywhere(SoundEvent soundEvent, bool allowFadeOut = true);

// Stops all SoundEvents
public void StopEverything(bool allowFadeOut = true);
```

<table><thead><tr><th width="142.06671142578125"> Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to stop</td></tr><tr><td>owner</td><td>The owner Transform</td></tr><tr><td>position</td><td>The position Transform</td></tr><tr><td>allowFadeOut</td><td>If the <a href="/docs/soundevent.md">SoundEvent</a> should be allowed to fade out. Otherwise it is going to be stopped immediately</td></tr></tbody></table>

### Pause and Unpause

```csharp
// Pauses/unpauses the SoundEvent with the owner Transform locally
public void Pause(SoundEvent soundEvent, Transform owner, bool forcePause = false);
public void Unpause(SoundEvent soundEvent, Transform owner);

// Pauses/unpauses all SoundEvents with the owner Transform locally
public void PauseAllAtOwner(Transform owner, bool forcePause = false);
public void UnpauseAllAtOwner(Transform owner);

// Pauses/unpauses the SoundEvent everywhere locally
public void PauseEverywhere(SoundEvent soundEvent, bool forcePause = false);
public void UnpauseEverywhere(SoundEvent soundEvent);

// Pauses/unpauses the SoundEvent everywhere locally
public void PauseEverything(bool forcePause = false);
public void UnpauseEverything();
```

<table><thead><tr><th width="124.26666259765625">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to pause/unpause</td></tr><tr><td>owner</td><td>The owner Transform</td></tr><tr><td>forcePause</td><td>If the <a href="/docs/soundevent.md">SoundEvent</a> should be paused even if it is set to "Ignore Local Pause"</td></tr></tbody></table>

### Get State, Length, Time and Contains Loop

```csharp
// If playing it returns SoundEventState.Playing
// If paused either locally or globally it returns SoundEventState.Paused
// If not playing, but it is delayed it returns SoundEventState.Delayed
// If not playing and it is not delayed it returns SoundEventState.NotPlaying
// If the SoundEvent or Transform is null it returns SoundEventState.NotPlaying
public SoundEventState GetSoundEventState(SoundEvent soundEvent, Transform owner);

// Returns the length (in seconds) of the AudioClip in the last played AudioSource
// Returns Mathf.Infinity if the InstanceSoundEvent is not playing
// Returns Mathf.Infinity if the SoundEvent or Transform is null
// pitchSpeed determines if it should be scaled by pitch. E.g. -12 semitones will be twice as long
public float GetLastPlayedClipLength(SoundEvent soundEvent, Transform owner, bool pitchSpeed);

// Returns the current time (in seconds) of the AudioClip in the last played AudioSource
// Returns 0 if the InstanceSoundEvent is not playing
// Returns 0 if the SoundEvent or Transform is null
// pitchSpeed determines if it should be scaled by pitch. E.g. -12 semitones will be twice as long
public float GetLastPlayedClipTimeSeconds(SoundEvent soundEvent, Transform owner, bool pitchSpeed);

// Returns the current time (in range 0 to 1) of the AudioClip in the last played AudioSource
// Returns 0 if the InstanceSoundEvent is not playing
// Returns 0 if the SoundEvent or Transform is null
public float GetLastPlayedClipTimeRatio(SoundEvent soundEvent, Transform owner);

// Returns the max length (in seconds) of the SoundEvent (calculated from the longest audioClip)
// Is scaled by the pitch of the SoundEvent and SoundContainer
// Does not take into account random, intensity or parameter pitch
// Returns 0 if the SoundEvent is null
public float GetMaxLength(SoundEvent soundEvent);

// Returns the time (in seconds) since the SoundEvent was played
// Is calculated using the time scale selected in the SoundManager
// Returns 0 if the InstanceSoundEvent is not playing
// Returns 0 if the SoundEvent or Transform is null
public float GetTimePlayed(SoundEvent soundEvent, Transform owner);

// Returns if any SoundContainers in the SoundEvent is set to looping
// Returns false if the SoundEvent is null
public bool GetContainsLoop(SoundEvent soundEvent);

// Returns the Transform of the SoundManager
public Transform GetSoundManagerTransform();
```

<table><thead><tr><th width="124.26666259765625">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to get length or time from</td></tr><tr><td>owner</td><td>The owner Transform</td></tr><tr><td>pitchSpeed</td><td>Determines if it should be scaled by pitch. E.g. -12 semitones will be twice as long</td></tr></tbody></table>

### Get Spectrum Data

```csharp
// Provides a block of spectrum data from AudioSources
public void GetSpectrumData(SoundEvent soundEvent, Transform owner, ref float[] samples, int channel, FFTWindow window, SpectrumDataFrom spectrumDataFrom);
```

<table><thead><tr><th width="170.81671142578125">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to get the spectrum data from</td></tr><tr><td>owner</td><td>The owner Transform</td></tr><tr><td>samples</td><td>The array to populate with audio samples. Its length must be a power of 2</td></tr><tr><td>channel</td><td>The channel to sample from</td></tr><tr><td>window</td><td>The FFTWindow type to use when sampling</td></tr><tr><td>spectrumDataFrom</td><td>Where to get the spectrum data from</td></tr></tbody></table>

### Get Last Played AudioSource

```csharp
// Returns the last played AudioSource
// Note that the AudioSource might be stolen or reused for different Voices over time
public AudioSource GetLastPlayedAudioSource(SoundEvent soundEvent, Transform owner);
```

<table><thead><tr><th width="119.36669921875">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to get the AudioSource from</td></tr><tr><td>owner</td><td>The owner Transform</td></tr></tbody></table>

### Load or Unload Audio Data

```csharp
// Loads the audio data of any AudioClips assigned to the SoundContainers of the SoundEvent
public void LoadAudioData(SoundEvent soundEvent);

// Unloads the audio data of any AudioClips assigned to the SoundContainers of the SoundEvent
public void UnloadAudioData(SoundEvent soundEvent);
```

### UI

Useful if you want to play [SoundEvents](/docs/soundevent.md) without passing an owner.

#### UI Play

```csharp
// Plays the SoundEvent with the UI Transform as owner
// Useful to play e.g. UI or other 2D sounds without having to pass a Transform
// To make the sound 2D you still need to disable distance and set spatial blend to 0 in the SoundContainer
public void UIPlay(SoundEvent soundEvent);
public void UIPlay(SoundEvent soundEvent, SoundTag localSoundTag);
public void UIPlay(SoundEvent soundEvent, params SoundParameterInternals[] soundParameterInternals);
public void UIPlay(SoundEvent soundEvent, SoundTag localSoundTag, params SoundParameterInternals[] soundParameterInternals);

// Plays the SoundEvent at the position with the UI Transform as owner (Useful for UnityEvents because it only has one parameter)
public void UIPlayAtPosition(Vector3 position);
public void UIPlayAtPosition(Transform position);
```

<table><thead><tr><th width="219.6500244140625">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to play</td></tr><tr><td>localSoundTag</td><td>The <a href="/docs/soundtag.md">SoundTag</a> which will determine the Local <a href="/docs/soundtag.md">SoundTag</a> of the <a href="/docs/soundevent.md">SoundEvent</a></td></tr><tr><td>soundParameterInternals</td><td>For example <a href="/docs/soundparameter.md">SoundParameterVolumeDecibel</a> is used to modify how the <a href="/docs/soundevent.md">SoundEvent</a> is played</td></tr><tr><td>position</td><td>The Transform or Vector3 where is should play at (Transform can follow position)</td></tr></tbody></table>

#### UI Stop

```csharp
// Stops the SoundEvent at the UI Transform
public void UIStop(SoundEvent soundEvent, bool allowFadeOut = true);

// Stops all SoundEvents at the UI Transform
public void UIStopAll(Transform owner, bool allowFadeOut = true);
```

<table><thead><tr><th width="130.63336181640625">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to stop</td></tr><tr><td>allowFadeOut</td><td>If the <a href="/docs/soundevent.md">SoundEvent</a> should be allowed to fade out. Otherwise it is going to be stopped immediately</td></tr></tbody></table>

#### UI Pause and Unpause

```csharp
// Pauses/unpauses the SoundEvent at the UI Transform locally
public void UIPause(SoundEvent soundEvent, bool forcePause = false);
public void UIUnpause(SoundEvent soundEvent);

// Pauses/unpauses all SoundEvents at the UI Transform locally
public void UIPauseAll(bool forcePause = false);
public void UIUnpauseAll();
```

<table><thead><tr><th width="117.56671142578125">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to pause/unpause</td></tr><tr><td>forcePause</td><td>If the <a href="/docs/soundevent.md">SoundEvent</a> should be paused even if it is set to "Ignore Local Pause"</td></tr></tbody></table>

#### UI Get State, Length and Time

```csharp
// Uses the UI owner Transform
// If playing it returns SoundEventState.Playing
// If paused either locally or globally it returns SoundEventState.Paused
// If not playing, but it is delayed it returns SoundEventState.Delayed
// If not playing and it is not delayed it returns SoundEventState.NotPlaying
// If the SoundEvent or Transform is null it returns SoundEventState.NotPlaying
public SoundEventState UIGetSoundEventState(SoundEvent soundEvent);

// Uses the UI owner Transform
// Returns the length (in seconds) of the AudioClip in the last played AudioSource
// Returns Mathf.Infinity if the InstanceSoundEvent is not playing
// Returns Mathf.Infinity if the SoundEvent or Transform is null
// pitchSpeed determines if it should be scaled by pitch. E.g. -12 semitones will be twice as long
public float UIGetLastPlayedClipLength(SoundEvent soundEvent, bool pitchSpeed);

// Uses the UI owner Transform
// Returns the current time (in seconds) of the AudioClip in the last played AudioSource
// Returns 0 if the InstanceSoundEvent is not playing
// Returns 0 if the SoundEvent or Transform is null
// pitchSpeed determines if it should be scaled by pitch. E.g. -12 semitones will be twice as long
public float UIGetLastPlayedClipTimeSeconds(SoundEvent soundEvent, bool pitchSpeed);

// Uses the UI owner Transform
// Returns the current time (in range 0 to 1) of the AudioClip in the last played AudioSource
// Returns 0 if the InstanceSoundEvent is not playing
// Returns 0 if the SoundEvent or Transform is null
public float UIGetLastPlayedClipTimeRatio(SoundEvent soundEvent);

// Uses the UI owner Transform
// Returns the time (in seconds) since the SoundEvent was played
// Is calculated using the time scale selected in the SoundManager
// Returns 0 if the InstanceSoundEvent is not playing
// Returns 0 if the SoundEvent or Transform is null
public float UIGetTimePlayed(SoundEvent soundEvent);

// Returns the owner Transform used by UIPlay() etc
public Transform UIGetTransform();
```

<table><thead><tr><th width="128.183349609375">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to get length or time from</td></tr><tr><td>pitchSpeed</td><td>Determines if it should be scaled by pitch. E.g. -12 semitones will be twice as long</td></tr></tbody></table>

### Music

Useful if you want to play music with automatic stopping of the old music when playing a new song.

#### Music Play

```csharp
// Plays the SoundEvent at the SoundManagers music Transform
public void MusicPlay(SoundEvent soundEvent, bool stopAllOtherMusic = true, bool allowFadeOut = true);
public void MusicPlay(SoundEvent soundEvent, bool stopAllOtherMusic = true, bool allowFadeOut = true, params SoundParameterInternals[] soundParameterInternals);
```

<table><thead><tr><th width="218.8333740234375">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to play</td></tr><tr><td>stopAllOtherMusic</td><td>If all other <a href="/docs/soundevent.md">SoundEvents</a> played at the <a href="/docs/soundmanager.md">SoundManager</a> music Transform should be stopped</td></tr><tr><td>allowFadeOut</td><td>If the other stopped <a href="/docs/soundevent.md">SoundEvent</a> should be allowed to fade out. Otherwise they are going to be stopped immediately</td></tr><tr><td>soundParameterInternals</td><td>For example <a href="/docs/soundparameter.md">SoundParameterVolumeDecibel</a> is used to modify how the <a href="/docs/soundevent.md">SoundEvent</a> is played</td></tr></tbody></table>

#### Music Stop

```csharp
// Stops the SoundEvent playing at the Music Transform
public void MusicStop(SoundEvent soundEvent, bool allowFadeOut = true)

// Stops all the SoundEvents playing at the Music Transform
public void MusicStopAll(bool allowFadeOut = true)
```

<table><thead><tr><th width="139.7833251953125">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to stop</td></tr><tr><td>allowFadeOut</td><td>If the other stopped <a href="/docs/soundevent.md">SoundEvent</a> should be allowed to fade out. Otherwise they are going to be stopped immediately</td></tr></tbody></table>

#### Music Pause and Unpause

```csharp
// Pauses/unpauses the SoundEvent at the Music Transform locally
public void MusicPause(SoundEvent soundEvent, bool forcePause = false);
public void MusicUnpause(SoundEvent soundEvent);

// Pauses/unpauses all SoundEvents at the Music Transform locally
public void MusicPauseAll(bool forcePause = false);
public void MusicUnpauseAll();
```

#### Music Get State, Length and Time

```csharp
// Uses the Music owner Transform
// If playing it returns SoundEventState.Playing
// If paused either locally or globally it returns SoundEventState.Paused
// If not playing, but it is delayed it returns SoundEventState.Delayed
// If not playing and it is not delayed it returns SoundEventState.NotPlaying
// If the SoundEvent or Transform is null it returns SoundEventState.NotPlaying
public SoundEventState MusicGetSoundEventState(SoundEvent soundEvent);

// Uses the Music owner Transform
// Returns the length (in seconds) of the AudioClip in the last played AudioSource
// Returns Mathf.Infinity if the InstanceSoundEvent is not playing
// Returns Mathf.Infinity if the SoundEvent or Transform is null
// pitchSpeed determines if it should be scaled by pitch. E.g. -12 semitones will be twice as long
public float MusicGetLastPlayedClipLength(SoundEvent soundEvent, bool pitchSpeed);

// Uses the Music owner Transform
// Returns the current time (in seconds) of the AudioClip in the last played AudioSource
// Returns 0 if the InstanceSoundEvent is not playing
// Returns 0 if the SoundEvent or Transform is null
// pitchSpeed determines if it should be scaled by pitch. E.g. -12 semitones will be twice as long
public float MusicGetLastPlayedClipTimeSeconds(SoundEvent soundEvent, bool pitchSpeed);

// Uses the Music owner Transform
// Returns the current time (in range 0 to 1) of the AudioClip in the last played AudioSource
// Returns 0 if the InstanceSoundEvent is not playing
// Returns 0 if the SoundEvent or Transform is null
public float MusicGetLastPlayedClipTimeRatio(SoundEvent soundEvent);

// Uses the Music owner Transform
// Returns the time (in seconds) since the SoundEvent was played
// Is calculated using the time scale selected in the SoundManager
// Returns 0 if the InstanceSoundEvent is not playing
// Returns 0 if the SoundEvent or Transform is null
public float MusicGetTimePlayed(SoundEvent soundEvent);

// Returns the owner Transform used by MusicPlay() etc
public Transform MusicGetTransform();
```

<table><thead><tr><th width="119.20001220703125">Parameters</th><th></th></tr></thead><tbody><tr><td>soundEvent</td><td>The <a href="/docs/soundevent.md">SoundEvent</a> to get length or time from</td></tr><tr><td>pitchSpeed</td><td>Determines if it should be scaled by pitch. E.g. -12 semitones will be twice as long</td></tr></tbody></table>

### Global Pause and Unpause

```csharp
// Pauses the all SoundEvents except those who are set to "Ignore Global Pause"
public void SetGlobalPause();
// Unpauses the all SoundEvents except those who are set to "Ignore Global Pause"
public void SetGlobalUnpause();

// Returns if Global Pause is enabled
public bool GetGlobalPaused();
```

### Global Volume

```csharp
// Sets a global volume of all sounds in decibels using AudioListener.volume, ranging from NegativeInfinity dB to 0 dB
public void SetGlobalVolumeDecibel(float volumeDecibel);

// Returns the global volume in decibels, ranging from NegativeInfinity dB to 0 dB
public void SetGlobalVolumeRatio(float volumeRatio);

// Sets a global volume of all sounds in linear scale using AudioListener.volume, ranging from 0 to 1
public float GetGlobalVolumeDecibel();

// Returns the global volume in linear scale, ranging from 0 to 1
public float GetGlobalVolumeRatio();
```

### Global SoundTag

```csharp
// Sets the global SoundTag
public void SetGlobalSoundTag(SoundTag soundTag);

// Returns the global SoundTag
public SoundTag GetGlobalSoundTag();
```

### Global Distance Scale

```csharp
// Sets the global distance scale (default is a scale of 100 units)
public void SetGlobalDistanceScale(float distanceScale);

// Returns the global distance scale
public float GetGlobalDistanceScale();
```

### Speed Of Sound

```csharp
// Set if speed of sound should be active
public void SetSpeedOfSoundEnabled(bool speedOfSoundEnabled);

// Set the speed of sound scale
// The default is a multiplier of 1 (by the base value of 340 unity units per second)
public void SetSpeedOfSoundScale(float speedOfSoundScale);

// Returns the speed of sound scale
public float GetSpeedOfSoundScale();
```

### Voice Limit

```csharp
// Sets the Voice limit
public void SetVoiceLimit(int voiceLimit);

// Returns the Voice limit
public int GetVoiceLimit();

// Sets the VoiceEffect limit
public void SetVoiceEffectLimit(int voiceEffectLimit);

// Returns the VoiceEffect limit
public int GetVoiceEffectLimit();
```

### Disable Playing Sounds

```csharp
// Disables/enables all the Play functionality
public void SetDisablePlayingSounds(bool disablePlayingSounds);

// If the Play/PlayAtPosition functionality is disabled
public bool GetDisablePlayingSounds();
```

### Get Addressable AudioMixer

```csharp
// If you have addressable AudioMixer enabled in the SoundManager you need to use this AudioMixer instance for e.g. AudioMixer.SetFloat().
// This is to fix problems when the AudioMixer is an addressable asset because it might create both a normal and an addressable instance with different IDs.
// Note that when using an addressable AudioMixer you should also enable Async Startup to increase startup speed.
// For addressable AudioMixer to work, you need to add the package "com.unity.addressables".
// You also need to define the Script Define Symbol "SONITY_ENABLE_ADDRESSABLE_AUDIOMIXER".
// Asmdef_Sonity.Internal.Runtime references Unity.Addressables and Unity.ResourceManager.
// Asmdef_Sonity.Internal.Editor references Unity.Addressables.
public AudioMixer GetAddressableAudioMixer();
```

### Manual Update

```csharp
// To use ManualUpdate(), you need to enable "Manual Update" in the SoundManager,
// and add the script define symbol "SONITY_ENABLE_SOUNDMANAGER_MANUAL_UPDATE".
// If enabled then the SoundManagers MonoBehaviour Update() will be replaced with ManualUpdate().
// This way Sonity won't automatically update every frame.
// You need to call SoundManager.Instance.ManualUpdate() manually.
// Giving you full control how often and when in the frame the SoundManager should update.
public void ManualUpdate();
```
