1use crate::input::{Key, Keyboard};
2use crate::prelude::*;
3use cpvc;
4
5#[derive(Debug, Clone)]
7pub struct Audio;
8
9impl Audio {
10 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 pub fn get_volume() -> u8 {
23 cpvc::get_system_volume()
24 }
25
26 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 pub fn mute() -> Result<()> {
37 Keyboard::press(&[Key::Mute])
38 }
39
40 pub fn unmute() -> Result<()> {
42 Keyboard::press(&[Key::Mute])
43 }
44}