Сколько, реально, lossless треков в Яндекс Музыке

от автора

Хабр, привет!

Я Беслан, IT-шник по любви, искренне увлеченный этим всем.

Люблю ковыряться в коде, писать код, прошивать всё что можно, поднимать инфру на линуксах, собирать роботов, datascience, нейронки, LLM-ки, и много ещё всего такого, вы поняли.

Помимо всего этого, я очень люблю хороший звук.
Не могу назвать себя прям аудиофилом, ибо провода никогда не прогревал, и усилок на пирамидки не ставил.
Но всё равно люблю хороший звук:

  • Слушаю дома lossless музыку на напольных колонках и через хороший усилок (соседи иногда приходят)

  • Слушаю дома старый добрый винил через этот же усилок и колонки (знали бы, как звучит Юрий Антонов на виниле)

  • Ношу android телефон с USB ЦАП-ом как второй, чтобы слушать через него то, что скачал, как в старые добрые времена (неудобно жесть)

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

Конечно же, я сразу обновил приложения, поставил лучшее качество музыки, и послушал — оно прям зазвучало!
Не, правда. Я пробовал Tidal через наушники, и Яндекс.Музыка проигрывала ему тогда по качеству звука.
Сейчас же я прям стал слышать СИЛЬНО больше деталей, а это даже через iPhone по bluetooth, с его кодеком AAC, который задушен на битрейт 320 килобит (а в реальности мои наушники могут только 256).
С Android телефоном разница так вообще улетела в космос, между тем что было, и тем, что стало — спасибо кодеку LDAC от Sony, который тащит 990 килобит и позиционируется как кодек без сжатия, но в реальности «почти без сжатия, но с сжатием».

Короче, стало сильно лучше, я обрадовался, что можно не носить теперь с собой здоровенный ЦАП и не хранить на флешке 100+ Gb всяких дискографий, а слушать прямо из стриминга и по воздуху — это же реально удобно, ибо рекомендации у Яндекса просто лучшие, и разнообразие решает.

Но вот один вопрос не давал мне покоя — какое реальное качество у треков, и сколько их каких.

В своем анонсе ребята писали, что добавили «flac, и другие высококачественные форматы»» — вот эти «и другие» мне и захотелось посчитать.

Само приложение Я.Музыки не пишет ни битрейт, ни частоту дискретизации, ни кодек, ни даже просто «качество».

Штош, раз не пишет, мы попробуем узнать сами…

Сначала нужно выставить в приложении Я.Музыки максимальное качество, и скачать весь плейлист с лайками — у меня это чуть больше 1.5к треков.
Будем считать, что мои треки, это репрезентативная выборка, отражающая генеральную совокупность.

Далее, чтобы узнать качество, мы должны вспомнить, что каждое приложение хранит локально какие-то свои данные.
И если на телефоне есть права суперпользователя, эти данные можно посмотреть.

Благо, на моей кастомной прошивке android телефона права суперпользователя уже были встроены в ядро, и оставалось поставить только менеджер для управления этими правами.

Сказано — сделано, накатил KernelSU, проверил в Termux что всё работает.

Дальше, нам нужно поковыряться в данных, которые хранит Я.Музыка, и найти там какую-то базу, в которой есть табличка с треками, которые я скачал, и информацией о них.

Можно ковыряться руками, но это не очень удобно — давайте возьмем приложение MyAndroidTools. Хоть оно и не обновлялось 5 лет, но прекрасно работает и сейчас.
Для чего оно изначально создавалось, это отдельная история, но нас интересует та его часть, которая позволяет просматривать базы данных приложений, ей и воспользуемся.

Открываем MyAndroidTools, находим Яндекс Музыку (ту, которая именно android приложение, а не сайт, отображаемый через webview), проваливаемся в неё, смотрим базы.

Хихикаем с базы chunk_norris, идём дальше)))

Скажу честно, я просто потыкал все подряд, и нашел нужное — информация о моих треках живет в базе UserDb_999999999, в табличке tracks_cache (ID пользователя я заменил, у вас будет свой).

Далее, нам нужно утащить эту базу на десктоп, чтобы её там покрутить.
Заходим в Termux прямо на телефоне, логинимся суперпользователем через sudo su, и копируем базу из папки приложения Я.Музыки в пользовательское пространство, например, на внутренний накопитель:
cp /data/data/ru.yandex.music/databases/userDb_999999999 /storage/XXY9-A77B/
(ID накопителя тоже радномный, свой посмотрите сами).

Потом, значит, копируем этот файл на компьютер. Можно просто по проводу, но я сделал через adb по wifi:
adb pull /storage/XXY9-A77B/userDb_999999999 /Users/windoozatnick/Desktop/

Теперь пора открыть эту базу, и начать писать к ней SQL запросы.

Ставим DBeaver, если у вас еще нет, создаем новое подключение, выбираем SQLite, выбираем нужны файл — всё готово, вы прекрасны.

Видим базу, видим таблички, пробуем выполнить SELECT * FROM tracks_cache — оно работает.

Штош, пора писать запросы.

Нас интересуют следующие столбцы:

  • realQuality — столбец, в котором Яндекс пишет то, как они для себя определяют качество, я так понимаю

  • codec — собственно, кодек, в котором закодирован трек

  • bitrate — битрейт трека

Но, со столбцом bitrate есть прикол — для flac треков там указан нулевой bitrate. Почему так сделано, я не знаю, но давайте это исправим, и решим так — если битрейт 0, то мы будем считать, что он равен 1000 (средний битрейт для flac файлов).

Проверяем первым запросом, что 0 битрейт только у flac файлов — да, это так.

Далее, делаем первый взгляд сверху, и смотрим, сколько треков в каждом из realQuality

Если перевести realQuality в проценты, то будет так:
Lossless — 62%
High — 35%
Normal — 3%

Окей, мы поняли разбивку по ярлычкам Яндекса, теперь давайте посмотрим, что по кодекам

По кодекам оно так:
aac — 71%
flac — 27%
mp3 — 2%

Ну и теперь самое интересное — давайте посмотрим по битрейтам

По битрейтам расклад такой:
256 — 68%
1000 — 27%
320 — 2%
128 — 1.6%
192 — 1.4%

Видим, что больше половины треков в битрейте 256 — будто бы, звучит не очень.
Давайте проверим комбинации кодек + битрейт, и после я расскажу, зачем

Видим следующее:
aac + 256 — 68%
flac + 1000 — 27%
mp3 + 320 — 2%
aac + 128 — 1.6%
aac + 192 — 1.4%

Видим, что большинство треков выложены в связке AAC + 256, и это хорошо, давайте расскажу, почему.

AAC позиционируется как «психоакустический кодек», то есть, как любой кодек с потерями, он откидывает часть музыкального потока, но откидывает именно то, что либо не улавливается человеческим ухом, либо улавливается слабо.

Говоря коротко, AAC выкинет то, что и так было сложно услышать.

В некоторых сравнениях кодеков утверждается, что AAC на битрейте 256 звучит не хуже, чем например flac через aptxHD на битрейте 512 (как ловко я сравнил кодек файла с bluetooth кодеком, а!).

Но тут пусть придут «настоящие аудиофилы», и напишут, почему все кодеки плохие, и почему нужно слушать по прогретому проводу через ламповый усилок.

Дальше давайте посмотрим еще комбинацию realQuality c bitrate

И комбинацию всех трех столбцов

Переводить в проценты мне лень, извинити))
Если хотить переводить сами, то 100% это 1631

Вывод

Яндекс — большие молодцы.
Чисто на слух — это стало звучать СИЛЬНО лучше, особенно через LDAC.
Цифры говорят нам, что битрейты не самые максимальные, но кодек выбран удачно, и звучит всё хорошо.
Официально заявляю, что уберу в тумбочку USB ЦАП, и буду слушать Яндекс Музыку в качестве.

Если хотите, чтобы я проделал такое с другими стримингами, пишите.
Думаю, такое возможно проделать с СберЗвуком, у них тоже заявлен hi-fi.
В теории, можно и с Tidal, но с ними менее интересно — у них и так написано, какой битрейт/кодек у какого трека (да и у них нет моей музыки, а у Яндекса есть).

Ребята из Яндекс Музыки — люблю вас, спасибо!
Надеюсь, вы не сильно обижаетесь, что я поковырялся в своих локальных данных))


ссылка на оригинал статьи https://habr.com/ru/articles/837700/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *