---
title: Volume & Panning
description: Learn how to control volume and panning of audio
---

## Volume Control

### Individual Sound Volume

Control the volume of individual playing sounds:

```dart
// Set volume (0.0 = silent, 1.0 = full volume)
SoLoud.instance.setVolume(handle, 0.5); // 50% volume

// Get current volume
final volume = SoLoud.instance.getVolume(handle);

// Fade volume over time
SoLoud.instance.fadeVolume(
  handle,
  0.0, // target volume
  Duration(seconds: 2), // fade duration
);

// Oscillate volume
SoLoud.instance.oscillateVolume(
  handle,
  0.2, // minimum volume
  0.8, // maximum volume
  Duration(seconds: 1), // oscillation period
);
```

### Global Volume

Control the master volume affecting all sounds:

```dart
// Set global volume
SoLoud.instance.setGlobalVolume(0.8); // 80% volume

// Get global volume
final globalVolume = SoLoud.instance.getGlobalVolume();

/// Gets the approximate volume for output per output
/// channel (i.e, per speaker).
final outputVolumes = SoLoud.instance.getApproximateVolume(1 /* the channel index */);

// Fade global volume
SoLoud.instance.fadeGlobalVolume(
  0.0, // target volume
  Duration(seconds: 3), // fade duration
);

// Oscillate global volume
SoLoud.instance.oscillateGlobalVolume(
  0.5, // minimum volume
  1.0, // maximum volume
  Duration(seconds: 2), // oscillation period
);
```

## Panning Control

Control the stereo positioning of sounds:

```dart
// Set pan (-1.0 = full left, 0.0 = center, 1.0 = full right)
SoLoud.instance.setPan(handle, -0.5); // slightly to the left

// Get current pan
final pan = SoLoud.instance.getPan(handle);

// Fade pan position
SoLoud.instance.fadePan(
  handle,
  1.0, // target pan (right)
  Duration(seconds: 2), // fade duration
);

// Oscillate pan
SoLoud.instance.oscillatePan(
  handle,
  -1.0, // leftmost position
  1.0,  // rightmost position
  Duration(seconds: 1), // oscillation period
);
```

### Absolute Pan Control

For more precise control, you can set left and right channels independently:

```dart
// Set absolute pan values for left and right channels
SoLoud.instance.setPanAbsolute(
  handle,
  0.7, // left channel volume
  0.3, // right channel volume
);
```

## Best Practices

- Keep volume levels reasonable to avoid audio clipping
- Use fading for smooth transitions
- Consider using oscillation for special effects
- Use global volume for overall game/app volume control
- Use individual volume control for sound balance
- Remember that volume changes are multiplicative with global volume

<Card title="Use Limiter Filter for Multiple Concurrent Sounds">
When playing multiple sounds simultaneously, the combined volume can exceed safe levels and cause distortion. Using the Limiter filter can help prevent this:

```dart
// Initialize SoLoud
await SoLoud.instance.init();

// Enable the limiter filter
SoLoud.instance.filters.limiterFilter.activate();

// Optionally adjust limiter parameters
// The wet parameter controls how much of the limited signal is used (0.0 to 1.0)
SoLoud.instance.filters.limiterFilter.outputCeiling.value = -6;

// Now you can safely play multiple sounds without worrying about volume spikes
sound1.play(sound, volume: 1.0);
sound2.play(sound, volume: 1.0);
sound3.play(sound, volume: 1.0);
```
</Card>
