Volume & EQ
All setter methods are synchronous SOAP calls that update the internal state cache on success.
Speaker volume
Section titled “Speaker volume”| Method | Signature | Description |
|---|---|---|
set_volume | set_volume(volume: u8) | Absolute volume (0–100) |
set_relative_volume | set_relative_volume(adjustment: i8) | Relative adjustment, returns new level |
set_mute | set_mute(muted: bool) | Mute or unmute |
use sonos_sdk::prelude::*;
fn main() -> Result<(), SdkError> { let sonos = SonosSystem::new()?; let speaker = sonos.speaker("Kitchen").unwrap();
// Set absolute volume speaker.set_volume(40)?;
// Adjust relative to current let result = speaker.set_relative_volume(5)?; println!("New volume: {}", result.new_volume);
// Mute speaker.set_mute(true)?;
Ok(())}Equalizer
Section titled “Equalizer”| Method | Signature | Range | Description |
|---|---|---|---|
set_bass | set_bass(level: i8) | -10 to +10 | Bass EQ |
set_treble | set_treble(level: i8) | -10 to +10 | Treble EQ |
set_loudness | set_loudness(enabled: bool) | — | Loudness compensation |
speaker.set_bass(5)?;speaker.set_treble(-3)?;speaker.set_loudness(true)?;Loudness boosts bass and treble at low volumes to compensate for human hearing characteristics.
Read EQ values
Section titled “Read EQ values”let bass = speaker.bass.fetch()?;let treble = speaker.treble.fetch()?;let loudness = speaker.loudness.fetch()?;
println!("Bass: {}, Treble: {}, Loudness: {}", bass, treble, loudness);Group volume
Section titled “Group volume”Group volume adjusts all members proportionally. Controlled via the group handle:
| Method | Signature | Description |
|---|---|---|
set_volume | set_volume(volume: u16) | Absolute group volume (0–100) |
set_relative_volume | set_relative_volume(adjustment: i16) | Relative adjustment, returns new level |
set_mute | set_mute(muted: bool) | Mute/unmute entire group |
snapshot_volume | snapshot_volume() | Save current levels for restore |
let group = sonos.speaker("Living Room").unwrap().group().unwrap();
// Absolutegroup.set_volume(40)?;
// Relativelet result = group.set_relative_volume(-5)?;println!("New group volume: {}", result.new_volume);
// Mute allgroup.set_mute(true)?;Snapshot and restore
Section titled “Snapshot and restore”Capture current group volume levels before a temporary change (e.g., an announcement):
let group = sonos.speaker("Living Room").unwrap().group().unwrap();
// Save current stategroup.snapshot_volume()?;
// Temporarily lower for announcementgroup.set_volume(20)?;
// Firmware restores after snapshotWatch for changes
Section titled “Watch for changes”All volume and EQ properties support the reactive watch() pattern:
for event in sonos.iter() { let volume = speaker.volume.watch()?; let mute = speaker.mute.watch()?; let bass = speaker.bass.watch()?; let treble = speaker.treble.watch()?; let loudness = speaker.loudness.watch()?;
println!("Vol: {:?}, Mute: {:?}, Bass: {:?}, Treble: {:?}, Loudness: {:?}", volume.value(), mute.value(), bass.value(), treble.value(), loudness.value());}Group volume is also watchable:
let group = sonos.speaker("Living Room").unwrap().group().unwrap();
for event in sonos.iter() { let vol = group.volume.watch()?; let mute = group.mute.watch()?; println!("Group vol: {:?}, mute: {:?}", vol.value(), mute.value());}