Я Беслан, 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, но с ними менее интересно - у них и так написано, какой битрейт/кодек у какого трека (да и у них нет моей музыки, а у Яндекса есть).
Ребята из Яндекс Музыки - люблю вас, спасибо!
Надеюсь, вы не сильно обижаетесь, что я поковырялся в своих локальных данных))
Автор: windoozatnick