5 января 2018 г.

Как работает Now Playing в Google Pixel 2

Now Playing распознал гимн СССР
    Да нет никакой тайны, как работает распознавание окружающей музыки в Pixel 2. Тут, скорее, интересны мелкие детали. Если вы не знаете, что такого особенного в Now Playing и чем это отличается от распознавание другими инструментами, тем же Ассистентом (Google Now для России, где ещё нет Ассистента) или же Google Music, то мне есть чем вас удивить. Ключевыми особенностями Now Playing в том, что оно во-перых работает оффлайн, ей не нужен Интернет, во-вторых ей не нужна специальная команда для начала распознавания трека.
    Если вас это заинтересовало хотя бы с точки зрения реализации, то добро пожаловать под кат.

    Как и всегда раньше, я предлагаю вам читать описание в оригинале. Там ещё больше информации, но, к сожалению, воды там ещё больше. В общем, для понимания особенностей работы достаточно или прочесть вот эту, или же вот эти две оригинальные: https://venturebeat.com/2017/10/19/how-googles-pixel-2-now-playing-song-identification-works/ и https://www.xda-developers.com/google-pixel-2-now-playing-song-list/

    Начнём с того, что Now Playing не является альтернативным интерфейсом к существующим Google Now, Google Misic или какого-нибудь Shazam. Это самостоятельное приложение, вот оно: https://play.google.com/store/apps/details?id=com.google.intelligence.sense Скорее всего его нельзя установить из Маркета на не-Пиксели, а если взять apk, то, скорее всего, оно не будет работать на не-Пикселях.

    Так, у нас есть приложение. Оно должно слушать окружение. Да, так и происходит. На современных процессорах есть возможность слушать окружение постоянно без заметного влияния на батарейку. Благодаря этому все современные мобильне устройства могут просыпаться на голосовые команды, а раньше это работало только при включенном экране, либо если телефон был на зарядке.

    Теперь у нас есть приложение, у нас есть аппаратная поддержка для постоянной прослушки окружения (где-то с 2014 года точно). Значит нужно слушать. Now Playing слушает окружение каждые 60 секунд и тратит на распознавание буквально несколько секунд, оно действительно быстрее, чем привычное распознавание онлайн (на КДПВ хватило отрезка в 4 секунды!). В итоге может сложиться ситуация, что трек сменился, играет уже другой, а отображается пока всё ещё предыдущий.

    Остался оффлайн. Очевидно, что на устройстве есть база треков. Но на сколько она большая? Сколько она весит? Ну, весит она чуть больше 50 мегабайт и является файлом matcher.leveldb, который находится в /system/etc/ambient. Энтузиасты с XDA быстро написали скрипт, который распарсил базу и выдрал названия треков. Получилось более 17 тысяч записей, вот они: http://quinny898.co.uk/resources/pixel-songs/ Впрочем, Google утверждают, что файл этот обновляется по Wi-Fi и учитывает региональные топы.
    И я не знаю, как на счёт региональных особенностей в регионе, где Pixel 2 и не продаётся официально, но то, что файл обновляется — это совершенно точно. Как видно всё на той же картинке, у меня распознался гимн СССР, которого раньше в базе не было. А вот гимн России не был распознан. Возможно это что-то должно означать, но я пока не понимаю, что именно.

    Теперь осталось показать информацию о треке, если пользователь тапнул на уведомление. В этом случае открывается Ассистент, который делает запрос в Гугл об уже распознанном треке, вытягия про него чуть больше инфы и на этом всё:
Информация о гимне СССР у Ассистента забавная
Об Engel Ассистент нарыл гораздо больше информации, включая текст


    Собственно, вот так работает эта магия. Не сказать, что плохо, но всё же чувствую себя немного обманутым. Фичу можно было бы сделать более увесистой и с большими возможностями. И, самое главное, она должна быть доступна на всех современных Android устройствах, а не быть эксклюзивом дорогущего Pixel 2.

    P. S.: Фича по умолчанию отключена. Settings → Sound → Now Playing

Комментариев нет:

Отправить комментарий