aptX Bluetooth: что это такое в телефонах, смартфонах и наушниках

Сохранить и прочитать потом —

Протокол aptX HD призван обеспечить передачу Hi-Res-аудио по Bluetooth. Здесь вы найдете все, что нужно знать о нем и о том, как им воспользоваться.

За время долгого пути мы усвоили одну мудрость: множество людей готовы пожертвовать качеством звучания ради удобства. Возьмем, к примеру, беспроводные наушники. Они редко могут составить конкуренцию хорошим проводным, зато с ними намного удобнее.

Однако некоторое время назад маятник качнулся в сторону роста качества. Самыми яркими примерами этой тенденции можно считать возрождение винила (вот уж где речи про удобство не идет вовсе), а также рост популярности Hi-Res-аудио. Итак, есть ли способ объединить удобство использования и качество звучания?

Разработчики из Qualcomm уверены в этом. В начале этого года они представили кодек aptX HD, позволяющий передавать по беспроводным каналам музыку в формате 24-битного Hi-Res-аудио. Таким образом, устройства с поддержкой Bluetooth (например, портативные АС) теоретически могут звучать намного лучше.

Что же хорошего в aptX HD? Как его получить и какие устройства его поддерживают? Сейчас узнаем.

Для чего нужен aptX

Логотип Qualcomm aptX.

Все больше производителей телефонов, смартфонов и другой мобильной техники отказываются от использования разъема для наушников в своих устройствах. При этом переходники, которые можно использовать для подключения стандартных наушников к таким устройствам, не очень удобны и часто теряются. Поэтому, возможность прослушивания музыки без использования проводов становится все более актуальной. Единственная проблема заключается в том, что качество звука беспроводной музыки не может соперничать с качеством при проводном подключении.

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

Есть ли aptX в смартфонах Apple

Многие пользователи, которые даже немного интересовались передачей аудио по беспроводному каналу задавались вопросом – если ли поддержка AptX у Apple. Это логично, ведь именно эта компания первой отказалась от разъема 3,5 в смартфонах iPhone 7. Она положила начало тренду, который позже перехватили все ведущие производители от Samsung до Huawei.

Ответ на вопрос есть ли поддержка aptX в iPhone – ее здесь нет. Многих это удивит, ведь мировой лидер должен стремиться быть лучшим во всем и в том числе по звуку в своих устройствах, но причин нежеланию внедрять данный кодек в телефоны у американской компании несколько.

  • Начиная с 1997 года в Apple Music все аудио кодируется в формате AAC c битрейтом 256 Кбит/с. AptX HD способен демонстрировать битрейт около 576 кбитс.
  • Кодек AAC практически не распространен в технике за пределами Apple.

Исходя из этих причин Apple не выгодно внедрять в телефоны AptX, так как их фирменный музыкальный сервис не способен транслировать музыку в соответствующем качестве, а вторая причина – для получения максимально возможного для iPhone звука пользователям приходится покупать фирменные аксессуары или совместимые от иных производителей (а таких наушников и гарнитур мало).

Что такое aptX

Astell & Kern MK70 mkII – плеер с поддержкой технологии aptX.

Фактически, aptX (apt-X) — это аудиокодек, который можно использовать для сжатия и распаковки музыки при потоковой передаче через Bluetooth. Он используется в качестве «упаковки» при передаче аудиоданных, в то время как Bluetooth A2DP (наиболее часто используемый профиль Bluetooth) является курьером, который доставляет посылку от передатчика к приемнику.

Данный аудиокодек был разработан в 1980-х годах и начал использоваться в коммерческих продуктах в 1990-х. А в 2015 году он был приобретен производителем чипсетов Qualcomm. С тех пор aptX начал активно применяться крупными производителями в бытовой и мобильной электроники.

aptX – это обновление стандартного кодека SBC, который обеспечивает передачу музыки по Bluetooth A2DP. aptX был разработан с целью уменьшить потери, к которым приводит использование SBS. Он использует улучшенную запатентованную компрессию, чтобы сжать музыку до размера SBC, но при этом сохранить больший исходный частотный диапазон звука. Также использование aptX позволяет снизить задержки, что особенно полезно для синхронизации звука и видео. Но, несмотря на значительные улучшения, использование кодека aptX все еще не может обеспечить качество звука сравнимое с 16-бит/44,1 кГц, которое вы слышите при прослушивании CD-диска.

Введение

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

Полтора года назад я загорелся идеей aptX. Да, я прочитал массу обзоров наподобие этого и поверил во все эти технические навороты и возможности. Родился ребёнок – и очень хотелось ночью с женой смотреть передачи в наушниках, не создавая шума и не будя никого в доме.

Во что же это вылилось?

Что такое aptX HD

Наушники Audio Technica ATH-DSR9BT с поддержкой технологии aptX HD.

В попытке еще больше улучшить качество беспроводной передачи звука, в 2016 году компания Qualcomm выпустила aptX HD. По заявлениям компании эта версия аудиокодека должна обеспечить передачу беспроводного аудио высокого разрешения, вплоть до 24 бит/48 кГц. Но, несмотря на громкие заявления, использование aptX HD все равно приводит к потерям из-за ограниченной полосы пропускания. Тем не менее, aptX HD обеспечивает более высокое качество звука чем aptX, а также динамический диапазон не менее 120 дБ и звуковые частоты до 20 кГц.

Кроме этого, кодек aptX HD обеспечивает более низкое отношение сигнал/шум, меньшее количество искажений и требует меньшей вычислительной мощности, что положительно скажется на времени работы вашего телефона, смартфона или портативной колонки.

AAC

Аудиокодек AAC
ААС (Advanced Audio Coding) – кодек, разработанный для устройств компании Apple. Он имеет сложную реализацию, базируется на психоакустике. Если используется пара iPhone и AirPods, то звучание будет на очень высоком уровне. Также этот кодек поддерживается некоторыми моделями беспроводных наушников от Sony.

Кодек ААС начинает срезать АЧ очень рано, около 14 кГц. Такие частоты способны улавливать даже возрастные люди. Битрейт этого кодека самый низкий и составляет всего 252 Кбит/с. Это свидетельствует об ощутимом сжатии звука.

Если говорить о качестве соединения, то у кодека ААС оно самое качественное. Учитывая низкий битрейт, это кажется вполне логичным и объяснимым.

  • алгоритм базируется на психоакустике, следовательно, при разработке учитывались особенности работы и построения слухового аппарата человека
  • надежное соединение
  • при использовании техники Apple обеспечивается высокое качество передачи звука
  • практически не используется за пределами экосистемы Apple
  • высокая зависимость от конкретного устройства, под Android устройства практически не оптимизированы

Поддержка технологии aptX и aptX HD

Главным минусом apt-X и apt-X HD является необходимость поддержки как со стороны передающего устройства, так и со стороны приемника. Другими словами, устройство-источник (плеер, мобильный телефон или смартфон) и устройство-приемник (наушники, портативная акустика) должны поддерживать данную технологию, иначе вы не сможете использовать aptX для кодирования беспроводной передачи звука.

Это означает, что поклонникам техники от Apple не повезло, так как на iPhone и iPad нет поддержки aptX. С другой стороны, на Android-устройствах ситуациях чуть лучше и многие Android-смартфоны поддерживают aptX и aptX HD. Также такая поддержка есть на многих портативных плеерах и беспроводных наушниках. В частности, устройства с поддержкой этой технологии выпускают такие бренды как Sony, LG, Bowers & Wilkins, Audio Technica и Naim.

Итог

По итогам можно сделать вывод, что теоретически звук качества

, близкого к CD, через aptX и aptX HD передаётся неплохо. Конечно, битрейт пониже и есть потери от сжатия, но уровень уже неплох. Однако, настоящий Hi-Res по Bluetooth – далёк от реализации.

Если ваше оборудование поддерживает эти кодеки, используйте их, они того стоят. Особенно интересен aptX HD, который даёт бОльший динамический диапазон, и вы услышите больше тихих звуков, которые, возможно, до этого на записи и не слышали.

Источники

  • https://TheProgs.ru/chto-takoe-kodek/
  • https://www.audiomania.ru/content/art-5144.html
  • https://phoneoff.ru/instruktsii/aptx-na-smartfone
  • https://AndroidLime.ru/aptx-technology
  • https://tvoykomputer.ru/aptx-bluetooth-chto-eto-osobennosti-texnologii-i-sxema-raboty/
  • https://headphonesbest.ru/info/bluetooth-naushniki-peredacha-zvuka-bez-poteri-kachestva-8839
  • https://ya-rostislav.ru/cifrovaya-tehnika/smartfoni/aptx-kakie-podderjivayut

[свернуть]

Sennheiser HD 450BT: выбор редакции

  • Bluetooth: 5. 0
  • Кодек: AAC и aptX с низкой задержкой
  • Аккумулятор: 30 часов
  • Приложение: Sennheiser Smart Control

Следуя примеру компании Sennheiser, HD 450BT воспроизводит плавный, сбалансированный и приятный звук. А благодаря поддержке кодека с низкой задержкой Qualcomm aptX он синхронизирует аудио и видео с задержкой менее 40 мс.

Таким образом, вы можете без промедления смотреть свои шоу, слушать музыку или подкасты. Добавьте интуитивно понятный эквалайзер в приложении Sennheiser, и вы получите удовольствие от прослушивания, соответствующее вашему вкусу.

И хотя ANC (активное шумоподавление) не лучший в отрасли, он довольно приличный по своей цене. Кроме того, компактная складная конструкция, чехол для переноски и 30 часов автономной работы делают его отличным компаньоном в путешествии.

Плюсы

  • Превосходный звук с глубокими динамическими басами
  • Достойный АНК
  • Компактная складная конструкция
  • Интуитивно понятное управление из приложения
  • Цена денег

Минусы

  • Громоздкий
  • Не могу контролировать уровни ANC

Всего: $ 125.69

Проверить на Amazon

Bang & Olufsen Beoplay H9 3-го поколения: самые роскошные наушники aptX с низкой задержкой.

  • Bluetooth: 5. 0
  • Кодек: aptX с низкой задержкой
  • Аккумулятор: 25 часов
  • Приложение: Bang & Olufsen

Beoplay H9 3-го поколения, созданный для того, чтобы хорошо выглядеть и звучать, изготовлен из полированного анодированного алюминия, натуральной воловьей кожи, мягкой овчины и адаптивной пены с эффектом памяти.

И вы получаете не только внешний вид, но и усовершенствованный ANC, режим прозрачности, порт низких частот для более глубоких басов и акустику, обеспечивающую насыщенное и мощное прослушивание. Кроме того, интуитивно понятный сенсорный интерфейс на правом наушнике позволяет быстро переключать воспроизведение / паузу или треки.

Специальная кнопка для Google Assistant и одновременного сопряжения двух устройств делает работу еще более удобной. Однако иметь только кодек с низкой задержкой Qualcomm aptX немного дороже; даже aptX adaptive или AAC могли бы стать отличным дополнением.

Плюсы

  • Отличное качество звука
  • Одновременное сопряжение двух устройств
  • Эффективный АНК
  • Интеграция с Google Assistant

Минусы

  • Дорогие
  • Не хватает быстрой зарядки
  • Не складывается

Всего: $ 432.52

Проверить на Amazon

Практика: исправляем то, что можно исправить

Часть 1. Включаем aptX

Как уже было сказано, в некоторых устройствах использование aptX отключено, вероятно, во избежание патентных преследований.
Этот вопрос можно решить достаточно просто – подсунув устройству библиотеки для реализации работы кодека и прописав возможность работы с этим кодеком в build.prop.

На просторах интернета имеется большое количество решений такого характера. Я взял на себя смелость объединить их в одно, при этом реализовав в виде модуля для Magisk. Да, я очень люблю этот проект и считаю, что реализация изменений в системе в виде модулей Magisk – лучше и безопасное решение с возможностью сохранения системы максимально в первозданном виде и лёгким способом отката назад.

Модуль можно скачать отсюда. Да, я знаю про гитхаб. И нет, пока у меня нет времени туда его выкладывать.

Записи в build.prop, включающие aptX, а при возможности – и aptX HD, будут эмулироваться модулем автоматически.

Часть 2. Повышаем битрейт SBC

Как уже сообщалось, кодек SBC принципиально не имеет ограничений по битрейту. Однако производители обычно ставят ограничение в 342 кбит/с для моно- и 345 кбит/с для стереосигнала с целью обспечения надёжной работы со всеми типами принимающих устройств.
При этом спецификация A2DP v1.2, которая была активна с 2007 по 2015 год, предписывает всем декодирующим устройствам корректно работать с битрейтами до 320 кбит/с для моно- и 512 кбит/с в случае стереосигнала.

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

По факту это конечно же не так. В обширном исследовании, проведённом ValdikSS, было найдено, что практически все приёмные устройства надёжно работают со значениями битрейта 454 кбит/с, и достаточно большое количество – с битрейтом 507 кбит/с.

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

ValdikSS на основании этих данных направил замечания разработчикам Lineage OS и в Google, но на данный момент никакой реакции не последовало.

Таким образом, нам остаётся только вручную внести модификации в Bluetooth-стек.

Нам потребуется IDA Pro с возможностью декомпилирования ARM, любой HEX-редактор (я использовал WinHEX) и файл bluetooth.default.so с нашего устройства. Обычно он находится по пути /system/lib/hw и реже – ещё и по пути /system/lib64/hw (безусловно нужен рут-доступ).

Итак, открываем файл bluetooth.default.so Описанные ниже операции и модификации применимы только к оригинальному стеку Android (bluedroid). Если вы видите строку «Needed Library ‘[email protected]’» или подобную в IDA Pro, с большой вероятностью, эта инструкция вам не поможет.

Наша первая задача — заменить Joint Stereo на Dual Channel в стандартной конфигурации.

Работать мы будем с функцией bta_av_build_src_cfg.

Чтобы отыскать эту процедуру в IDA, воспользуемся поиском по строке характерного сообщения в журнал отладки «Cant parse src cap ret = %d»:

В итоге довольно быстро мы находим саму функцию в виде кода:

Наша задача – подменить исходную структуру проверок

if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; на if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO; Это можно сделать несколькими способами.

Первый – подмена инструкций TST.W R0, #1 на TST.W R0, #4 и MOVS R0, #1 на MOVS R0, #4 в последовательности проверок:

В байт-коде это замена х01 на х04. При этом важно отметить характерные последовательности байтов, по которым можно найти этот паттерн. Не углубляясь сильно в детали, скажу, что по сути это поиск последовательности

10 20 8D F8 04 00 9D F8 0D 00 10 F0 01 0F ?? ?? 10 F0 02 0F ?? ?? 10 F0 04 0F ?? ?? 10 F0 08 0F ?? ?? 08 20 ?? ?? 01 20 ?? ?? 02 20 ?? ?? 04 20 и её замена на ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 04 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 04 ?? ?? ?? ?? ?? ?? ?? ?? ?? Однако у данного способа есть недостатки.

Ряд компиляторов меняют последовательность исполнения команд в зависимости от оптимизации. И в таком случае найти искомый паттерн не удаётся, а иногда механизм проверок в структуре вообще вносится в инлайн-код. Поэтому более надёжным является изменение константы btif_av_sbc_default_config.

Для начала – найдём её. Она в самом начале нашей функции, ведь

void bta_av_build_src_cfg (UINT8 *p_pref_cfg, UINT8 *p_src_cap) { tA2D_SBC_CIE src_cap; tA2D_SBC_CIE pref_cap; UINT8 status = 0; /* initialize it to default SBC configuration */ A2D_BldSbcInfo(AVDT_MEDIA_AUDIO, (tA2D_SBC_CIE *) &btif_av_sbc_default_config, p_pref_cfg); /* now try to build a preferred one */ /* parse configuration */ if ((status = A2D_ParsSbcInfo(&src_cap, p_src_cap, TRUE)) != 0) { APPL_TRACE_DEBUG(» Cant parse src cap ret = %d», status); А вот и она:

Видно, что сама btif_av_sbc_default_config представляет собой последовательность байт 20 01 10 04 01 35 02, при этом первый байт кодирует частоту дискретизации и может быть 10 (48 кГц) и 20 (44 кГц), а потому не специфичен. Таким образом наша задача – замена последовательности 01 10 04 01 35 02 на 04 ?? ?? ?? ?? ??

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

В ряде случаев инициатором подключения выступают сами наушники или колонки. В этом случае режим определяется функцией bta_av_co_audio_init.

Функция характерна строкой «bta_av_co_audio_init: %d» и легко отыскивается в коде:

Перечисление возможных режимов подключения выполняется в следующей команде:

switch (index) { case BTIF_SV_AV_AA_SBC_INDEX: /* Set up for SBC codec for SRC*/ *p_codec_type = BTA_AV_CODEC_SBC; /* This should not fail because we are using constants for parameters */ A2D_BldSbcInfo(AVDT_MEDIA_AUDIO, (tA2D_SBC_CIE *) &bta_av_co_sbc_caps, p_codec_info); /* Codec is valid */ return TRUE; при этом константа bta_av_co_sbc_caps имеет следующую структуру: const tA2D_SBC_CIE bta_av_co_sbc_caps = { (A2D_SBC_IE_SAMP_FREQ_44), /* samp_freq */ (A2D_SBC_IE_CH_MD_MONO | A2D_SBC_IE_CH_MD_STEREO | A2D_SBC_IE_CH_MD_JOINT | A2D_SBC_IE_CH_MD_DUAL), /* ch_mode */ (A2D_SBC_IE_BLOCKS_16 | A2D_SBC_IE_BLOCKS_12 | A2D_SBC_IE_BLOCKS_8 | A2D_SBC_IE_BLOCKS_4), /* block_len */ (A2D_SBC_IE_SUBBAND_4 | A2D_SBC_IE_SUBBAND_8), /* num_subbands */ (A2D_SBC_IE_ALLOC_MD_L | A2D_SBC_IE_ALLOC_MD_S), /* alloc_mthd */ BTA_AV_CO_SBC_MAX_BITPOOL, /* max_bitpool */ A2D_SBC_IE_MIN_BITPOOL /* min_bitpool */ }; Константа легко находится в коде, в моём случае она равна 20 0F F0 0C 03 35 02:

Обратите внимание на байт 0F

– он обеспечивает возможность подключения с любым из допустимых режимов, поскольку
x0F = A2D_SBC_IE_CH_MD_MONO | A2D_SBC_IE_CH_MD_STEREO | A2D_SBC_IE_CH_MD_JOINT | A2D_SBC_IE_CH_MD_DUAL = x08 | x02 | x01 | x04 Наша задача — изменить это значение таким образом: x0F = A2D_SBC_IE_CH_MD_DUAL = x04 Следовательно, необходимо заменить
?? 0F F0 0C 03 35 02 на ?? 04 ?? ?? ?? ?? ??

Итак, мы заставили стек подключаться в режиме Dual Channel как в случае инициирования подключения устройством, так и в случае инициирования подключения принимающей сигнал стороной.

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

Необходимо обработать btif_media_task_get_sbc_rate. Аналогичным образом по поиску характерной строки «non-edr a2dp sink detected, restrict rate to %d» отыскиваем функцию в коде:

Ограничение битрейта выражается в строке UINT16 rate = DEFAULT_SBC_BITRATE (что в свою очередь равно 328 кбит/с)

В коде это так:

Изменим это значение на 454 кбит/с – это выше стандартного и работает с подавляющим большинством приёмных устройств. Для этого заменим байты

B1 4F F4 A4 74 ?? E0 на ?? ?? ?? E3 ?? ?? ??

Также следует выполнить поиск по паттерну

E0 4F F4 A4 74 ?? E0 и заменить его на ?? ?? ?? E3 ?? ?? ?? — это требуется для ряда устройств.

Значение Е3 может быть другим в зависимости от желаемое максимального битрейта:

  • E3 – 454 кбит/с
  • F1 – 482 кбит /с
  • F3 – 486 кбит/с
  • 10 – 576 кбит/с
  • 48 – без ограничений

В целом, это определяется байт-кодом операции MOV.W R4, XXX.
На практике стоит поэкспериментировать и выбрать максимальное значение, при котором во всех Ваших принимающих устройствах происходит стабильный приём сигнала, отсутствует треск, прерывания и искажения.

На всех приёмниках в моём эксперименте (выше я их указал) таким значением было 576 кбит/с, в качестве источника сигнала выступал телефон Xiaomi Redmi 4x MIUI10 Android 7.1.

На основе описанных действий был создан дженерик-патч, который находит указанные паттерны в Bluetooth.default.so и заменяет их? включая принудительно режим Dual Channel и устанавливая лимит битрейта в 454 кбит/с. При необходимости, значение лимита может быть легко изменено на основании поиска и замены соответствующего байта — внимательный читатель сделает это без труда.

Подчёркиваю: патч работает только в случае bluedroid-стека и скорее всего не будет успешным в случае стека Fluoride и версии Android 8 и новее.

Патч можно скачать отсюда.

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

: данные модули сделаны мной для телефона Xiaomi Redmi 4x 3/32 Гб с актуальной на момент написания статьи стоковой глобальной стабильной прошивкой MIUI 10. В Вашем случае файл bluetooth.default.so придётся заменить на свой собственный, пропатченный, как описано выше. Возможно также, что файл придётся продублировать по пути /system/lib64/hw — это зависит от модели и версии прошивки Вашего телефона.

Данный подход с использованием модулей Magisk позволяет легко изменять максимальный битрейт и вообще отключать изменения, если окажется, что какое-то из принимающих устройств не поддерживает Dual Channel.

Рейтинг
( 2 оценки, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями: