Advertisement
Guest User

Запуск и плавное увеличение громкости проигрывателя

a guest
Nov 13th, 2011
410
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.93 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. #
  4. # Запускает проигрыватель и плавно увеличивает громкость воспроизведения
  5. # с помощью pulseaudio. Всегда переводит звуковой поток проигрывателя на
  6. # требуемую звуковую карту.
  7. #
  8. # (c) Artyom Protaskin <a.protaskin@gmail.com>
  9. #
  10.  
  11. player='deadbeef' # название проигрывателя
  12. player_run_cmd="$player" # команда запуска проигрывателя
  13. player_play_cmd="$player --play" # команда начала воспроизведения
  14. player_pause_cmd="$player --pause" # команда приостановки воспроизведения
  15. default_sink='0' # всегда выводить звуковой поток на эту звуковую карту
  16. display=':0.0' # используемый экран X, если неопределен
  17.  
  18.  
  19. if [ "$DISPLAY" = "" ]; then
  20.     export DISPLAY=$display
  21. fi
  22.  
  23. # временное отключение вывода звука с звуковых карт
  24. sinks=$(pactl list short sinks | sed 's/^\([0-9]*\).*$/\1/')
  25. for sink in $sinks; do
  26.     pactl set-sink-mute $sink 1
  27. done
  28.  
  29. # запуск проигрывателя, если не запущен
  30. if [ $(ps x | grep $player | grep -vc grep) -eq 0 ]; then
  31.     $player_run_cmd
  32.     wait
  33. fi
  34.  
  35. # кратковременное воспроизведение, с целью
  36. # регистрации клиента и создания звукового потока в pulseaudio
  37. $player_play_cmd && wait && $player_pause_cmd
  38.  
  39. # восстановление воспроизведения с звуковых карт
  40. for sink in $sinks; do
  41.     pactl set-sink-mute $sink 0
  42. done
  43.  
  44. # получение id проигрывателя в pulseaudio
  45. player_cid=$(pactl list short clients | grep $player | sed 's/\([0-9]*\).*/\1/')
  46. # получение id звукового потока проигрывателя
  47. player_sink_input=$(pactl list short sink-inputs | sed "s/^\([0-9]*\)\t[0-9]*\t$player_cid.*$/\1/")
  48. if [ "$player_sink_input" = "" ]; then
  49.     echo "Ошибка! Не удалось определить звуковой поток проигрывателя."
  50.     exit
  51. fi
  52.  
  53. # перенос звукового потока проигрывателя на требуемую звуковую карту
  54. pactl move-sink-input $player_sink_input $default_sink
  55. # уменьшение громкости звукового потока проигрывателя до нуля
  56. pactl set-sink-input-volume $player_sink_input 0
  57. # воспроизведение музыки в проигрывателе
  58. $player_play_cmd
  59. # плавное увеличение громкости звукового потока проигрывателя
  60. for volume in $(seq 17476 4369 65535); do
  61.     pactl set-sink-input-volume $player_sink_input $volume
  62.     sleep 5
  63. done
  64.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement