# Channels

Every sound Visual Script plays belongs to one of five **channels**. Each channel has its own volume and groups sounds that should be controlled together. This lets a player lower music without affecting dialogue and lets an Event fade a category without tracking individual sounds.

## The five channels

| Channel | Carries |
| :--- | :--- |
| **Sound Effect** | Short sounds caused by something in the world — footsteps, impacts, a door, a coin. |
| **Ambient** | Long loops that establish a place — wind, rain, a crowd, a generator. |
| **Music** | The score. |
| **Voice** | Dialogue, barks, grunts, the narrator. |
| **UI** | Button clicks, menu confirmations, notification chimes. |

Choose a channel by what the player should control separately, not by the sound's technical source. A radio broadcast is **Voice** when it follows the dialogue slider and **Music** when it follows the score.

An Instruction's channel remains editable, but decide the categories before building the options menu. Each category that players expect to control needs its own slider.

## Master

**Master** is a volume multiplier applied to all five channels. Use it for an overall volume slider in your options menu.

You can select **Master** in **Set Audio Channel Volume**. It doesn't appear in playback or stop Instructions because sounds belong to the five channels, not to **Master**.

## How loud a sound ends up

Before any fade is applied, a sound's volume is the product of three values:

`volume * channel volume * master volume`

!!! example "Volumes multiply together"
    A footstep authored at a **Volume** of `0.8`, with **Sound Effect** at `0.5` and **Master** at `0.6`, plays at `0.24`.

!!! info "Volume multipliers are limited to 0–1"
    Each volume is clamped to `0`–`1`, so these multipliers can't amplify the clip. If a sound is too quiet at full volume, adjust the clip or its [Audio Mixer Group](#audio-mixer-groups).

## Changing a volume

The **Set Audio Channel Volume** Instruction moves one volume to a new value.

| Field | Controls |
| :--- | :--- |
| **Channel** | Which volume to change — one of the five channels, or **Master**. |
| **Volume** | The new value, `0` to `1`. |
| **Transition** | Duration, ease mode, time mode, and whether to await the [tween](../time-and-tweens.md#tweens). |

Use a transition when a volume change should sound gradual. Dropping **Ambient** and **Sound Effect** to `0.2` over half a second makes the world recede, while a duration of `0` cuts immediately.

Set the transition's **Time Mode** to **Real Time** when the game may be paused. A **Game Time** fade cannot finish while the time scale is `0`.

## The volume Signals

You can read and write each volume through a Number Signal under `Audio` &rarr; `Volume`:

| Signal | Holds |
| :--- | :--- |
| **Master Volume** | The multiplier applied to all five channels. |
| **Sound Effect Volume** | The Sound Effect channel. |
| **Ambient Volume** | The Ambient channel. |
| **Music Volume** | The Music channel. |
| **Voice Volume** | The Voice channel. |
| **UI Volume** | The UI channel. |

Volume Signals also report changes. Use **On Number Change** to keep a percentage label beside a slider current without polling. See [Bindings](../signals/bindings.md).

!!! example "The slider and label follow channel volume"
    1. An **On Start** Event sets the slider's **Slider Value** to **Music Volume**, so it opens at the player's current volume.
    2. An **On Slider Change** Event sets **Music Volume** to the slider's **Slider Value**.
    3. A label with an **On Number Change** Trigger on **Music Volume** writes the percentage.

    Without the first step, the audio uses the saved volume while the slider handle shows its authored value.

## Channel volumes persist across profiles

Saving the game saves the volumes as shared data, and loading restores them. They're identical across every profile — a player who changes the music volume in one save has changed it in all of them.

The volumes also survive **Unload Profile**, so starting a new game preserves the player's audio settings.

!!! info "Channel volumes register automatically"
    Channel volumes register with the save system when audio is first used. At that point, they restore saved values before the first sound plays, without a **Remember** component, Global Variable, or Memory.

## Audio Mixer Groups

You can route each channel to an **Audio Mixer Group** in the Settings window's **Audio** section. It provides one slot per channel.

Channel volume is applied to the audio source itself, leaving the mixer free for effects and routing. Examples include reverb on **Ambient**, a low-pass over everything but **UI** while paused, and ducking **Music** under **Voice**.

When all five fields are empty, sounds use Unity's default group and channel volumes still apply. Assign groups only when the project needs mixer effects or routing.

!!! warning "The slots are locked during Play mode"
    The five fields are disabled during Play mode. The Audio Manager assigns a sound's mixer group when playback starts, so configure the groups before entering Play mode.

## Hand-placed Audio Sources

A channel's volume applies only to sounds started by the Audio Manager. A hand-placed **Audio Source** doesn't use Visual Script channels, even if it shares their mixer group: channel volume is applied to the source itself.

Hand-placed sources commonly provide looping world audio, such as a campfire, fountain, or machine.

To connect a hand-placed source to a channel, install the free **[Audio Source Volume](https://visualscript.dev/package/7nPVOtH6Apa99o9cxRGk)** package. Add it next to an **Audio Source** with `Add Component` &rarr; `Visual Script` &rarr; `Audio` &rarr; `Audio Source Volume`, then pick a channel. While enabled, the component tracks that channel and **Master**.

The component sets the level immediately and after every change, so a source that plays on awake starts at the correct volume.

!!! warning "The component owns the Volume field"
    **Audio Source Volume** writes the Audio Source's **Volume** every time a channel or **Master** changes, so the next channel or Master change overwrites values set by other components.

    Adjust an individual source's level through its clip or mixer group. Use **Min Distance** when you need to change how its volume falls off with distance.

## Where to go next

- **[Playing a sound](playing.md)** — control a sound's volume, pitch, timing, and position.
- **[Stopping a sound](stopping.md)** — stop one sound or an entire channel.
- **[Bindings](../signals/bindings.md)** — connect a slider to a volume Signal.
- **[Profiles](../save-load/profiles.md)** — understand why channel volumes use shared data.
