123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/bin/bash
  2. . $(ffoom path)
  3. ffoo import pretty
  4. usage() {
  5. mkusage "up" \
  6. "down" \
  7. "flip" \
  8. "mute" \
  9. "query is_muted" \
  10. "unmute"
  11. }
  12. sound_is_muted() {
  13. #
  14. # At least one playback channel is muted
  15. #
  16. local master_status="$(amixer get Master)"
  17. echo "$master_status" \
  18. | grep "Playback channels" \
  19. | sed -e 's/.*: //; s/ - /\n/' \
  20. | while read chname
  21. do
  22. grep -e "^ *$chname" <<<"$master_status"
  23. done \
  24. | grep -qse '\[off\]$'
  25. }
  26. do_down() {
  27. #
  28. # turn volume down
  29. #
  30. amixer -q sset Master 5%-
  31. }
  32. do_flip() {
  33. #
  34. # mute or unmute
  35. #
  36. if sound_is_muted;
  37. then
  38. amixer -q sset Master unmute;
  39. else
  40. amixer -q sset Master mute;
  41. fi
  42. }
  43. do_mute() {
  44. #
  45. # mute
  46. #
  47. amixer -q sset Master mute
  48. }
  49. do_query() {
  50. #
  51. # Query properties
  52. #
  53. local query="$1"
  54. debug -v query
  55. case "$query" in
  56. is_muted) sound_is_muted; return $? ;;
  57. *) usage ;;
  58. esac
  59. }
  60. do_up() {
  61. #
  62. # turn volume up
  63. #
  64. amixer -q sset Master 5%+
  65. }
  66. do_unmute() {
  67. #
  68. # mute
  69. #
  70. amixer -q sset Master unmute
  71. }
  72. action=
  73. while true; do case "$1" in
  74. up) action=up; shift ;;
  75. down) action=down; shift ;;
  76. flip) action=flip; shift ;;
  77. mute) action=mute; shift ;;
  78. query) action=query; shift ; break ;;
  79. unmute) action=unmute; shift ;;
  80. "") break ;;
  81. *) usage ;;
  82. esac done
  83. debug "\$*='$*'"
  84. debug -v action
  85. case $action in
  86. up|down|flip|mute|query|unmute) do_$action "$@" ;;
  87. *) usage ;;
  88. esac