Мини-плеер vs Now Playing
Этого поста не должно было быть, по крайней мере, в ближайшее время. Работы по мини-плееру вообще хотел закинуть на самые задворки и уже вернуться к нему, когда будет реализован основной функционал. Но жизнь диктует свои условия и в очередной раз слушаая музыку в AirPods, я машинально решил переключить треки но, естественно это не сработало, так как RGMP не умеет этого. Поэтому эту досадную историю пришлось закрывать сейчас ))
Наверное, вы спросите, а при чем здесь мини-плеер? А вот при том: когда реализовал эту функциональность, я понял, что мини-плеер делать нет смысла.
В MacOS, iOS да и в часах есть такая штука под названием Now Playing. Это некий системный виджет, в который можно опубликовать состояние плеера и метаданные текущего воспроизведения в системный интерфейс с помощью MediaPlayer framework. Также эта штука может и управлять вашим плеером. То есть связь двухсторонняя. Если взять аналог виндовый то это System Media Transport Controls (SMTC)
В общем, не суть. Суть в том, что 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 только после начала проигрывания трека. У меня теперь можно сразу ))
Кстати, под iOS Now Playing начинает отображать данные по треку:
- На экране блокировки
- Control Center
- AirPods (все жесты) и другие гарнитуры с дисплеем
- Клавиатуры, автомобильные контролы, Bluetooth-устройства и другие совместимые аксессуары направляют команды в приложение
- CarPlay (с частичной доработкой)
На этом всё. Пост которого не должно было быть закончен )), а я возвращаюсь к реализации нормализации звука по амплитуде и нормализации replay gain ))
Вообще, уже думаю, пора выпускать в бета-тестирование хоть какую-то версию. Сделано уже достаточно много, и нужен обратный фидбэк и баги ))