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

Я Беслан, 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, но с ними менее интересно - у них и так написано, какой битрейт/кодек у какого трека (да и у них нет моей музыки, а у Яндекса есть).

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

Комментарии (26)


  1. sovid
    22.08.2024 03:13

    Очень было интересно, спасибо за статью)


  1. CitizenOfDreams
    22.08.2024 03:13
    +13

    Поискал первого попавшегося исполнителя на букву "A".

    Bandcamp - 50 треков.

    SoundCloud - 70 треков.

    Yandex Music - 2 трека, 3 просмотра в месяц. Проверять, lossless они или нет, уже не стал.

    Зато русский рэп там представлен в изобилии, а его просмотры измеряются сотнями тысяч.


    1. Alterise
      22.08.2024 03:13
      +1

      Рассказать почему? Или и так понятно?)


  1. alexhott
    22.08.2024 03:13

    Еще немножко покрутить базу и можно наверно скачанные треки на ПК слить?


    1. shelomitsky2011
      22.08.2024 03:13
      +2

      Ну если вы спец в криптографии и сумеете это взломать - через пару годиков, думаю, сможете)


      1. redfox0
        22.08.2024 03:13

        Разве на скриншоте не прямые ссылки на скачивание файлов?


        1. shelomitsky2011
          22.08.2024 03:13
          +2

          Охх, если это так, то я чувствую испанский стыд.


        1. ganzmavag
          22.08.2024 03:13

          Они там вроде зашифрованные


    1. konst90
      22.08.2024 03:13
      +1

      Есть расширения для Хрома, которые просто добавляют на страничку Яндекс-музыки кнопку для скачивания.


  1. coodi
    22.08.2024 03:13

    Раньше же был mp3 320 в качестве hq?


  1. mirwide
    22.08.2024 03:13

    Круто. Как какую-нибудь ерунду, они рекламируют со всех щелей, а тут реально полезный функционал и молчат. Нужно еще чтобы приложение захватывало эксклюзивный доступ к USB ЦАП.


  1. WinLin2
    22.08.2024 03:13

    Когда из-за музыки проезжающей машины звенят стекла на 3 этаже, наверно это тоже меломаны едут. Обкуренные


    1. hyperwolf
      22.08.2024 03:13

      Причем они к владельцу смартфона с наушниками?


      1. WinLin2
        22.08.2024 03:13

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

        Такое только с возрастом пройдет или когда свой ребенок появится, тогда придется самому ходить к соседу.

        Можно и дальше минусовать.


  1. nuearth
    22.08.2024 03:13
    +7

    Все это прекрасно, и я даже как-то решил завести часть плейлистов на Яндекс музыку, ибо это действительно удобно, но когда в 22м стремительно начали исчезать треки, очевидно по запросам правообладателей, я понял что пусть все остается как есть, коллекция музыки скачанная еще во времена "свободного интернета" во flac на моем хранилище. Ну и коллекция пластинок, как что-то совсем физически ощутимое, что иногда приятно послушать, а Яндекс музыка, она живет конечно, но большей части того, что интересно мне, там просто нет. На мой взгляд все эти "музыки" расcчитаны на "широкий круг читателей" и не подходят тем, у кого вкусы далеки от этого. Самый хороший рабочий вариант, который позволял находить похожее, из того что ранее не слышал, был Last.fm в эпоху Foobar...


    1. PanDubls
      22.08.2024 03:13

      Надо сказать, что, по иронии, из VK (который естественно плох откуда не посмотри) из моих треков ничего не исчезло и есть там практически всё, что можно вообразить, вплоть до десятичасовой записи кашля Льюиса Армстронга (пример вымышленный, к сожалению).


  1. foxyrus
    22.08.2024 03:13
    +2

    Я бы не сильно так доверял атрибутам в БД, а подсчитал бы средний размер (а если есть атрибут длительность и реальный битрейт) файлов (блобов).


  1. stone_evil
    22.08.2024 03:13
    +4

    Когда в Я.Музыку вернется хотя бы половина любимых исполнителей, тогда и порадуемся за качество.


  1. Ilya_JOATMON
    22.08.2024 03:13
    +5

    Яндексу ничто не мешает перекодировать mp3 -> flac и заявить о лосслесс. Жду проверки по сонограмме или бинарного сравнения с треком с CD


    1. teodorso
      22.08.2024 03:13

      все треки принимаются дистрибьюторами исключительно в формате wav. другой вопрос в добросовестности тех, кто заливает файлы (представители музыканта или сам музыкант), если они не перекодировали mp3 в wav, то всё будет нормально


      1. printf
        22.08.2024 03:13

        В Apple Music есть треки, сохраненные с ютуба (!)

        (Легко отследить т.к. в ютубе трек был криво обрезан. Хоть не стали «лосслесс» писать, уже хорошо.)


  1. printf
    22.08.2024 03:13
    +1

    Ну т.е. ответ на вопрос в заголовке поста — лосслесс треков мало. (Приятно удивлен, что они вообще есть — могли ведь просто соврать.)

    В некоторых сравнениях кодеков утверждается, что AAC на битрейте 256 звучит не хуже, чем например flac

    В некоторых сравнениях авто утверждается, что Лада под горку едет не хуже, чем например BMW

    Lossless это не спекулятивная характеристика.


    1. ganzmavag
      22.08.2024 03:13

      Там вообще как достоинство AAC указана психоакустическая модель, как будто в MP3 ее нет.


  1. teodorso
    22.08.2024 03:13
    +1

    есть ощущение, как будто фразы по типу "услышал больше деталей" — как раз начало того самого аудиофильства. детали зависят не столько от битрейта (если мы говорим про диапазон 256 aac/320 mp3 — ~1000), а от мастеринга и компрессии финального микса песни. иначе говоря, важен источник, с которого сделали тот же 320, а не кодек и битрейт. как раз поэтому винил (и винил рипы) звучит приятнее, его не задела война громкостей


    1. Dmitry_604
      22.08.2024 03:13
      +2

      "смотря какой fabric, смотря сколько details" :) Вообще конечно интересно меломанам слепой тест устроить на их повседневных устройствах, например, 320К vs flac, много кто пройдет? :)


  1. ganzmavag
    22.08.2024 03:13

    Что-то здесь не то:

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

    и при этом

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

    Из трех кодеков lossless умеет только FLAC. И у вас выходит, что 62% = 27%.