LINUX.ORG.RU

mpd: уведомление о новом треке

 ,


0

2

При переключении трека (не явном, а когда один трек отыгрывает, и воспроизводится следующий) хотелось бы отловить событие. Например, при смене трека запустить bash-скрипт, чтобы тот выставил уведомлялку. При явной смене трека — задача тривиальна, здесь же для меня не столь очевидна. Использую mpc (плейлистами управляю через dmenu, треком манипулирую через хоткеи), после чтения мануала не нашёл того, что решит мою задачу. Возможно, нужно обратиться к другому клиенту? Хотелось бы что-нибудь похожее на mpc. То есть чтобы управлять исключительно через подачу команд.

ncmpcpp умеет в execute_on_song_change = command

Его придётся держать запущенным, но тебе в любом случае нужно держать какой-то клиент запущенным, т.к. сам mpd в это не умеет.

d ★★★★
()
Ответ на: комментарий от d

Как вариант, налепи на libmpd клиент из говна и палок. Будет минималистичненько, как раз в духе suckless.

d ★★★★
()
$ yaourt mpd noti                 
1 aur/indimpc-git 20121107-1 (5)
    Minimalistic MPD client with support for multimedia keys and notifications
2 aur/mpd-notification 0.7.0-1 (5)
    Notify about tracks played by mpd
3 aur/mpd-notification-git 0.7.0.r0.g14c059a-1 (0)
    Notify about tracks played by mpd - git checkout
4 aur/mpd_notifyd 0.16-1 (0)
    Notifier daemon type for MPD using libnotify. The start of reproduction is reported.
5 aur/mpn 1.1-2 (5)
    MPNotifier is a lightweight client for MPD displaying a popup notification each time a new song is played

darktic ★★★
()

mpc idle || mpc idle_loop || ncmpcpp execute_on_song_change.

</thread>

r3lgar ★★★★★
()
Последнее исправление: r3lgar (всего исправлений: 1)

Как вариант:

mpc idleloop player | while read event ; do notify-send "$(mpc -q current)" ; done
, только 1) уведомления будут приходить не только при переключении трека, но и при постановке на паузу/снятии с паузы, и 2) при переключении почему-то приходят два уведомления (mpc 0.26, mpd 0.19.9).

dexpl ★★★★★
()
#!/usr/bin/env python3

HOST = 'localhost'
PORT = 6600

import os
import mpd
try:
    from gi.repository import Notify
    notify_init = Notify.init
    Notification = Notify.Notification.new
except ImportError:
    from pynotify import init as notify_init, Notification


def notify(song):
    notification_parts = []
    if 'artist' in song:
        notification_parts.append(u'{artist} - '.format(**song))
    if 'title' in song:
        notification_parts.append(song['title'])
    elif 'file' in song:
        notification_parts.append(os.path.basename(song['file']))
    else:
        notification_parts.append('<untitled>')
    notification_text = ''.join(notification_parts)
    notification = Notification('Now playing:', notification_text)
    notification.set_timeout(20000)
    notification.show()


def watch():
    notify_init("MPD - now playing")

    client = mpd.MPDClient()
    client.connect(HOST, PORT)

    current_song = None
    while True:
        client.send_idle()
        changed = client.fetch_idle()
        if 'player' in changed:
            client.send_currentsong()
            song = client.fetch_currentsong()
            if song != current_song:
                notify(song)
                current_song = song


if __name__ == '__main__':
    watch()
anonymous
()
Ответ на: комментарий от dexpl

[code]mpc idleloop player | while read event ; do notify-send «$(mpc -q current)» ; done[/code]

Было бы достаточно, но, увы, чтобы заставить это прилично работать, придётся добавить как минимум несколько костылей. Сам использую более новые версии (mpc 0.27-1, mpd 0.19.10-1), но поведение по этому поводу точно такое же. На крайний случай можно, спасибо.

kalterfive ★★
() автор топика
Ответ на: комментарий от anonymous

А чем это лучше этого?

mpc idleloop player | while read event ; do notify-send «$(mpc -q current)» ; done

kalterfive ★★
() автор топика
Ответ на: комментарий от kalterfive

Кстати, спасибо за тему — открыл для себя mpdris2 (также спасибо f1u77y), вторые сутки пользуюсь и пока все нравится — он запускается при входе в сеанс благодаря .desktop-файлу в /etc/xdg/autostart, показывает те самые уведомления при переключении треков, не требует настройки (как минимум в простейшем случае, когда mpd на локалхосте с дефолтным портом и без пароля). К тому же, в уведомлениях рисуются обложки, если в переменных среды есть XDG_MUSIC_DIR с путем до библиотеки (или в конфиге указать), а в этой библиотеке имеются cover.jpg. Причем о последнем я узнал, читая код (это скрипт на питоне).

dexpl ★★★★★
()
Ответ на: комментарий от dexpl

Донской Праздничный

Скрипт на питоне, который собирается автомейком - это вещества.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.