Обнаружьте игру медиа / события паузы

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

Мое текущее решение использует ACPI для обнаружения разъема / отключают, как показано здесь. Для проигрывания / приостанавливают воспроизведение, я использую xdotool key XF86AudioPlay.

Это решение хорошо работает в основном случае:

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

Однако я не хочу возобновлять воспроизведение, если это не было активно, когда наушники были отключены.

Вообразите этот сценарий:

  • запустите ПК с наушниками в,
  • играйте музыку,
  • музыка паузы,
  • отключите наушники,
  • включите наушники назад.

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

Кроме того, xdotool key XF86AudioPlay просто переключает воспроизведение, тогда как xdotool key XF86AudioPause ничего не делает. Это делает вещи еще хуже:

  • запустите ПК с наушников в,
  • играйте музыку,
  • музыка паузы,
  • отключите наушники (МУЗЫКА НАЧИНАЕТ ИГРАТЬ!).

Таким образом, то, в чем я нуждаюсь, должно обнаружить игру / пауза / события остановки, а также разъем / отключают события, чтобы смочь правильно реагировать во всех возможных сценариях.

Этот конечный автомат описывает желаемую операцию: Unplug-pause FSM


Одна идея, которая прибыла по моему мнению, состоит в том, чтобы снова переплести сочетания клавиш для игры / пауза / остановка для добавления логики конечного автомата. Это имеет недостаток, которые воспроизводят, всегда должен управляться с помощью этих сочетаний клавиш, вместо, например, кнопок Rhythmbox, который несколько непрактичен.

Кроме того, если я закрою Rhythmbox при проигрывании, то конечный автомат останется в a playing состояние. Конечно, у меня мог быть 'демон', который будет ожидать, пока Rhythmbox не закрывается и затем устанавливает состояние на stopped. Но что, если это не Rhythmbox, который играет музыку, что, если это - например, VLC и т.д.? Этот подход ужасен и ненадежен, таким образом, я хотел бы избежать его.


Мой вопрос: То, как обнаружить, когда воспроизведение медиа было приостановлено / возобновленный / остановилось?

1
задан 27 September 2017 в 01:26

0 ответов

Другие вопросы по тегам:

Похожие вопросы: