Skip to main content

pc_remote/media/
audio.rs

1use crate::input::{Key, Keyboard};
2use crate::prelude::*;
3use cpvc;
4
5/// Audio controller
6#[derive(Debug, Clone)]
7pub struct Audio;
8
9impl Audio {
10    /// Returns devices list
11    pub fn devices() -> Result<Vec<String>> {
12        let list = cpvc::get_sound_devices();
13
14        if list.is_empty() {
15            return Err(Error::FoundNoDevices.into());
16        }
17
18        Ok(list)
19    }
20
21    /// Returns current audio volume (0-100%)
22    pub fn get_volume() -> u8 {
23        cpvc::get_system_volume()
24    }
25
26    /// Sets audio volume (0-100%)
27    pub fn set_volume(volume: u8) -> Result<()> {
28        let volume = volume.min(100);
29        if !cpvc::set_system_volume(volume) {
30            return Err(Error::FailedSetVolume.into());
31        }
32        Ok(())
33    }
34
35    /// Mute current audio device
36    pub fn mute() -> Result<()> {
37        Keyboard::press(&[Key::Mute])
38    }
39
40    /// Unmute current audio device
41    pub fn unmute() -> Result<()> {
42        Keyboard::press(&[Key::Mute])
43    }
44}