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

Некоторые пользователи беспроводных наушников отмечают низкое качество звука и недостаток высоких частот при использовании стандартного 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 Rohar, который, помимо всего прочего, добавляет поддержку кодеков aptX, aptX HD и FastStream.

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


  1. AEP
    09.06.2019 18:37

    В списке рассылки PulseAudio в настоящее время идет обсуждение поддержки высокого битрейта в SBC. В 13-ю версию точно не попадет, но в 14-ю может.


    1. ValdikSS Автор
      09.06.2019 18:41

      Да, об этом сказано в заключении. Ещё есть патчи github.com/EHfive/pulseaudio-modules-bt, которые добавляют поддержку aptX, aptX HD, AAC и LDAC.


  1. tunelix
    09.06.2019 19:19
    +2

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


    1. ValdikSS Автор
      09.06.2019 19:27
      +1

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

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

      Энкодеры психоакустических кодеков, как правило, сами обрезают диапазоны выше какой-то частоты, в зависимости от битрейта.


  1. Dj_Art
    09.06.2019 19:25

    А что посоветуете делать с Windows? Можно оптимизировать правкой реестра? Можно, конечно и бинарники пропатчить, но для Windows Mobile это чутка сложнее.


    1. ValdikSS Автор
      09.06.2019 19:36

      Я пробовал найти библиотеки, ответственные за кодирование SBC и aptX, и что-то ничего не нашел. Не подскажу.


      1. Dj_Art
        09.06.2019 20:00

        Скорее всего за это отвечает драйвер.
        Таки спасибо за статьи, люблю Bluetooth.


      1. Googlist
        10.06.2019 22:16

        Есть интеловский драйвер вроде из DELL вьірезаньій, которьій позволяет включать в виндовс аптХ, правда только на устройствах интел скорее всего. Даже на хабре статья бьіла. Может можно что-то оттуда дернуть.


        1. ValdikSS Автор
          10.06.2019 22:31

          В Windows 10 и так есть поддержка aptX.


      1. SuAlUr
        11.06.2019 18:58

        На неофициальном LOS 16 для Lenovo Tab 4 10 Plus патч действует. На RR 7.0.2 для Redmi Note 5 опции нет. Не успели включить патч в код?


        1. ValdikSS Автор
          11.06.2019 19:46

          Патч включили 13-14 мая. Сборка прошивки должна быть от этого числа или позже.


  1. Eol78
    09.06.2019 20:17

    А есть ли смысл во всём этом? Dual Channel — это режим, который рекомендуется разве что для случаев, когда в разных дорожках идёт абсолютно разный сигнал. Во всех остальных случаев его использование как правило не улучшает, а только ухудшает качество. 452 делим на 2 — получаем 226 килобит на каждый канал.
    Joint Stereo и Stereo используют 328 при стандартных параметрах, если я правильно понимаю. Но в этих режимах, особенно в первом используется декорреляция каналов, и если звук не очень различается — это позволяет здорово экономить битрейт и оставлять больше полезной информации. Так что во многих случаях мы теоретически можем получить более 226 килобит на канал, хотя это и будет варьироваться на протяжении трека.
    PS Эти рассуждения справедливы по отношению к кодерам mp3. В случае с SBC я конечно что то могу не знать, поэтому прошу заранее извиняюсь, если это так.


    1. ValdikSS Автор
      09.06.2019 20:34

      У меня сразу были опасения о целесообразности переключения с 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. Eol78
        10.06.2019 00:09

        Да, с настройками, описанными вами действительно Dual Stream с большим битрейтом звучит лучше. Но тут, возможно, результат ещё от конкретных реализаций может зависеть. Вообще конечно чувствуется, что кодек очень слабый, и явно создавался с прицелом на низкую сложность вычислений, а не качество. Даже mp2 на подобных битрейтах звучит несравненно лучше.
        Спасибо вам за обе статьи, получил большое удовольствие от прочтения. Хотя и не одобряю в целом прослушивание музыки по блютузу из за того, что при множестве перекодирований в уши приходит пережатая каша. И даже lossless уже не lossless.


        1. ValdikSS Автор
          10.06.2019 00:26

          На всякий случай замечу, чтобы устранить возможное недопонимание: Joint Stereo в SBC — M/S stereo coding, а не Intensity stereo coding, т.е. просто центральный канал и разница между каналами, без потерь.


  1. natan555
    09.06.2019 20:44
    +1

    Так вроде было уже habr.com/ru/post/433502


    1. ValdikSS Автор
      09.06.2019 21:03
      +1

      Было, но не от меня. Этой статьёй я хотел рассказать, как я пришел к идее использования Dual Channel, почему были выбраны именно такие битрейты, и сделать анонс о включении патча в Android-прошивки.
      Разбор Bluetooth-стека, проверка идеи, создание патчей, тестирование совместимости началось около года назад, на основе чего и была написана статья по указанной вами ссылке.


  1. Magister7
    10.06.2019 00:38

    Записал лог обмена со своей старенькой SonyEricsson MW600, немного удивился. Гарнитура заявляет поддержку SBC Bitpool от 2 до 249, ваш онлайн-энкодер такого не умеет как заявляет она )))

    А насчет перехода на Dual Channel — я не совсем понял, чем это лучше поднятия bitpool в Joint Stereo? Ну, кроме того что не все наушники это смогут?


    1. ValdikSS Автор
      10.06.2019 00:44

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

      А насчет перехода на Dual Channel — я не совсем понял, чем это лучше поднятия bitpool в Joint Stereo?
      Ничем, это хуже, чем Joint Stereo, при равных условиях. Но очень мало моделей наушников имеет неограниченный bitpool, обычно всё заблокировано на 53, поэтому Dual Channel используется исключительно в качестве средства обхода этой проблемы.


      1. Magister7
        10.06.2019 00:59

        Ничем, это хуже, чем Joint Stereo, при равных условиях.
        Хм… тогда надо в Android добавить вариант поднятия bitpool. Как минимум, протестировать — реально ли гарнитура может больше 53, или только обещает. Тем более что увидел в теме на 4pda отрицательный результат на DualChannel для неё.
        Не подскажете, как (где) по-быстрому выставить больший bitpool? Как раз будет мне повод собрать LineageOS 14.1 (оптимально на мой телефон).


        1. ValdikSS Автор
          10.06.2019 01:15

          review.lineageos.org/c/LineageOS/android_system_bt/+/229574/1
          Не смотрите на описание коммита — ссылка на патчсет первой версии, он увеличивает и битпул тоже.


          1. Magister7
            10.06.2019 10:28

            Попробовал посчитать 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))
            


            Где правда? :)


            1. ValdikSS Автор
              10.06.2019 12:47

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

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


  1. Evengard
    10.06.2019 07:30

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

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

    Надеюсь что «экстремальный звук» добавят в том числе в LOS 16!


    1. ValdikSS Автор
      10.06.2019 12:55

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


      1. Evengard
        10.06.2019 13:36

        Результат


        1. ValdikSS Автор
          10.06.2019 14:22
          +1

          Да, всё в порядке. Да, переключается, сначала выбирается Joint Stereo, затем Dual Channel. Если вы включите на несколько секунд музыку во время записи дампа, анализатор покажет ещё и битпул последнего аудиопакета.


          1. Evengard
            10.06.2019 14:43

            Для окончательного понимания, что же у меня происходит с наушниками, пригодился ваш коммент из соседней статьи, спасибо! А то я заметил, что вроде сначала ОС и наушники рапортуют об успешном подключении, потом внезапно телефон отключает их и подключается к ним заново. Я-то думал, у меня что-то глючит, а оно вот что… Видимо, по дефолту по запросу наушников выбирается режим SBC Joint Stereo, а потом срабатывает форсированный оверрайд на Dual Channel и идёт заново переподключение.


            1. ValdikSS Автор
              10.06.2019 15:12
              +2

              У вас всё же телефон подключается к наушникам. Установка сначала Joint Stereo, затем Dual Channel — особенность моего патча (вернее, стека Android). Нужно было больше менять, чтобы подключение устанавливалось без переключения, но и тот вариант, что используется сейчас, соответствует стандарту, поэтому я не стал переделывать.


              1. Evengard
                10.06.2019 15:22
                +1

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


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


              1. Evengard
                13.06.2019 04:15

                Последние результаты
                ```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
                ```


                1. ValdikSS Автор
                  13.06.2019 14:00

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

                  То есть у меня устройство с EDR 2 mbit/sec?
                  Да, поддерживает только EDR 2 мбит\с.


  1. vanyas
    10.06.2019 11:00

    В macos бы еще можно было бы как-то это сделать, или AptX HD с LDAC добавить…


    1. vcambur
      10.06.2019 15:08

      Говорят Apple не лицензировала AptX HD для своих устройств. Если наушники поддерживают AAC, то можно заставить работать через него Bluetooth Explorer'ом.
      Или через терминал:
      sudo defaults write bluetoothaudiod "Enable AAC codec" -bool true


  1. Ktulkhu_Triediniy
    10.06.2019 15:10
    +1

    А можно как-то этот патч реализовать не в качестве отдельной прошивки, а в качестве модуля для Magisk, например?


    1. ValdikSS Автор
      10.06.2019 15:14
      +1

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


      1. Ktulkhu_Triediniy
        11.06.2019 07:29

        Спасибо за прекрасную новость! Но я нашёл в репозитории Magisk 19.2 только патч «Bluetooth stack audio bitrate changer for SBC...» за авторством Gray Jack the Fixxxer. Это оно самое?


        1. ValdikSS Автор
          12.06.2019 13:31

          Да, это оно. Прочтите описание модуля.


  1. iceyay
    10.06.2019 18:32

    Есть ли инструкция по установке патча?


    1. ValdikSS Автор
      10.06.2019 18:32

      Применить к исходному коду, скомпилировать прошивку, прошить на телефон.


  1. Dubzer
    10.06.2019 22:51

    Не подскажете, а как можно воспользоваться плодами вашей работы на Pixel Experience? Использую данную CAF сборку, и к сожалению, опции как на скриншоте обнаружить не могу на двух наушниках, хотя даже выставил приоритет кодеку SBC в настройках для разработчиков, а подключался от телефона к наушникам

    Скриншот
    image


    1. ValdikSS Автор
      10.06.2019 22:59

      Похоже, разработчики Pixel Experience включили патчи для Bluetooth-стека, но не для интерфейса. Возможно, они просто не глядя вливают изменения из некоторых репозиториев LineageOS. Изменениями не получится воспользоваться. Напишу разработчикам этой прошивки.


  1. megapro17
    11.06.2019 01:40

    Connection:
    a8:51:5b:58:3b:b9 (Galaxy Note9) > fc:58:fa:87:ea:5a (Wireless speaker)

    Supported codecs:
    Audio SBC (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 | JointStereo | block: 16 | subbands: 8 | allocation: Loudness | bitpool: 2..53)

    Подскажите почему в Supported codecs всего лишь один кодек, при этом точно должен быть LDAC и aptx. У колонки только sbc. Я что-то неверно измерил? Подключение было с нуля, предыдущую привязку удалил. Несколько раз это делал, перезагружая телефон, чтоб старые логи удалились, но всегда одно и тоже. В настройках разработчика есть аудиокодек при передаче звука через bluetooth, выбирал там все кодеки и всё равно тоже самое, и вообще обратно встаёт на sbc после подключения.


    1. ValdikSS Автор
      11.06.2019 01:43

      Почему вы считаете, что колонка поддерживает aptX и LDAC?


      1. megapro17
        11.06.2019 02:41

        Нет, колонка не поддерживает
        Телефон же должен сообщать все свои возможности при подключении?


        1. ValdikSS Автор
          11.06.2019 09:53

          В Supported codecs отображаются кодеки, поддерживаемые колонкой, а не телефоном.


  1. denisshabr
    11.06.2019 14:56

    Шёл 21 мать его век, почти 2020 год, а bluetooth до сих пор не умеет передавать несжатый аудиопоток в несчастные 1.2Mbit.