Модифицируем Bluetooth-стек для улучшения звука на наушниках без кодеков AAC, aptX и LDAC

    Перед прочтением этой статьи рекомендуется ознакомиться с предыдущей статьёй: Аудио через Bluetooth: максимально подробно о профилях, кодеках и устройствах / in English

    Некоторые пользователи беспроводных наушников отмечают низкое качество звука и недостаток высоких частот при использовании стандартного Bluetooth-кодека SBC, который поддерживают все аудиоустройства. Частой рекомендацией для улучшения звука является покупка устройств и наушников с поддержкой кодеков aptX и LDAC. Эти кодеки требуют лицензионных отчислений, поэтому устройства с их поддержкой стоят дороже.

    Оказывается, низкое качество SBC обусловлено искусственными ограничениями Bluetooth-стеков и настроек наушников, и это ограничение можно обойти на любых существующих устройствах, путём программных изменений смартфона или компьютера.

    Кодек SBC

    У кодека SBC есть множество разных параметров, которые согласуются на этапе установки соединения. Среди них:

    • Количество и тип каналов: Joint Stereo, Stereo, Dual Channel, Mono;
    • Количество частотных полос: 4 или 8;
    • Количество блоков в пакете: 4, 8, 12, 16;
    • Алгоритм распределения битов при квантовании: Loudness, SNR;
    • Максимальное и минимальное значение пула битов, используемых при квантовании (bitpool): обычно, от 2 до 53.


    Декодирующее устройство обязано поддерживать любое сочетание этих параметров. Кодирующее устройство может реализовывать не все.
    Существующие Bluetooth-стеки, как правило, согласуют следующий профиль: Joint Stereo, 8 полос, 16 блоков, Loudness, bitpool 2..53. Этот профиль кодирует 44.1 кГц аудио с битрейтом 328 кбит/с.
    Параметр bitpool напрямую влияет на битрейт в рамках одного профиля: чем он выше, тем выше битрейт, а следовательно и качество.
    Однако параметр bitpool не привязан к конкретному профилю; влияние на битрейт также в значительной степени оказывает и другие параметры: тип каналов, количество частотных полос, количество блоков. Поднять битрейт можно косвенно, путем согласования нестандартных профилей, без изменения bitpool.

    $ bitrate = \frac{8 \times frame\_length \times sample\_rate}{subbands \times blocks} $


    Формула подсчета битрейта SBC


    Например, режим Dual Channel кодирует каналы раздельно, используя весь bitpool для каждого из каналов. Заставив устройство использовать Dual Channel вместо Joint Stereo, мы получим почти удвоенный битрейт при том же максимальном значении bitpool: 617 кбит/с.
    По моему мнению, использование не привязанного к профилю значения bitpool на этапе согласования — недоработка стандарта A2DP, которая и привела к искусственному ограничению качества SBC. Разумней было бы согласовывать bitrate, а не bitpool.

    Такие фиксированные значения Bitpool и Bitrate берут свое начало из таблицы с рекомендованными к использованию значениями для высококачественного аудио. Но рекомендация — не повод ограничиваться этими значениями.

    Таблица профилей Bluetooth SBC

    Спецификация A2DP v1.2, которая была активна с 2007 по 2015 год, предписывает всем декодирующим устройствам корректно работать с битрейтами до 512 кбит/с:

    The decoder of the SNK shall support all possible bitpool values that do not result in excess of the maximum bit rate. This profile limits the available maximum bit rate to 320kb/s for mono, and 512kb/s for two-channel modes.


    В новой версии спецификации ограничение по битрейту отсутствует. Предполагается, что современные наушники, выпущенные после 2015 года и поддерживающие EDR, могут поддерживать битрейты до ≈730 кбит/с.

    По какой-то причине, у проверенных мной Bluetooth-стеков Linux (PulseAudio), Android, Blackberry и macOS есть искусственные ограничения максимального значения параметра bitpool, который напрямую влияет на максимальный битрейт. Но это — не самая большая проблема, почти все наушники тоже ограничивают максимальное значение bitpool числом 53.
    Как я уже успел убедиться, большинство устройств отлично работает на модифицированном Bluetooth-стеке с битрейтом в 551 кбит/с, без прерываний и треска. Но такой битрейт никогда не будет согласован в обычных условиях, на обычных Bluetooth-стеках.

    Модифицируем Bluetooth-стек

    В любом Bluetooth-стеке, который совместим со стандартом A2DP, есть поддержка режима Dual Channel, но активировать её из интерфейса не представляется возможным.

    Давайте добавим переключатель в интерфейс! Я сделал патчи для Android 8.1 и Android 9, которые добавляют полноценную поддержку Dual Channel в стек, добавляют режим в меню переключения режима в инструменты разработчика, и обрабатывают SBC с поддержкой Dual Channel так, будто это дополнительный кодек, вроде aptX, AAC или LDAC (Android называет это HD Audio), добавляя галочку в настройки Bluetooth-устройства. Вот как это выглядит:

    image

    Патч для Android 9
    Патч для Android 8.1

    При активации галочки, Bluetooth-аудио начинает передаваться с битрейтом 551 кбит/с, если наушники поддерживают соединение на скорости 3 мбит/с, или 452 кбит/с, если наушники поддерживают только 2 мбит/с.

    Данный патч включён в следующие альтернативные прошивки:
    • LineageOS
    • Resurrection Remix
    • crDroid


    Откуда взялись 551 и 452 кбит/с?

    Технология разделения эфира в Bluetooth предназначена для эффективной передачи больших пакетов фиксированного размера. Передача данных происходит слотами, самое большое количество слотов, отправляемых за одну передачу — 5. Также есть режимы передачи, использующие 1 или 3 слот, но не 2 или 4. В 5 слотах можно передать до 679 байт на скорости соединения 2 мбит/с и до 1021 байт на скорости 3 мбит/с, а в 3 — 367 и 552 байта соответственно.

    image

    Если мы хотим передать меньше данных, чем 679 или 1021 байт, но больше, чем 367 или 552 байта, то передача всё равно займет 5 слотов, а данные будет передаваться за такое же время, что уменьшает эффективность передачи.

    image

    SBC в режиме Dual Channel, на 44100 Гц-аудио с параметрами Bitpool 38, 16 блоков во фрейме, 8 частотных диапазонов, кодирует аудио во фреймы размером 164 байт, с битрейтом 452 кбит\с.
    Аудио должно быть инкапсулировано в протоколы передачи L2CAP и AVDTP, которые забирают 16 байт от полезной аудионагрузки.

    $\begin{align*} framelength &= 4 + \frac{subbands \times channels}{2} + \\ & \begin{cases} \frac{blocks \times channels \times bitpool}{8} & \text{if mono or dual channel mode} \\ \frac{subbands+blocks \times bitpool}{8} & \text{if joint stereo mode} \\ \frac{blocks \times bitpool}{8} & \text{if stereo mode} \\ \end{cases} \end{align*}$





    Таким образом, в одну Bluetooth-передачу с 5 слотами удаётся вместить 4 аудиофрейма:
    679 (EDR 2 mbit/s DH5) - 4 (L2CAP) - 12 (AVDTP/RTP) - 1 (заголовок SBC) - (164*4) = 6

    Мы вместили 11.7 мс аудиоданных в отправляемый пакет, который будет передан за 3.75 мс, и у нас осталось 6 неиспользованных байт в посылке.
    Если чуть поднять bitpool, 4 аудиофрейма уже не удастся упаковать в одну посылку. Придётся отправлять по 3 фрейма за раз, что снижает эффективность передачи, уменьшает количество передаваемого аудио за одну посылку, и быстрее приведёт к заиканиям аудио при плохих радиоусловиях.

    Таким же образом был подобран битрейт 551 кбит/с для EDR 3 мбит/с: с Bitpool 47, 16 блоками во фрейме, 8 частотными диапазонами получается размер фрейма 200 байт, при битрейте 551 кбит/с. В одну посылку вмещается 5 фреймов или 14.6 мс музыки.

    Алгоритм расчёта всех параметров SBC достаточно сложный, можно легко запутаться, если считать вручную, поэтому я сделал интерактивный калькулятор в помощь интересующимся: btcodecs.valdikss.org.ru/sbc-bitrate-calculator

    Зачем всё это нужно?

    Вопреки расхожему мнению о качестве звука кодека aptX, на некоторых файлах он может давать результаты хуже, чем SBC со стандартным битрейтом в 328 кбит/с.

    SBC динамически выделяет биты квантования для частотных полос, действуя по принципу «от нижних к верхним». Если весь битрейт использовался на нижние и средние частоты, верхние частоты «обрежутся» (вместо них будет тишина).
    aptX квантует частотные полосы одним и тем же количеством бит постоянно, из-за чего у него постоянный битрейт: 352 кбит/с для 44.1 кГц, 384 кбит/с для 48 кГц, и он не может «перенести биты» на те частоты, которые больше всего в них нуждаются. В отличие от SBC, aptX не будет «обрезать» частоты, а будет добавлять в них шумы квантования, уменьшая динамический диапазон аудио, и иногда привносить характерные потрескивания. SBC же «съедает детали» — отбрасывает наиболее тихие участки.
    В среднем, по сравнению с SBC 328k, aptX вносит меньше искажений в музыку с широким частотным диапазоном, но на музыке с узким диапазоном частот и широким динамическим диапазоном SBC 328k иногда выигрывает.

    Рассмотрим частный случай. Спектрограмма записи игры на фортепиано:
    image

    Основная энергия лежит в частотах от 0 до 4 кГц, и продолжается до 10 кГц.
    Спектрограмма файла, сжатого в aptX, выглядит следующим образом:
    image

    А так выглядит SBC 328k.
    image

    Видно, что SBC 328k периодически полностью отключал диапазон выше 16 кГц, и расходовал весь доступный битрейт на диапазоны ниже этого значения. Однако, aptX внес больше искажений в слышимый человеческим ухом спектр частот, что можно видеть на вычтенной оригинальной спектрограмме из спектрограммы aptX (чем ярче, тем больше искажений):
    image

    В то время как SBC 328k меньше испортил сигнал в диапазоне от 0 до 10 кГц, а остальное — обрезал:
    image

    Битрейта 485k SBC хватило, чтобы сохранить весь диапазон частот, без отключения полос.
    image

    SBC 485k на этой композиции значительно опережает aptX в диапазоне 0-15 кГц, и с меньшей, но все же заметной разницей — в 15-22 кГц (чем темнее, тем меньше искажений):
    image

    Архив оригинального аудио, SBC и aptX.

    Переключившись на высокобитрейтный SBC, вы получите звук, зачастую превосходящий aptX, на любых наушниках. На наушниках, поддерживающих подключение EDR 3 мбит/с, битрейт 551 кбит/с даёт звук, сравнимый с aptX HD.

    А можно ещё больше?

    В патче для Android также имеется опция для ещё большего повышения битрейта для устройств EDR 2 мбит/с. Можно повысить битрейт с 452 кбит/с до 595 кбит/с, ценой уменьшения стабильности передачи в сложных радиоусловиях.
    Достаточно установить переменную persist.bluetooth.sbc_hd_higher_bitrate в значение 1:
    # setprop persist.bluetooth.sbc_hd_higher_bitrate 1

    Патч на экстремальный битрейт пока принят только в LineageOS 15.1, но не в 16.0.

    Совместимость с устройствами

    SBC Dual Channel поддерживается практически всеми наушниками, колонками и автомобильными головными устройствами. Это немудрено — стандарт предписывает его поддержку в любых декодирующих устройствах. Есть небольшое количество устройств, на которых этот режим вызывает проблемы, но это — единичные экземпляры.
    Более подробно с совместимыми устройствами можно ознакомиться на 4pda или xda-developers.

    Сравнение различий звука

    Я сделал веб-сервис, кодирующий аудио в SBC (а также aptX и aptX HD) в реальном времени, прямо в браузере. С помощью него вы сможете сравнивать звук различных профилей SBC и другие кодеки, без фактической передачи аудио по Bluetooth, на любых проводных наушниках, колонках, и вашей любимой музыке, а также изменять параметры кодирования прямо во время воспроизведения аудио.
    btcodecs.valdikss.org.ru/sbc-encoder

    Связь с разработчиками Android

    Я писал многим разработчикам Bluetooth-стека из Google, с просьбой рассмотреть включение патчей в основную ветку Android — AOSP, но не получил ни одного ответа. Мои патчи в системе работы с патчами Gerrit для Android также остались без комментариев со стороны кого-либо причастного.
    Я был бы рад, если бы мне посодействовали в связи с разработчиками из Google и внедрении SBC HD в Android. Патчcет в gerrit уже устарел (это одна из ранних ревизий), и я его обновлю, если разработчиков заинтересуют мои изменения (мне непросто его обновлять, у меня нет совместимых с Android Q устройств).

    Заключение

    Пользователи смартфонов с прошивками LineageOS, Resurrection Remix и crDroid могут довольствоваться улучшенным качеством звука уже сейчас, достаточно активировать опцию в настройках Bluetooth-устройства. Пользователи Linux также могут получить повышенный битрейт SBC, путём установки патча от Pali Rohár, который, помимо всего прочего, добавляет поддержку кодеков aptX, aptX HD и FastStream.
    Share post

    Comments 50

      +1
      В списке рассылки PulseAudio в настоящее время идет обсуждение поддержки высокого битрейта в SBC. В 13-ю версию точно не попадет, но в 14-ю может.
        0
        Да, об этом сказано в заключении. Ещё есть патчи github.com/EHfive/pulseaudio-modules-bt, которые добавляют поддержку aptX, aptX HD, AAC и LDAC.
        +2

        вопрос не по теме, если известно что не все люди слышат полный спектр 20-20000Hz можно обрезать неслышимое в исходной композиции и заполнить канал передачи данных более важными слышимыми частотами добавив детальности

          +3
          Точно, хотел об этом написать, но забыл.

          Чтобы улучшить качество SBC без модификации стека (да и, в принципе, любого аудиокодека, но не aptX), имеет смысл обрезать верхние частоты, которые вы не слышите.
          На стандартном профиле используется 8 частотных диапазонов, т.е. аудио нарезается на 8 диапазонов по 2756 Гц (для 44.1 кГц). Если полностью подавить верхние частотные диапазоны эквалайзером плеера, то битрейт будет более эффективно расходоваться на слышимые диапазоны.
          Например, я не слышу выше ≈16500 Гц, это как раз на границе разделения частот SBC (2756 * 6 = 16536). Убрав всё, что выше 16536 Гц, я улучшу качество аудио для своих ушей.

          Энкодеры психоакустических кодеков, как правило, сами обрезают диапазоны выше какой-то частоты, в зависимости от битрейта.
          +1
          А что посоветуете делать с Windows? Можно оптимизировать правкой реестра? Можно, конечно и бинарники пропатчить, но для Windows Mobile это чутка сложнее.
            +2
            Я пробовал найти библиотеки, ответственные за кодирование SBC и aptX, и что-то ничего не нашел. Не подскажу.
              +3
              Скорее всего за это отвечает драйвер.
              Таки спасибо за статьи, люблю Bluetooth.
                0
                Есть интеловский драйвер вроде из DELL вьірезаньій, которьій позволяет включать в виндовс аптХ, правда только на устройствах интел скорее всего. Даже на хабре статья бьіла. Может можно что-то оттуда дернуть.
                  0
                  В Windows 10 и так есть поддержка aptX.
                  0
                  На неофициальном LOS 16 для Lenovo Tab 4 10 Plus патч действует. На RR 7.0.2 для Redmi Note 5 опции нет. Не успели включить патч в код?
                    0
                    Патч включили 13-14 мая. Сборка прошивки должна быть от этого числа или позже.
                0
                А есть ли смысл во всём этом? Dual Channel — это режим, который рекомендуется разве что для случаев, когда в разных дорожках идёт абсолютно разный сигнал. Во всех остальных случаев его использование как правило не улучшает, а только ухудшает качество. 452 делим на 2 — получаем 226 килобит на каждый канал.
                Joint Stereo и Stereo используют 328 при стандартных параметрах, если я правильно понимаю. Но в этих режимах, особенно в первом используется декорреляция каналов, и если звук не очень различается — это позволяет здорово экономить битрейт и оставлять больше полезной информации. Так что во многих случаях мы теоретически можем получить более 226 килобит на канал, хотя это и будет варьироваться на протяжении трека.
                PS Эти рассуждения справедливы по отношению к кодерам mp3. В случае с SBC я конечно что то могу не знать, поэтому прошу заранее извиняюсь, если это так.
                  +1
                  У меня сразу были опасения о целесообразности переключения с Joint Stereo на, фактически, двойное моно, но, к счастью, удвоение битрейта от переключения даёт больше, чем забирает.
                  Joint Stereo 328 kbit/s примерно соответствует по качеству (на музыке в среднем) Dual Channel 396 kbit/s. Так как на многих наушниках с патчем можно использовать 551 кбит/с, то да — переключение на Dual Channel даёт значительное увеличение качества аудио, и смысл в этом есть.
                  Эффект от 452 кбит/с, конечно, ниже, но тоже по спектрограмме заметен.

                  Воспользуйтесь онлайн-энкодером, чтобы вживую оценить эффект. Возьмите, например, профиль Joint Stereo и bitpool 20 (битрейт 146 кбит/с) и Dual Channel bitpool 17 (битрейт 221 кбит/с). Dual Channel звучит намного лучше.
                    +1
                    Да, с настройками, описанными вами действительно Dual Stream с большим битрейтом звучит лучше. Но тут, возможно, результат ещё от конкретных реализаций может зависеть. Вообще конечно чувствуется, что кодек очень слабый, и явно создавался с прицелом на низкую сложность вычислений, а не качество. Даже mp2 на подобных битрейтах звучит несравненно лучше.
                    Спасибо вам за обе статьи, получил большое удовольствие от прочтения. Хотя и не одобряю в целом прослушивание музыки по блютузу из за того, что при множестве перекодирований в уши приходит пережатая каша. И даже lossless уже не lossless.
                      +1
                      На всякий случай замечу, чтобы устранить возможное недопонимание: Joint Stereo в SBC — M/S stereo coding, а не Intensity stereo coding, т.е. просто центральный канал и разница между каналами, без потерь.
                  +2
                  Так вроде было уже habr.com/ru/post/433502
                    +4
                    Было, но не от меня. Этой статьёй я хотел рассказать, как я пришел к идее использования Dual Channel, почему были выбраны именно такие битрейты, и сделать анонс о включении патча в Android-прошивки.
                    Разбор Bluetooth-стека, проверка идеи, создание патчей, тестирование совместимости началось около года назад, на основе чего и была написана статья по указанной вами ссылке.
                    +1
                    Записал лог обмена со своей старенькой SonyEricsson MW600, немного удивился. Гарнитура заявляет поддержку SBC Bitpool от 2 до 249, ваш онлайн-энкодер такого не умеет как заявляет она )))

                    А насчет перехода на Dual Channel — я не совсем понял, чем это лучше поднятия bitpool в Joint Stereo? Ну, кроме того что не все наушники это смогут?
                      +2
                      SBC Bitpool от 2 до 249, ваш онлайн-энкодер такого не умеет как заявляет она
                      Это значит, что у ваших наушников нет верхнего лимита bitpool. А онлайн-энкодер не позволяет выставить такой высокий bitpool, потому что 250 на Dual Channel даёт битрейт в 2789 кбит/с — почти в 2 раза больше, чем несжатый оригинал! Так что это не сжатие, а разжатие какое-то получается.

                      А насчет перехода на Dual Channel — я не совсем понял, чем это лучше поднятия bitpool в Joint Stereo?
                      Ничем, это хуже, чем Joint Stereo, при равных условиях. Но очень мало моделей наушников имеет неограниченный bitpool, обычно всё заблокировано на 53, поэтому Dual Channel используется исключительно в качестве средства обхода этой проблемы.
                        0
                        Ничем, это хуже, чем Joint Stereo, при равных условиях.
                        Хм… тогда надо в Android добавить вариант поднятия bitpool. Как минимум, протестировать — реально ли гарнитура может больше 53, или только обещает. Тем более что увидел в теме на 4pda отрицательный результат на DualChannel для неё.
                        Не подскажете, как (где) по-быстрому выставить больший bitpool? Как раз будет мне повод собрать LineageOS 14.1 (оптимально на мой телефон).
                          +2
                          review.lineageos.org/c/LineageOS/android_system_bt/+/229574/1
                          Не смотрите на описание коммита — ссылка на патчсет первой версии, он увеличивает и битпул тоже.
                            0
                            Попробовал посчитать MAX_SBC_HQ_FRAME_SIZE_44_1 — у меня получается 165.875, а не 165 как в патче. Понятно, что размер фрейма не может быть дробным — но округлять по логике надо в большую сторону.

                            Использовал формулу из embdrv/sbc/decoder/include/oi_codec_sbc.h:
                            #define SBC_MAX_FRAME_LEN (SBC_HEADER_LEN + \
                                                         ((SBC_MAX_BANDS * SBC_MAX_CHANNELS / 2) + \
                                                          (SBC_MAX_BANDS + SBC_MAX_BLOCKS * SBC_MAX_BITPOOL + 7)/8))
                            


                            Где правда? :)
                              0
                              Странно, в этой формуле есть BITPOOL + 7. Откуда 7 — непонятно, вроде и не заголовок, и не выравнивание. По формуле из спецификации A2DP (которая в статье) получается ровно 165.

                              Насколько вижу, эти дефайны используются только при проблемах в подсчёте длины фрейма (видимо, когда энкодер ещё не до конца инициализирован), поэтому, даже если они неправильные, то, видимо, особой проблемы это не представляет, но я посмотрю, спасибо за замечание.
                                +1
                                (( X+N-1 ) / N) — стандартный способ округления вверх при целочисленном делении в случае положительных X и N
                        0
                        А в AOSP не пробовали закоммитить? Чтоб не только у альтернативных прошивок, но попробовало просочиться немного везде (конечно, вендоры наверн будут отключать, но всё же...). (извините, нашёл ответ в статье)

                        И, кстати, как проверить, что всё работает? Вот я подключил свои наушники с режимом Dual Channel в настройках разработчика и включенным HD Codec: SBC в настройках устройства, звук идёт, но я без понятия, «разогнан» ли он до повышенного битрейта по итогу.

                        Надеюсь что «экстремальный звук» добавят в том числе в LOS 16!
                          +1
                          И, кстати, как проверить, что всё работает? Вот я подключил свои наушники с режимом Dual Channel в настройках разработчика и включенным HD Codec: SBC в настройках устройства, звук идёт, но я без понятия, «разогнан» ли он до повышенного битрейта по итогу.
                          Как вариант — снять дамп и проанализировать его либо вручную, либо загрузив на btcodecs.valdikss.org.ru.
                            0
                            Результат


                            То есть я правильно понял, что поидее система его успешно подхватила? Вопрос правда почему в Used Audio он написал две строчки… Переключался туда-сюда что-ли?
                            Если что, у меня LOS 16.
                              +2
                              Да, всё в порядке. Да, переключается, сначала выбирается Joint Stereo, затем Dual Channel. Если вы включите на несколько секунд музыку во время записи дампа, анализатор покажет ещё и битпул последнего аудиопакета.
                                0
                                Для окончательного понимания, что же у меня происходит с наушниками, пригодился ваш коммент из соседней статьи, спасибо! А то я заметил, что вроде сначала ОС и наушники рапортуют об успешном подключении, потом внезапно телефон отключает их и подключается к ним заново. Я-то думал, у меня что-то глючит, а оно вот что… Видимо, по дефолту по запросу наушников выбирается режим SBC Joint Stereo, а потом срабатывает форсированный оверрайд на Dual Channel и идёт заново переподключение.
                                  +2
                                  У вас всё же телефон подключается к наушникам. Установка сначала Joint Stereo, затем Dual Channel — особенность моего патча (вернее, стека Android). Нужно было больше менять, чтобы подключение устанавливалось без переключения, но и тот вариант, что используется сейчас, соответствует стандарту, поэтому я не стал переделывать.
                                    +1

                                    Ага, то есть когда я вижу такое переключение, это значит что сработал ваш патч. Хорошо, спасибо!


                                    Кстати, пока я в настройках разработчика не выставил dual channel (но при этом HD Codec: SBC был включен), мне кажется что наушники всё равно через joint stereo подключались… Но я это ещё наверное потестирую, ибо не уверен.

                                      0
                                      Последние результаты
                                      ```Connection:
                                      20:74:cf:06:91:b4 (TREKZ Titanium by AfterShokz) → 22:22:1d:dd:c3:6a (TriOpMobile)

                                      Supported codecs:
                                      Audio SBC (44100 | Mono DualChannel JointStereo | block: 4 8 12 16 | subbands: 8 | allocation: Loudness | bitpool: 2..53)
                                      Audio MPEG-2,4 AAC
                                      Audio non-A2DP (aptX — 44100 48000, Stereo)
                                      Audio non-A2DP (aptX HD — 44100 48000, Stereo)
                                      Audio non-A2DP (LDAC — 44100 48000 88200 96000, DualChannel Stereo)
                                      Audio SBC (44100 | Mono DualChannel JointStereo | block: 4 8 12 16 | subbands: 8 | allocation: Loudness | bitpool: 2..53)

                                      Used for audio:
                                      Audio SBC (44100 | JointStereo | block: 16 | subbands: 8 | allocation: Loudness | bitpool: 2..53)

                                      Connection:
                                      22:22:1d:dd:c3:6a (TriOpMobile) → 20:74:cf:06:91:b4 (TREKZ Titanium by AfterShokz)

                                      Supported codecs:
                                      Audio MPEG-1,2 Audio
                                      Audio SBC (16000 32000 44100 48000 | Mono DualChannel Stereo JointStereo | block: 4 8 12 16 | subbands: 4 8 | allocation: SNR Loudness | bitpool: 2..53)
                                      Audio MPEG-1,2 Audio
                                      Audio SBC (16000 32000 44100 48000 | Mono DualChannel Stereo JointStereo | block: 4 8 12 16 | subbands: 4 8 | allocation: SNR Loudness | bitpool: 2..53)

                                      Used for audio:
                                      Audio SBC (44100 | DualChannel | block: 16 | subbands: 8 | allocation: Loudness | bitpool: 2..53)
                                      Audio SBC (44100 | JointStereo | block: 16 | subbands: 8 | allocation: Loudness | bitpool: 2..53)
                                      Audio SBC (44100 | DualChannel | block: 16 | subbands: 8 | allocation: Loudness | bitpool: 2..53)

                                      Latest SBC Bitpool value: 38
                                      ```

                                      Эти замеры сделал без форсированного DualChannel в настройках разработчика.

                                      Судя по bitpool и выбранной DualChannel конфигурации получается что наушники у меня работают на скорости 452 kbit/s, я правильно понял? То есть у меня устройство с EDR 2 mbit/sec?

                                      В таком случае особенно сильно жду патча на увеличенный битрейт! В любом случае спасибо!
                                        +1
                                        Судя по bitpool и выбранной DualChannel конфигурации получается что наушники у меня работают на скорости 452 kbit/s, я правильно понял?
                                        Да.

                                        То есть у меня устройство с EDR 2 mbit/sec?
                                        Да, поддерживает только EDR 2 мбит\с.
                            0
                            В macos бы еще можно было бы как-то это сделать, или AptX HD с LDAC добавить…
                              0
                              Говорят Apple не лицензировала AptX HD для своих устройств. Если наушники поддерживают AAC, то можно заставить работать через него Bluetooth Explorer'ом.
                              Или через терминал:
                              sudo defaults write bluetoothaudiod "Enable AAC codec" -bool true
                              +1
                              А можно как-то этот патч реализовать не в качестве отдельной прошивки, а в качестве модуля для Magisk, например?
                                +1
                                Такой патч есть, доступен в репозитории Magisk, но работает он только на определенных устройствах, и его работоспособность зависит от оптимизаций компилятора при сборке прошивки.
                                  0
                                  Спасибо за прекрасную новость! Но я нашёл в репозитории Magisk 19.2 только патч «Bluetooth stack audio bitrate changer for SBC...» за авторством Gray Jack the Fixxxer. Это оно самое?
                                    0
                                    Да, это оно. Прочтите описание модуля.
                                      0
                                      Спасибо большущее за наводку! Музыка и вправду стала ощутимо лучше звучать. Теперь особо и проводом нет смысла цеплять смартфон к головному устройству в авто.
                                0
                                Есть ли инструкция по установке патча?
                                  0
                                  Применить к исходному коду, скомпилировать прошивку, прошить на телефон.
                                  0
                                  Не подскажете, а как можно воспользоваться плодами вашей работы на Pixel Experience? Использую данную CAF сборку, и к сожалению, опции как на скриншоте обнаружить не могу на двух наушниках, хотя даже выставил приоритет кодеку SBC в настройках для разработчиков, а подключался от телефона к наушникам

                                  Скриншот
                                  image
                                    0
                                    Похоже, разработчики Pixel Experience включили патчи для Bluetooth-стека, но не для интерфейса. Возможно, они просто не глядя вливают изменения из некоторых репозиториев LineageOS. Изменениями не получится воспользоваться. Напишу разработчикам этой прошивки.
                                  • UFO just landed and posted this here
                                      0
                                      Почему вы считаете, что колонка поддерживает aptX и LDAC?
                                      • UFO just landed and posted this here
                                          0
                                          В Supported codecs отображаются кодеки, поддерживаемые колонкой, а не телефоном.
                                      0
                                      Шёл 21 мать его век, почти 2020 год, а bluetooth до сих пор не умеет передавать несжатый аудиопоток в несчастные 1.2Mbit.
                                        0
                                        Хех, снял дамп обмена с магнитолой (Sony BT-2600), она оказывается умеет MPEG Layer 3. Жаль что Android это не поддерживает :(

                                        Only users with full accounts can post comments. Log in, please.