Хабр, привет!
Я Беслан, 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), проваливаемся в неё, смотрим базы.
![](https://habrastorage.org/getpro/habr/upload_files/151/e50/a53/151e50a53845beb7b10a90e3fd83c947.jpg)
Хихикаем с базы chunk_norris, идём дальше)))
Скажу честно, я просто потыкал все подряд, и нашел нужное - информация о моих треках живет в базе UserDb_999999999, в табличке tracks_cache (ID пользователя я заменил, у вас будет свой).
![](https://habrastorage.org/getpro/habr/upload_files/3f4/4a1/9da/3f44a19da3d52626085d9ba6ed0dabc4.jpg)
Далее, нам нужно утащить эту базу на десктоп, чтобы её там покрутить.
Заходим в 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 - оно работает.
![](https://habrastorage.org/getpro/habr/upload_files/fbe/92d/1ab/fbe92d1ab42a2e2544d089481f775fd0.png)
Штош, пора писать запросы.
Нас интересуют следующие столбцы:
realQuality - столбец, в котором Яндекс пишет то, как они для себя определяют качество, я так понимаю
codec - собственно, кодек, в котором закодирован трек
bitrate - битрейт трека
Но, со столбцом bitrate есть прикол - для flac треков там указан нулевой bitrate. Почему так сделано, я не знаю, но давайте это исправим, и решим так - если битрейт 0, то мы будем считать, что он равен 1000 (средний битрейт для flac файлов).
Проверяем первым запросом, что 0 битрейт только у flac файлов - да, это так.
![](https://habrastorage.org/getpro/habr/upload_files/d6a/a82/687/d6aa82687b6ecee803260bfa3dda53e6.png)
Далее, делаем первый взгляд сверху, и смотрим, сколько треков в каждом из realQuality
![](https://habrastorage.org/getpro/habr/upload_files/8d9/6ea/1cf/8d96ea1cf04f9e16a40c52aec9e9e0cf.png)
Если перевести realQuality в проценты, то будет так:
Lossless - 62%
High - 35%
Normal - 3%
Окей, мы поняли разбивку по ярлычкам Яндекса, теперь давайте посмотрим, что по кодекам
![](https://habrastorage.org/getpro/habr/upload_files/98e/fdc/3b2/98efdc3b252d74ce5d7acbed7893763d.png)
По кодекам оно так:
aac - 71%
flac - 27%
mp3 - 2%
Ну и теперь самое интересное - давайте посмотрим по битрейтам
![](https://habrastorage.org/getpro/habr/upload_files/555/4c5/997/5554c5997a6bb88bb27bc8e328f22ca8.png)
По битрейтам расклад такой:
256 - 68%
1000 - 27%
320 - 2%
128 - 1.6%
192 - 1.4%
Видим, что больше половины треков в битрейте 256 - будто бы, звучит не очень.
Давайте проверим комбинации кодек + битрейт, и после я расскажу, зачем
![](https://habrastorage.org/getpro/habr/upload_files/3aa/721/f23/3aa721f236910178f0737d69df759095.png)
Видим следующее:
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
![](https://habrastorage.org/getpro/habr/upload_files/0a3/530/350/0a3530350fd5afafce8b8f27e706ad5e.png)
И комбинацию всех трех столбцов
![](https://habrastorage.org/getpro/habr/upload_files/bb8/4d7/0d8/bb84d70d8b9dac78e074cb5b148ad8ed.png)
Переводить в проценты мне лень, извинити))
Если хотить переводить сами, то 100% это 1631
Вывод
Яндекс - большие молодцы.
Чисто на слух - это стало звучать СИЛЬНО лучше, особенно через LDAC.
Цифры говорят нам, что битрейты не самые максимальные, но кодек выбран удачно, и звучит всё хорошо.
Официально заявляю, что уберу в тумбочку USB ЦАП, и буду слушать Яндекс Музыку в качестве.
Если хотите, чтобы я проделал такое с другими стримингами, пишите.
Думаю, такое возможно проделать с СберЗвуком, у них тоже заявлен hi-fi.
В теории, можно и с Tidal, но с ними менее интересно - у них и так написано, какой битрейт/кодек у какого трека (да и у них нет моей музыки, а у Яндекса есть).
Ребята из Яндекс Музыки - люблю вас, спасибо!
Надеюсь, вы не сильно обижаетесь, что я поковырялся в своих локальных данных))
Комментарии (26)
CitizenOfDreams
22.08.2024 03:13+13Поискал первого попавшегося исполнителя на букву "A".
Bandcamp - 50 треков.
SoundCloud - 70 треков.
Yandex Music - 2 трека, 3 просмотра в месяц. Проверять, lossless они или нет, уже не стал.
Зато русский рэп там представлен в изобилии, а его просмотры измеряются сотнями тысяч.
alexhott
22.08.2024 03:13Еще немножко покрутить базу и можно наверно скачанные треки на ПК слить?
shelomitsky2011
22.08.2024 03:13+2Ну если вы спец в криптографии и сумеете это взломать - через пару годиков, думаю, сможете)
konst90
22.08.2024 03:13+1Есть расширения для Хрома, которые просто добавляют на страничку Яндекс-музыки кнопку для скачивания.
mirwide
22.08.2024 03:13Круто. Как какую-нибудь ерунду, они рекламируют со всех щелей, а тут реально полезный функционал и молчат. Нужно еще чтобы приложение захватывало эксклюзивный доступ к USB ЦАП.
WinLin2
22.08.2024 03:13Когда из-за музыки проезжающей машины звенят стекла на 3 этаже, наверно это тоже меломаны едут. Обкуренные
hyperwolf
22.08.2024 03:13Причем они к владельцу смартфона с наушниками?
WinLin2
22.08.2024 03:13>Слушаю дома lossless музыку на напольных колонках и через хороший усилок (соседи иногда приходят)
Такое только с возрастом пройдет или когда свой ребенок появится, тогда придется самому ходить к соседу.
Можно и дальше минусовать.
nuearth
22.08.2024 03:13+7Все это прекрасно, и я даже как-то решил завести часть плейлистов на Яндекс музыку, ибо это действительно удобно, но когда в 22м стремительно начали исчезать треки, очевидно по запросам правообладателей, я понял что пусть все остается как есть, коллекция музыки скачанная еще во времена "свободного интернета" во flac на моем хранилище. Ну и коллекция пластинок, как что-то совсем физически ощутимое, что иногда приятно послушать, а Яндекс музыка, она живет конечно, но большей части того, что интересно мне, там просто нет. На мой взгляд все эти "музыки" расcчитаны на "широкий круг читателей" и не подходят тем, у кого вкусы далеки от этого. Самый хороший рабочий вариант, который позволял находить похожее, из того что ранее не слышал, был Last.fm в эпоху Foobar...
PanDubls
22.08.2024 03:13Надо сказать, что, по иронии, из VK (который естественно плох откуда не посмотри) из моих треков ничего не исчезло и есть там практически всё, что можно вообразить, вплоть до десятичасовой записи кашля Льюиса Армстронга (пример вымышленный, к сожалению).
foxyrus
22.08.2024 03:13+2Я бы не сильно так доверял атрибутам в БД, а подсчитал бы средний размер (а если есть атрибут длительность и реальный битрейт) файлов (блобов).
stone_evil
22.08.2024 03:13+4Когда в Я.Музыку вернется хотя бы половина любимых исполнителей, тогда и порадуемся за качество.
Ilya_JOATMON
22.08.2024 03:13+5Яндексу ничто не мешает перекодировать mp3 -> flac и заявить о лосслесс. Жду проверки по сонограмме или бинарного сравнения с треком с CD
teodorso
22.08.2024 03:13все треки принимаются дистрибьюторами исключительно в формате wav. другой вопрос в добросовестности тех, кто заливает файлы (представители музыканта или сам музыкант), если они не перекодировали mp3 в wav, то всё будет нормально
printf
22.08.2024 03:13В Apple Music есть треки, сохраненные с ютуба (!)
(Легко отследить т.к. в ютубе трек был криво обрезан. Хоть не стали «лосслесс» писать, уже хорошо.)
printf
22.08.2024 03:13+1Ну т.е. ответ на вопрос в заголовке поста — лосслесс треков мало. (Приятно удивлен, что они вообще есть — могли ведь просто соврать.)
В некоторых сравнениях кодеков утверждается, что AAC на битрейте 256 звучит не хуже, чем например flac
В некоторых сравнениях авто утверждается, что Лада под горку едет не хуже, чем например BMW
Lossless это не спекулятивная характеристика.
ganzmavag
22.08.2024 03:13Там вообще как достоинство AAC указана психоакустическая модель, как будто в MP3 ее нет.
teodorso
22.08.2024 03:13+1есть ощущение, как будто фразы по типу "услышал больше деталей" — как раз начало того самого аудиофильства. детали зависят не столько от битрейта (если мы говорим про диапазон 256 aac/320 mp3 — ~1000), а от мастеринга и компрессии финального микса песни. иначе говоря, важен источник, с которого сделали тот же 320, а не кодек и битрейт. как раз поэтому винил (и винил рипы) звучит приятнее, его не задела война громкостей
Dmitry_604
22.08.2024 03:13+2"смотря какой fabric, смотря сколько details" :) Вообще конечно интересно меломанам слепой тест устроить на их повседневных устройствах, например, 320К vs flac, много кто пройдет? :)
ganzmavag
22.08.2024 03:13Что-то здесь не то:
Если перевести realQuality в проценты, то будет так:
Lossless - 62%
High - 35%
Normal - 3%и при этом
По кодекам оно так:
aac - 71%
flac - 27%
mp3 - 2%Из трех кодеков lossless умеет только FLAC. И у вас выходит, что 62% = 27%.
sovid
Очень было интересно, спасибо за статью)