Мини-плеер vs Now Playing

Этого поста не должно было быть, по крайней мере, в ближайшее время. Работы по мини-плееру вообще хотел закинуть на самые задворки и уже вернуться к нему, когда будет реализован основной функционал. Но жизнь диктует свои условия и в очередной раз слушаая музыку в AirPods, я машинально решил переключить треки но, естественно это не сработало, так как RGMP не умеет этого. Поэтому эту досадную историю пришлось закрывать сейчас ))

Наверное, вы спросите, а при чем здесь мини-плеер? А вот при том: когда реализовал эту функциональность, я понял, что мини-плеер делать нет смысла.

В MacOS, iOS да и в часах есть такая штука под названием Now Playing. Это некий системный виджет, в который можно опубликовать состояние плеера и метаданные текущего воспроизведения в системный интерфейс с помощью MediaPlayer framework. Также эта штука может и управлять вашим плеером. То есть связь двухсторонняя. Если взять аналог виндовый то это System Media Transport Controls (SMTC)

В общем, не суть. Суть в том, что Now Playing это есть та самая прослойка между физическим устройством и вашим плеером.

RGMP в связке с Now Playing
RGMP в связке с Now Playing

В общем, как это работает: какой-то девайс посылает сигнал OS, например, переключение трека -> далее OS отсылает этот сигнал Now Playing -> Now Playing отсылает сигнал плееру который реализовал в данный момент двухстороннюю связь.

Выше на скриншоте видно что я уже интегрировался с Now Playing и, соответственно, использую весь его доступный функционал. Наверное, теперь не возникнет вопроса: почему мини-плеер не нужен? ))

Если вы элемент управления вытащите на соответствующую панель, то у вас будет доступно переключение треков оттуда
Если вы элемент управления вытащите на соответствующую панель, то у вас будет доступно переключение треков оттуда

Где ещё теперь доступно управление плеером:

  • на Touch Bar у старых MacBook Pro, если она есть;
  • при управлении мультимедийными клавишами клавиатуры: Play/Pause, Next, Previous прямо из коробки;
  • на внешних устройствах и в отдельных сценариях, например при AirPlay / Bluetooth-гарнитуре

В настройках я не стал именовывать страницу "Мини-плеер" как-то иначе. Но имейте в виду, что это относится к Now Playing )

Параметры и поведение Now Playing
Параметры и поведение Now Playing

Немножко расскажу про настройки:

  • Как отрабатывают крайние кнопки - к сожалению Now Playing не имеет возможности добавить сразу одновременно кнопки перемотки и переключение трека. Поэтому я вынес это в настройку, где можно выбрать нужное поведение.
  • Оставлять трек после остановки - некий лайфхак, который оставляет плееру право дальше использовать Now Playing после остановки трека (другие проигрыватели так не умеют)
  • Занимать место при запуске - тоже из очередных лайфхаков. Когда плеер стартует, если он ничего не проигрывает, мы можем включить галочку и занять Now Playing под себя (напомню, другие музыкальные проигрыватели также могут использовать Now Playing). То, чего мне не хватало ни в одном плеере. Обычно все плеера начинают занимать Now Playing только после начала проигрывания трека. У меня теперь можно сразу ))

Кстати, под iOS Now Playing начинает отображать данные по треку:

  • На экране блокировки
  • Control Center
  • AirPods (все жесты) и другие гарнитуры с дисплеем
  • Клавиатуры, автомобильные контролы, Bluetooth-устройства и другие совместимые аксессуары направляют команды в приложение
  • CarPlay (с частичной доработкой)

На этом всё. Пост которого не должно было быть закончен )), а я возвращаюсь к реализации нормализации звука по амплитуде и нормализации replay gain ))

Вообще, уже думаю, пора выпускать в бета-тестирование хоть какую-то версию. Сделано уже достаточно много, и нужен обратный фидбэк и баги ))

11