MOCP + notify-send оповещение при смене трека

Искусство написания bash скриптов. Делимся своими наработками
Ответить
Аватара пользователя
ZEN
Администратор
Сообщения: 1350
Зарегистрирован: 27 сен 2012, 18:23
Темы: 206
Откуда: Украина, Одесса
Статус: Не в сети

MOCP + notify-send оповещение при смене трека

Сообщение ZEN » 31 окт 2012, 12:50

UPD 23.04.2016 Существует вариант более лучшего исполнения оповещения при смене трека с помощью python. Соответственно рекомендую обратить внимание на эту тему.

Обычно я недолюбливаю подобные штуки отвлекающие внимание, но результат как он есть. Представляю вашему вниманию простой скрипт для консольного плеера mocp, который при смене трека рисует вот такую информацию:

Изображение
Full Screen

И так, первым делом открываем файл настроек плеера mocp - ~/.moc/config
И редактируем путь к скрипту на команду при смене трека. У меня вот так:
/bin/bash писал(а):zen@debian:~$ cat .moc/config | grep -i onsongchange
# OnSongChange
OnSongChange = "/home/zen/.moc/onsongchange.sh %a %t %r"
Тут внимательно смотрим на путь, у меня он находится в каталоге /home/zen/.moc, если у вас отличается, то укажите свой путь. Теперь самое вкусное, скрипт:

Код: Выделить всё

#!/bin/bash 
# Получаем список процессов, 
# где фигурирует имя нашего скрипта
p_list=`pgrep -f "$0" | grep -v $$`
# Если таких процессов больше одного
if [[ `echo $p_list | wc -w` > 1 ]]
then # тогда
    # Проходим циклом по PID ранее 
    # полученных процессов
    for i in $p_list
    do
        # И убиваем их
        kill -9 $i;
    done
fi
# Пауза в 3 секунды
sleep 3s;
# Нормализуем полученные имя исполнителя и трека
artist=""
# Если переменные не пусты
if [[ -n "$1" && -n "$2" ]]
then # Тогда
    # Добавляем дефис между исполнителем и треком
    artist="$1 - $2"
# Если имя исполнителя и трека пустые
elif [[ -z "$1" && -z "$2" ]] 
then # Тогда
    # Получаем из пути к файлу его имя
    tmp=$(basename "`mocp --format %file`")
    # И сохраняем в переменную artist без расширения файла
    artist=${tmp%.*}
else # Иначе просто выводим как есть
    artist="$1 $2"
fi
# Нормализуем имя альбома
album="";
# Если переменная не пуста
if [[ -n "$3" ]]
then # Тогда
    # Вписываем её в скобках
    album="($3)";
fi
# Через notify-send информаируем информацией о треке
notify-send -t 3000 -i audio-speakers "Сейчас играет:" "$artist $album";
# Успешно завершаем работу скрипта
exit 0; 
Этот же код с подсветкой на pastebin.com

FAQ:

Q: Зачем скрипт, если можно в настройках вместо скрипта указать команду notify-send с параметрами?
A: Затем, что если быстро переключать треки, то наплодится много оповещений с неактуальной информацией о треке

Q: Зачем лишние проверки на существование имени трека и исполнителя в коде?
A: Мир не совершенен и некоторые личности позволяют себе не заполнять ID3 теги. По-этому вместо пустой информации я вывожу имя файла.

Q: Слишком мало времени показывается информация, где увеличить промежуток времени?
A: В последних строках скрипта есть вызов notify-send, где вписано значение в миллисекундах. Примечание для любознательных, что бы не плодить лишние окошки значение это лучше указывать равным значению команде sleep. По-этому ищем строку "sleep 2s;" и меняем ей на такой же промежуток времени задержку.

Q: Мне не нравится динамик, можно вывести вместо него обложку альбома?
A: Можно, разрешаю) Пока что это не реализовано в скрипте. И лично я не хочу реализовывать. Обложка альбома может хранится внутри файла, а можно выкачать скажем из сайта http://www.albumart.org. Только в силу специфики моих музыкальных вкусов мне лень гнать трафик впустую.

Q: Понимаю что можно, но как поменять иконку динамика на свою?
A: Очень просто, ищем строку с notify-send. И видим параметр "-i audio-speakers", вместо audio-speakers можно подставить имя другой системной иконки, либо указать полный путь к новой.

Q: Как на счет варианта для conky?
A: Уже реализовано до меня с изображением обложек альбомов.
Enjoy! ;)
бог создал труд и обезьяну
чтоб получился человек
а вот пингвина он не трогал
тот сразу вышел хорошо

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей