saturnin-au 1.8KB

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