5 releases

Uses new Rust 2024

new 0.1.4 Jun 3, 2026
0.1.3 Jun 3, 2026
0.1.2 Apr 3, 2026
0.1.1 Mar 30, 2026
0.1.0 Mar 30, 2026

#7 in #wayle

Download history 139/week @ 2026-03-30 30/week @ 2026-04-06 64/week @ 2026-04-13 52/week @ 2026-04-20 51/week @ 2026-04-27 63/week @ 2026-05-04 73/week @ 2026-05-11 125/week @ 2026-05-18 237/week @ 2026-05-25 113/week @ 2026-06-01

556 downloads per month

MIT license

210KB
5K SLoC

Wayle

wayle-audio

Reactive PulseAudio integration for managing audio devices and streams.

Crates.io docs.rs License: MIT

cargo add wayle-audio

Usage

All fields on AudioService are reactive Property<T> types with .get() for snapshots and .watch() for change streams.

use wayle_audio::AudioService;
use futures::StreamExt;

async fn example() -> Result<(), wayle_audio::Error> {
    let audio = AudioService::new().await?;

    if let Some(device) = audio.default_output.get() {
        println!("Output: {}", device.description.get());
        println!("Muted: {}", device.muted.get());
        device.set_mute(true).await?;
    }

    let mut stream = audio.default_output.watch();
    while let Some(maybe_device) = stream.next().await {
        match maybe_device {
            Some(device) => println!("Default output: {}", device.description.get()),
            None => println!("No default output device"),
        }
    }
    Ok(())
}

Use AudioService::builder().with_daemon().build().await? to expose the service over D-Bus at com.wayle.Audio1.

License

MIT

Part of wayle-services.

Dependencies

~13–23MB
~383K SLoC