LINUX.ORG.RU

Вышел Music Pause Daemon

 autopause, , , ,


0

3

Вчера на github появились исходники открытого проекта musicpaused. Основное предназначение программы — приостанавливать воспроизведение музыки при вынимании наушников так же, как это делают мобильные устройства на ОС Android и iOS. Многие хотели бы иметь такую же функциональность и на своих ноутбуках и компьютерах, и теперь это возможно. Также она может показывать уведомления на рабочем столе при вставке и вынимании разъёмов наушников, микрофона и некоторых других. Для Линукса подобных программ раньше не было.

Программа состоит из 3 демонов:

  • jacklistener — монитор событий изменения состояния разъёмов. Читает события из event-device'ов и передаёт их в виде сигналов на системную шину D-Bus;
  • musicpaused — демон, работающий с правами пользователя и приостанавливающий воспроизведение музыки при получении сигнала о вынимании наушников от jacklistener. Может управлять всеми плеерами, поддерживающими интерфейс MPRIS;
  • jacknotifier — демон, работащий с правами пользователя и показывающий уведомления на рабочем столе при получении сигналов от jacklistener.

Такая организация программы позволяет легко расширять её функциональность за счёт написания дополнительных демонов, выполняющих какую-то одну задачу и взаимодействующих с сервером jacklistener.

Программа работает, если ядро сообщает об изменении состояния разъёмов через event-интерфейс. Для аудиокарт Intel HDA необходимо включить в конфигурации ядра опцию CONFIG_SND_HDA_INPUT_JACK.

На гитхабе доступны исходники и ебилды для Gentoo, а также инструкции по установке.

Исходники jacklistener

Исходники jacknotifier

>>> Исходники musicpaused

★★★★★

Проверено: tazhate ()
Последнее исправление: tazhate (всего исправлений: 3)

Ответ на: комментарий от zzo

Это, надо думать, не работает и с внешними usb-звукокарточками, которые тоже не будуть слать в ядро никаких ивентов (?).

У меня таких нет, чтобы проверить, но множество поддерживаемых устройств определяется только драйверами ALSA и возможностями самого устройства. Если устройство не может — тут не поможет ничего. Если устройство может, но не работает — значит, надо исправлять очередной баг в ALSA.

Поделка, очевидно, срабатывает не мгновено, и пара звуков успевает пролететь в активизировавшиеся из-за вынимания наушников ноутовские динамики.

У меня не успевает. Динамики активируются и музыка ставится на паузу по одному и тому же событию из evdev — тут вряд ли будет настолько большая задержка, чтобы что-то услышать.

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

Скажите, а почему бы не запилить такое в целом для всей системы, т.е. если у тебя играет музыка и попутно ты гоняешь в игрушку- наушники выдернул - музыка ушла а выстрелы остались?

У игрушек обычно нет никакого интерфейса, чтобы из другой программы поставить игру на паузу. Более того, даже на паузе может играть какая-то музыка из игры. Непонятно, что делать с игрой — не прибивать же её совсем. Это не говоря о том, что их очень много, а стандарта никакого нет. Можно просто вырубить звук при вынимании наушников, но это уже есть в pulseaudio в виде разных уровней громкости для наушников и динамиков.

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

Можно было бы ещё понять, если бы оно работало наоборот. Втыкаешь наушники - плеер останавливается, вытыкаешь наушники - плеер продолжает играть.

Что-то не совсем понятно, зачем это нужно, но теперь это можно сделать через jackeventcmd.

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

На данный момент musicpaused хочет jacklistener, но у того в provides ничего не указано, поэтому оно jacklistener-git.

Сорри, локально исправил, но не закоммитил. Сейчас исправлю.

Intel Corporation 82801H (ICH8 Family) HD Audio Controller

CONFIG_SND_HDA_INPUT_JACK в ядре включено?

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

Автор, в чём проблема?

Какой дистрибутив? Какая версия libnotify? У меня с 0.7.4 собирается. Возможно, изменили что-то в новой версии.

/usr/include/libnotify/notification.h:79:21: замечание: declared here

Покажите декларацию оттуда.

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

Кстати, воспроизведение в musicpaused при подключении наушников можно вернуть так: http://pastebin.com/UwuELNB2 Интересно, почему из коробки не сделано?

Безусловно, можно вернуть воспроизведение. Не сделал этого, потому что не всегда вставленные наушники означают прослушивание музыки в каком-то конкретном плеере. Можно вставить наушники, чтобы посмотреть видео, посмотреть YouTube, поиграть в игру и многое другое. В этом случае автовоспроизведение музыки будет мешать. Дальше, демонов musicpaused может быть запущено несколько, если используется несколько разных плееров. В этом случае при вынимании наушников остановится тот, который играл, но при вставке заиграют все вместе — это тоже нехорошо. Поэтому, если такая функция действительно нужна, её может обеспечить jackeventcmd вместо musicpaused. В нём можно запускать произвольные команды по событиям, в том числе и продолжение воспроизведения при вставке наушников.

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

автору большое спасибо, годная вещь

p/s запилите плз кто-нибудь пакеты для opensuse 12.1

stmc
()
Ответ на: комментарий от disee

я имел в виду просто вырубить полностью звук (в смысле не на паузу)

Ну так это и pulseaudio может.

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

Да, ему нужна только ALSA и D-Bus. Работает независимо от наличия pulseaudio.

После прочтения данного комментария годность и нужность этого musicpuased возросла в разы.

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

OMG, это же очень старая версия.

Было очень лень обновляться, пока всё работает.
Спасибо! Буду пробовать, насколько это удобно.

fractaler ★★★★★
()

Нужная вещь. ИМХО, автор молодец, потому что:

* Хорошая идея;

* C;

* Unix-way - разбито на разные программы с разными функциями и нормальным интерфейсом;

* Ебилды сразу;

Вот это + mpd + Dbus для mpd - как раз. =)

Df_Yz
()

И да, я решал (и решаю пока что) эту проблему так: ставил мьют на колонки в alsamixer и убирал его, когда действительно нужно. =)

Df_Yz
()

ЛОР такой ЛОР, вместо того чтобы поддержать автора выкрикивают «не нужно» и все такое. Это выкрики этих «опытных» юзеров никому не нужны. Да и софтина то вас не заставляет ее ставить, что разорались то?

ExpertOff
()
Ответ на: комментарий от Loki13

И выпинывать домочадцев из-за компа, чтобы почту проверить?

на это есть терминалы к нему. тонкие, холодные, быстрые, аки ветер.

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