volume_unix.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. // +build !windows
  2. /*
  3. * Copied from https://github.com/itchyny/volume-go, MIT License
  4. */
  5. package Sound
  6. import (
  7. "errors"
  8. "fmt"
  9. "os"
  10. "os/exec"
  11. "strings"
  12. )
  13. func execCmd(cmdArgs []string) ([]byte, error) {
  14. cmd := exec.Command(cmdArgs[0], cmdArgs[1:]...)
  15. cmd.Env = append(os.Environ(), cmdEnv()...)
  16. out, err := cmd.Output()
  17. if err != nil {
  18. err = fmt.Errorf(`failed to execute "%v" (%+v)`, strings.Join(cmdArgs, " "), err)
  19. }
  20. return out, err
  21. }
  22. // GetVolume returns the current volume (0 to 100).
  23. func GetVolume() (int, error) {
  24. out, err := execCmd(getVolumeCmd())
  25. if err != nil {
  26. return 0, err
  27. }
  28. return parseVolume(string(out))
  29. }
  30. // SetVolume sets the sound volume to the specified value.
  31. func SetVolume(volume int) error {
  32. if volume < 0 || 100 < volume {
  33. return errors.New("out of valid volume range")
  34. }
  35. _, err := execCmd(setVolumeCmd(volume))
  36. return err
  37. }
  38. // IncreaseVolume increases (or decreases) the audio volume by the specified value.
  39. func IncreaseVolume(diff int) error {
  40. _, err := execCmd(increaseVolumeCmd(diff))
  41. return err
  42. }
  43. // GetMuted returns the current muted status.
  44. func GetMuted() (bool, error) {
  45. out, err := execCmd(getMutedCmd())
  46. if err != nil {
  47. return false, err
  48. }
  49. return parseMuted(string(out))
  50. }
  51. // Mute mutes the audio.
  52. func Mute() error {
  53. _, err := execCmd(muteCmd())
  54. return err
  55. }
  56. // Unmute unmutes the audio.
  57. func Unmute() error {
  58. _, err := execCmd(unmuteCmd())
  59. return err
  60. }