# OnAudioConfigurationChanged

> Unity calls this event whenever the global audio settings change.

## Definition

* **Type:** Event
* **Namespace:** [UnityEngine](/engine/6000.7/script-reference/unityengine.md)
* **Assembly:** UnityEngine.AudioModule

```csharp
public static event AudioSettings.AudioConfigurationChangeHandler OnAudioConfigurationChanged
```

### Remarks

The settings change when you use [AudioSettings.Reset](/engine/6000.7/script-reference/unityengine/audiosettings/reset.md), but an external factor can also change them. For example:

* The OS control panel changes the sample rate.

* The user changes the default output device, for example if they plug in an HDMI monitor or a USB headset.

For a code example with a large range of setting options, refer to [AudioSettings.Reset](/engine/6000.7/script-reference/unityengine/audiosettings/reset.md).

### Examples

```csharp
 // This script creates a row of buttons, one for each <see cref="UnityEngine.AudioSpeakerMode"></see>. 
 // When you press one of the buttons, Unity will play the audio with the new speaker mode. 
 // Attach this script and an AudioSource component (with an audio clip) to a GameObject in your Scene.
 // If any of the options are not available on your system, it will throw an error. 

using UnityEngine;
using System;

public class AudioConfigurationChangedExample : MonoBehaviour
{
    void OnEnable()
    {
        AudioSettings.OnAudioConfigurationChanged += OnAudioConfigurationChanged;
    }

    void OnDisable()
    {
        AudioSettings.OnAudioConfigurationChanged -= OnAudioConfigurationChanged;
    }

    void OnAudioConfigurationChanged(bool deviceWasChanged)
    {
        Debug.Log(deviceWasChanged ? "Device was changed" : "Reset was called");
        if (deviceWasChanged)
        {
            AudioConfiguration config = AudioSettings.GetConfiguration();
            config.dspBufferSize = 512;
            if (!AudioSettings.Reset(config))
            {
                Debug.LogError("Failed to reset AudioConfiguration after device change.");
            }
        }
        GetComponent<AudioSource>().Play();
    }

    AudioSpeakerMode GUIRow(AudioSpeakerMode value, ref bool modified)
    {
        // Add all the values in the enum to an array. 
        Array audioSpeakerModes = Enum.GetValues(typeof(AudioSpeakerMode));

        GUILayout.BeginHorizontal();
        GUILayout.Button("Speaker mode = " + value.ToString());

        // Loop through the AudioSpeakerMode enum. 
        foreach (AudioSpeakerMode speakerMode in audioSpeakerModes)
        {
            // Set the button name to the name of the enum value. 
            string s = speakerMode.ToString();

            // Add brackets to the button name to show the current selected button. 
            if (speakerMode == value)
                s = "[" + s + "]";

            // Create a button for each valid speaker mode. 
            if (GUILayout.Button(s))
            {
                value = speakerMode;
                modified = true;
            }
        }

        GUILayout.EndHorizontal();
        return value;
    }

    void OnGUI()
    {
        bool modified = false;

        AudioConfiguration config = AudioSettings.GetConfiguration();

        config.speakerMode = GUIRow(config.speakerMode, ref modified);

        if (modified)
            AudioSettings.Reset(config);
    }
}
```
