Автоматическая смена обоев в плеере на raspberry

Тема в разделе "Глядите, что я сделал", создана пользователем BarShadow, 23 июн 2020.

  1. BarShadow

    BarShadow Нуб

    Когда-то давно я задался целью сделать из своей малины мультимедиа-центр, который играл бы музыку, выполнял различные фоновые процессы и выводил всякое-полезное на экран.
    И была у меня тогда мысль что не плохо было бы, чтобы когда играет музыка - на экране отображалась оболожка альбома того трека, что звучит. Вот здесь я создавал тему с вопросом как что-то подобное можно реализовать?

    Ниже я продемонстрирую что из всего этого вышло и как я этого добился...

    Первым делом я хотел разобраться как сменить обои рабочего стола по команде. Гуглопоиск привёл меня вот к такому решению:

    1. Запускаем терминал и вводим команду: "xfconf-query -c xfce4-desktop -m"
    2. Вносим изменения (в моём случае - меняем обои рабочего стола через графический интерфейс) и получаем вот такой вывод: "установить: /backdrop/screen0/monitorVGA-1/workspace0/last-image"

    Теперь, чтобы сменить обои из терминала - достаточно воспользоваться командой "xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitor0/image-path -s ~/Pictures/Background.jpeg", где ключ -p равен тому выводу, что мы получили ранее, а ключ -s - равен пути к изображению.

    Далее - нужно получить список изображений, которые я хочу видеть в качестве обоев. По задумке - это должны быть обложки альбомов. При помощи утилиты Mp3Tag и Wine импортирую обложки альбомов:

    Действия-быстро --> Импортировать обложку из файла --> Формат-строка: "$validate($trim(%artist%)' - '$trim(%ALBUM%),%DUMMY%)"

    Таким образом я получаю изображения, вшитые в файл в формате Исполнитель - альбом.jpg.

    А теперь - магия. Пишу сценарий на смену обоев. В моём случае он вот такой:

    Код (Bash):
    #!/bin/bash
    # Задаю переменные:
    mocp_artist=`mocp -Q %artist`
    mocp_album=`mocp -Q %album`
    albumartist="${mocp_artist} - ${mocp_album}"

    # Условие выполнения сценария: Если существует файл, имя которого совпадает с форматом "Исполнитель - альбом" трека, который воспроизводится при помощи MOCP, тогда...
    if [ -f ~/Рабочий\ стол/covers/"${albumartist}".* ];
    then
    # Установить этот файл в качестве обоев рабочего стола
    xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorVGA-1/workspace0/last-image -s ~/Рабочий\ стол/covers/"${albumartist}".*
    # В противном случае - установить в качестве обоев конкретное изображение
    else
    xfconf-query -c xfce4-desktop -p /backdrop/screen0/monitorVGA-1/workspace0/last-image -s /usr/share/backgrounds/Artist/default.jpg
    fi
    Теперь, если запущен какой нибудь трек в MOCP, обложка этого трека находится в указанной в скрипте директории и я выполняю этот сценарий - обоина изменяется.
    Сначала я хотел выполнять этот скрипт зацикленно с интервалом в несколько секунд, но потом нашёл ещё более элегантное решение. Оказывается MOCP умеет выполнять сценарии при смене трека. Это - как раз то, что мне нужно. Открываю файл "~/.moc/config", нахожу параметр "OnSongChange =" и указываю путь до моего скрипта.
    Таким образом - каждый раз, когда плеер запускает новый трек - срабатывает сценарий и обоина либо меняется на обложку альбома, либо нет.
    [​IMG]

    Кстати, музыка, которую играет моя малина ещё и транслируется на Last.fm, что помогает мне в поиске похожих по стрилю исполнителей.