Хабрахабр

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

Комикс XKCD про 14 конкурирующих стандартов: Надпись: СИТУАЦИЯ: есть 14 конкурирующих стандартов. Гик: 14?! Абсурд! Нам необходимо разработать один универсальный стандарт, на все случаи жизни. Спутница гика: Да! Надпись: Скоро: СИТУАЦИЯ: Есть 15 конкурирующих стандартов.

5 мм, беспроводные Bluetooth-наушники для многих стали основным способом прослушивания музыки и общения в режиме гарнитуры.
Производители беспроводных устройств не всегда пишут подробные характеристики товара, а статьи о Bluetooth-аудио в интернете противоречивы, местами некорректны, не рассказывают о всех особенностях, и часто копируют одну и ту же не соответствующую действительности информацию.
Попробуем разобраться с протоколом, возможностями Bluetooth-стеков ОС, наушников и колонок, Bluetooth-кодеков для музыки и речи, выясним, что влияет на качество передаваемого звука и задержку, научимся собирать и декодировать информацию о поддерживаемых кодеках и других возможностях устройств. Из-за массового выпуска смартфонов без аудиоразъема 3.

TL;DR:

  • SBC — нормальный кодек
  • У наушников есть свой эквалайзер и пост-процессинг на каждый кодек отдельно
  • aptX не настолько хорош, как о нём говорят рекламные анонсы
  • LDAC — маркетинговое фуфло
  • Качество звука в режиме разговора всё ещё низкое
  • В браузер можно встроить аудиоэнкодеры на C, скомпилировав в WebAssembly через emscripten, и они не будут особо тормозить.

Функциональная составляющая Bluetooth задается профилями — спецификациями конкретных функций. Передача музыки в Bluetooth осуществляется с использованием профиля передачи высококачественного однонаправленного аудио A2DP. Стандарт A2DP был принят в 2003 году, и с тех пор кардинально не менялся.
В рамках профиля стандартизирован 1 обязательный кодек низкой вычислительной сложности SBC, созданный специально для Bluetooth, и 3 дополнительных. Также допускается использование недокументированных кодеков собственной реализации.

По состоянию на июнь 2019 года мы находимся в комиксе xkcd с 14 A2DP-кодеками:

  • SBC ← стандартизирован в A2DP, поддерживается всеми устройствами
  • MPEG-1/2 Layer 1/2/3 ← стандартизированы в A2DP: всем известный MP3, используемый в цифровом ТВ MP2, и неизвестный MP1
  • MPEG-2/4 AAC ← стандартизирован в A2DP
  • ATRAC ← старый кодек от Sony, стандартизирован в A2DP
  • LDAC ← новый кодек от Sony
  • aptX ← кодек из 1988 года
  • aptX HD ← то же самое, что aptX, только с другими параметрами кодирования
  • aptX Low Latency ← совсем другой кодек, нет софтовой реализации
  • aptX Adaptive ← еще один кодек от Qualcomm
  • FastStream ← псевдокодек, двунаправленная модификация SBC
  • HWA LHDC ← новый кодек от Huawei
  • Samsung HD ← поддерживается 2 устройствами
  • Samsung Scalable ← поддерживается 2 устройствами
  • Samsung UHQ-BT ← поддерживается 3 устройствами

4 мбит/с? Зачем вообще нужны кодеки, спросите вы, когда в Bluetooth есть EDR, что позволяет передавать данные на скорости 2 и 3 мбит/с, а для несжатого двухканального 16-битного PCM достаточно 1.

В Bluetooth существует два типа передачи данных: Asynchronous Connection Less (ACL) для асинхронной передачи без установки соединения, и Synchronous Connection Oriented (SCO), для синхронной передачи с предварительным согласованием соединения.
Передача осуществляется с использованием схемы разделения времени и выбора канала передачи на каждый пакет отдельно (Frequency-Hop/Time-Division-Duplex, FH/TDD), для чего время делится на 625-микросекундные интервалы, называемые слотами (slot). Одно из устройств ведет передачу в чётных номерах слотов, другое — в нечётных. Передаваемый пакет может занимать 1, 3 или 5 слотов, в зависимости от размера данных и установленного типа передачи, в этом случае передача одним устройством ведётся в чётных и нечетных слотах до конца передачи. Всего в секунду можно принять и отправить до 1600 пакетов, если каждый из них занимает 1 слот, и оба устройства без остановки что-то передают и принимают.

Фактическая скорость передачи данных будет сильно отличаться. 2 и 3 мбит/с для EDR, которые можно встретить в анонсах и на сайте Bluetooth, являются максимальной канальной скоростью передачи всех данных суммарно (включая технические заголовки всех протоколов, в которые нужно инкапсулировать данные), в двух направлениях одновременно.

Для передачи музыки используется асинхронный способ, почти всегда с помощью пакетов типа 2-DH5 и 3-DH5, которые несут максимальное количество данных в режиме EDR 2 мбит/с и 3 мбит/с соответственно, и занимают 5 слотов временного разделения эфира.

В сумме — 3. Схематичное представление передачи с использованием 5 слотов одним устройством и 1 слота другим (DH5/DH1):
5 слотов на передачу, каждый из которых передаётся 625 микросекунд, и один слот на приём, тоже 625 микросекунд. 75 миллисекунды.

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

Необходимость инкапсуляции аудио в специальные транспортные протоколы L2CAP и AVDTP забирает 16 байт от возможного максимального количества передаваемой полезной аудионагрузки.

1414 и 1429 кбит/с точно недостаточно для передачи несжатого звука в реальных условиях, с зашумленным диапазоном 2.4 ГГц и необходимостью передачи служебных данных. EDR 3 мбит/с требователен к мощности передачи и шумам в эфире, поэтому, даже в режиме 3-DH5, комфортная передача PCM невозможна, постоянно будут кратковременные прерывания, и всё будет работать только на расстоянии в пару метров.
На практике, даже 990 кбит/с-аудиопоток (LDAC 990 kbit/s) передаётся с трудом.

Вернёмся к кодекам.

SBC

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

Указаны значения bitpool, frame length и bitrate. SBC — простой и вычислительно быстрый кодек, с примитивной психоакустической моделью (применяется только маскировка тихих звуков), использующий адаптивную импульсно-кодовую модуляцию (APCM).
Спецификация A2DP рекомендует к использованию два профиля: Middle Quality и High Quality.
Таблица режимов Middle Quality и High Quality. 1 кГц Joint Stereo.  Для 44.  High Quality: bitpool = 53, frame length = 119, bitrate = 328. Middle Quality: bitpool = 35, frame length = 83, bitrate = 229.

Если радиоэфир забит, пакеты теряются, или устройства находятся на большом расстоянии, источник аудио может уменьшать Bitpool, пока связь не нормализуется. У кодека много настроек, позволяющих управлять алгоритмической задержкой, количеством семплов в блоке, алгоритмом распределения битов, но почти повсеместно используются одни и те же рекомендованные в спецификации параметры: Joint Stereo, 8 частотных полос, 16 блоков в аудиофрейме, способ распределения бит Loudness.
SBC поддерживает динамическое изменение параметра Bitpool, который напрямую влияет на битрейт.

Например, у Bluedio T оно равно 39, у Samsung Gear IconX — 37, что даёт плохое качество звука. Производители большинства наушников устанавливают максимальное значение параметра Bitpool в 53, что ограничивает битрейт 328 килобитами в секунду при использовании рекомендованного профиля.
Даже если производитель наушников установил максимальное значение Bitpool выше 53 (такие модели встречаются, например: Beats Solo³, JBL Everest Elite 750NC, Apple AirPods, также бывает на некоторых ресиверах и автомобильных головных устройствах), то большинство ОС не позволят использовать повышенные битрейты из-за установленного внутреннего ограничения значения в Bluetooth-стеках.
Кроме того, некоторые производители задают низкое максимальное значение Bitpool для некоторых устройств.

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

Если весь битрейт использовался на нижние и средние частоты, верхние частоты «обрежутся» (вместо них будет тишина). SBC динамически выделяет биты квантования для частотных полос, действуя по принципу от нижних к верхним, с разными весовыми коэффициентами.

Вверху — оригинал, внизу — SBC, периодически происходит переключение между дорожками. Пример SBC 328 кбит/с. Использование FLAC в контейнере mp4 официально не стандартизировано, поэтому не факт, что ваш браузер воспроизведет его, но должно работать в последних версиях десктопных Chrome и Firefox. Для аудио в видеофайле используется кодек сжатия без потерь FLAC. Если у вас нет звука, можете скачать файл и открыть в полноценном видеоплеере.

Your browser does not support HTML5 video.

ZZ Top — Sharp Dressed Man

5 кГц, и совсем не выделяет битов для полосы выше 20 кГц. На спектрограмме виден момент переключения: SBC периодически режет тихие звуки выше 17. 7 МБ).
image Полная спектрограмма доступна по клику (1.

Я не слышу разницы между оригиналом и SBC на этом треке.

Возьмём что-нибудь новее, и смоделируем аудио, которое бы получилось при использовании наушников Samsung Gear IconX с Bitpool 37 (вверху — исходный сигнал, внизу — SBC 239 кбит/с, звук во FLAC).

Your browser does not support HTML5 video.

Mindless Self Indulgence — Witness

Я слышу треск, меньший стереоэффект и неприятное «цоканье» вокала в высоких частотах.

Одно и то же значение Bitpool 53 может давать как битрейт 328 кбит/с при рекомендованном профиле High Quality, так и 1212 кбит/с с Dual Channel и 4 частотными полосами, из-за чего авторы ОС, помимо ограничений на Bitpool, устанавливают ограничение еще и на Bitrate. Хоть SBC и очень гибкий кодек, может быть настроен под низкие задержки, даёт отличное качество аудио на высоких битрейтах (452+ кбит/с) и вполне хорошее для большинства людей на стандартном High Quality (328 кбит/с), из-за того, что стандарт A2DP не задает фиксированных профилей (а даёт только рекомендации), разработчики стеков установили искусственные ограничения на Bitpool, параметры передаваемого аудио не отображаются в пользовательском интерфейсе, а производители наушников вольны выставлять свои настройки и никогда не указывают значение Bitpool в технических характеристиках товара, кодек прославился низким качеством звука, хоть это и не проблема кодека как такового.
Параметр Bitpool прямо влияет на битрейт только в рамках одного профиля. Как мне видится, такая ситуация возникла из-за недоработки стандарта A2DP: нужно было согласовывать битрейт, а не Bitpool.

Таблица поддержки возможностей SBC в разных ОС:

* Bitpool только уменьшается, но не увеличивается автоматически, в случае улучшения условий передачи. Для восстановления Bitpool нужно остановить воспроизведение, подождать пару секунд и заново запустить аудио.
** Значение по умолчанию зависит от настроек стека, указанных при компиляции прошивки. В Android 8/8.1 частота только либо 44.1 кГц, либо 48 кГц, в зависимости от настроек при компиляции, в остальных версиях поддерживаются 44.1 кГц и 48 кГц одновременно.
*** Значение Bitpool можно поднять в программе Bluetooth Explorer.

aptX и aptX HD

aptX — простой и вычислительно быстрый кодек, без психоакустики, использующий адаптивную дифференциальную импульсно-кодовую модуляцию (ADPCM). Появился примерно в 1988 году (дата подачи патента датирована февралём 1988 г.), до Bluetooth использовался преимущественно в профессиональной беспроводной аудиоаппаратуре. На данный момент принадлежит компании Qualcomm, требует лицензирования и лицензионных отчислений. По состоянию на 2014 год: $6000 единовременно и ≈$1 за каждое устройство, для партий до 10000 устройств (источник, стр. 16).
aptX и aptX HD — один и тот же кодек, с разными профилями кодирования.

Ещё есть, правда, выбор количества/режима каналов, но во всех известных мне устройствах (70+ штук) поддерживается исключительно Stereo. У кодека есть только один параметр — выбор частоты дискретизации.

* Версии до 7 требуют модификации Bluetooth-стека. Кодек поддерживается, только если производитель Android-устройства лицензировал использование кодека у Qualcomm (если в ОС есть библиотеки кодирования).

5 кГц, 4 бита для 5. aptX разделяет аудио на 4 частотных полосы и квантует их одним и тем же количеством бит постоянно: 8 бит для 0-5. 5 кГц, 2 бита для 16. 5-11 кГц, 2 бита для 11-16. 1 кГц). 5-22 кГц (цифры для частоты дискретизации 44.

Пример aptX-аудио (вверху — исходный сигнал, внизу — aptX, спектрограммы только левых каналов, звук во FLAC):

Your browser does not support HTML5 video.

Верхние частоты стали немного краснее, но разницы не слышно.

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

Это позволяет уменьшить требования к количеству бит, необходимых для хранения такой же (без потерь) или практически такой же (с относительно небольшой ошибкой округления) информации. Не следует считать, что использование, например, 2 бит для полосы уменьшает динамический диапазон до 12 дБ: ADPCM позволяет использовать до 96 дБ динамического диапазона даже при использовании 2 бит квантования, но только при определенном сигнале.
ADPCM хранит разницу числового представления между текущим и следующим отсчетом, вместо записи абсолютного значения, как в PCM. Чем ближе аудиосигнал к тому набору музыки, на которых строились таблицы, тем меньше ошибок квантования (шумов) создает aptX. Для уменьшения ошибок округления применяются таблицы коэффициентов.
При создании кодека, авторы рассчитывали коэффициенты ADPCM на наборе музыкальных аудиофайлов.

Я сделал специальный синтетический пример, на котором aptX показывает плохие результаты — синусоида частотой 12. Из-за этого синтетические тесты всегда будут давать результат хуже, чем музыка. Звук во FLAC. 4 кГц (вверху — исходный сигнал, внизу — aptX. Уменьшите громкость!):

Your browser does not support HTML5 video.

График спектра:
График спектра, максимальный уровень шумов — -55 dB

Отчетливо слышны шумы.

Однако, если сгенерировать синусоиду с меньшей амплитудой, чтобы она была тише, шумы также станут тише, что говорит о широком динамическом диапазоне:

График спектра, максимальный уровень шумов — -75 dB

Такой подход, в общем случае, некорректен, и не давал бы вменяемого результата с более сложными кодеками, но конкретно для ADPCM вполне подходит.
Разница между оригиналом и aptX
Среднее квадратическое разницы сигналов находится на уровне -37. Чтобы услышать разницу между оригинальным музыкальным треком и сжатым, можно инвертировать один из сигналов и сложить треки поканально. 4 дБ, что не много для такой компрессированной музыки.

aptX HD

aptX HD не является самостоятельным кодеком — это улучшенный профиль кодирования кодека aptX. Изменения коснулись количества бит, отведённых для кодирования частотных диапазонов: 10 бит для 0-5.5 кГц, 6 бит для 5.5-11 кГц, 4 бита для 11-16.5 кГц, 4 бита для 16.5-22 кГц (цифры для 44.1 кГц). * Версии до 7 требуют модификации Bluetooth-стека. Кодек поддерживается, только если производитель Android-устройства лицензировал использование кодека у Qualcomm (если в ОС есть библиотеки кодирования).

Менее распространён, чем aptX: по всей видимости, требует отдельного лицензирования у Qualcomm, и отдельных лицензионных отчислений.

4 кГц:
График спектра, максимальный уровень шумов — -72 dB Повторим пример с синусоидой на 12.

Гораздо лучше, чем с aptX, но всё равно шумновато.

aptX Low Latency

Кодек от Qualcomm, не имеющий общего со стандартными aptX и aptX HD, судя по немногочисленной информации от людей, причастных к его разработке. Предназначен для интерактивной передачи аудио с низкой задержкой (фильмы, игры), там, где задержка звука не может подстраиваться программно. Известные софтовые реализации энкодеров и декодеров отсутствуют, поддерживается исключительно трансмиттерами, ресиверами, наушниками и колонками, но не смартфонами и компьютерами.

AAC

AAC, или Advanced Audio Coding — вычислительно сложный кодек, с серьезной психоакустической моделью. Получил широкое распространение для аудио в интернете, второе по популярности после MP3. Требует лицензирования и лицензионных отчислений: $15000 единовременно (или $1000 для компаний с менее 15 работниками) + $0.98 за первые 500000 устройств (источник).
Кодек стандартизирован в рамках спецификаций MPEG-2 и MPEG-4, и вопреки частому заблуждению, не принадлежит Apple. * только на устройствах, производители которых заплатили лицензионные отчисления

В Android используется второй по качеству кодировщик Fraunhofer FDK AAC, но могут использоваться различные аппаратные, встроенные в платформу (SoC), с неизвестным качеством кодирования. В iOS и macOS используется лучший на сегодняшний день кодировщик Apple AAC, обеспечивающий максимально возможное качество аудио. У Huawei P20 Pro наблюдается резкий спад в районе 14 кГц, у LG V30 — в районе 16 кГц, у Samsung Note 8 — 17 кГц, у Apple iPhone 7 — 19 кГц."/> По недавним тестам сайта SoundGuys, качество кодирования AAC разными Android-телефонами сильно отличается:
<img src="https://habrastorage.org/getpro/habr/post_images/80d/70f/e89/80d70fe89844c47aa58f3e1e24c3223e.jpg" alt="График спектра кодирования AAC различных мобильных устройств.

Остальные битрейты встречаются крайне редко.
AAC обеспечивает отличное качество на битрейтах 320 и 256 кбит/с, но подвержен потерям последовательного кодирования уже сжатого контента, однако, услышать какие-либо различия с оригиналом на iOS при битрейте 256 кбит/с сложно даже при при нескольких последовательных кодированиях, при одиночном кодировании, например, MP3 320 кбит/с в AAC 256 кбит/с потерями можно пренебречь.
Как и в случае с другими Bluetooth-кодеками, любая музыка сначала декодируется, затем кодируется кодеком. У большинства беспроводных аудиоустройств для AAC установлен максимальный битрейт 320 кбит/с, некоторые поддерживают только 256 кбит\с. Это необходимо для микширования нескольких аудиопотоков, например, музыки и уведомления о новом сообщении. При прослушивании музыки в формате AAC она сначала декодируется средствами ОС, затем кодируется в AAC еще раз, для передачи по Bluetooth. В интернете можно найти множество утверждений о том, что на iOS музыка в формате AAC не транскодируется при передаче через Bluetooth, что неверно. iOS — не исключение.

MP1/2/3

Кодеки семейства MPEG-1/2 Part 3 состоят из известного и широкоиспользуемого MP3, менее распространённого MP2 (применяется преимущественно в цифровом ТВ и радио), и совсем неизвестного MP1.

Вроде бы, сторонний стек BlueSoleil для Windows может кодировать в MP3, если вручную изменить файл конфигурации, но у меня его установка приводит к BSoD на Windows 10. Старые кодеки MP1 и MP2 не поддерживаются совсем: мне не удалось найти ни одни наушники и ни один Bluetooth-стек, который бы кодировал или декодировал их.
Декодирование MP3 поддерживается некоторыми наушниками, но кодирование не поддерживается ни в одном стеке современных операционных систем. В то время архитектура ОС смартфонов позволяла получать доступ ко многим низкоуровневым функциям, а на Windows Mobile и вовсе можно было устанавливать сторонние Bluetooth-стеки. Вывод — кодеком фактически нельзя пользоваться для Bluetooth-аудио.
Раньше, в 2006-2008 годах, до распространения стандарта A2DP в устройствах, люди слушали MP3-музыку на гарнитуре Nokia BH-501 через программу MSI BluePlayer, которая была доступна на Symbian и Windows Mobile.

Последний патент кодека MP3 истёк, использование кодека не требует лицензионных отчислений с 23 апреля 2017 года.

S. If the longest-running patent mentioned in the aforementioned references is taken as a measure, then the MP3 technology became patent-free in the United States on 16 April 2017 when U. Patent 6,009,399, held by and administered by Technicolor, expired.

Источник: www.iis.fraunhofer.de/en/ff/amm/prod/audiocodec/audiocodecs/mp3.html

LDAC

Новый и активно продвигаемый «Hi-Res»-кодек от Sony, поддерживающий частоты дискретизации до 96 кГц и 24-битовую разрядность, с битрейтом до 990 кбит/с. Рекламируется в качестве аудиофильского кодека, как замена существующим Bluetooth-кодекам. Имеет функцию адаптивной подстройки битрейта, в зависимости от условий радиоэфира.

Программные декодеры в свободном доступе отсутствуют, спецификация кодека недоступна широкой публике, однако, по первому взгляду на энкодер, внутреннее устройство кодека схоже с ATRAC9 — кодеком от Sony, используемом в PlayStation 4 и Vita: оба работают в частотном диапазоне, используют модифицированное дискретное косинус-преобразование (MDCT) и сжатие с применением алгоритма Хаффмана. Энкодер LDAC (libldac) входит в стандартную поставку Android, поэтому кодирование поддерживается на любом Android-смартфоне, начиная с 8 версии ОС.

Возможность декодирования LDAC иногда встречается на наушниках и ЦАП других производителей, но очень редко. Поддержка LDAC представлена практически только наушниками от Sony.

1/16) без потерь. Маркетинг LDAC в качестве Hi-Res-кодека вредит его технической составляющей: глупо расходовать битрейт на передачу не слышимых человеческим ухом частот и повышенную разрядность, покуда его не хватает для передачи CD-качества (44. В первом случае по воздуху передаётся только 44. К счастью, у кодека есть два режима работы: передача CD-аудио и передача Hi-Res-аудио. 1 кГц/16 бит.

По результатам теста LDAC на ЦАП с его поддержкой, который подключили инженеры сайта SoundGuys.com через цифровой выход и записали выдаваемый звук на тестовых сигналах, LDAC 660 и 990 кбит/с в режиме CD-качества обеспечивает соотношение сигнал/шум немногим лучше такового у aptX HD. Так как программного декодера LDAC нет в свободном доступе, протестировать кодек без дополнительных устройств, раскодирующих LDAC, невозможно.

LDAC CD 990 kbit/s noise profile
Источник: www.soundguys.com/ldac-ultimate-bluetooth-guide-20026

LDAC также поддерживает динамический битрейт вне установленных профилей — от 138 кбит/с до 990 кбит/с, но, насколько могу судить, в Android используются только стандартизированные профили 303/606/909 и 330/660/990 кбит/с.

Прочие кодеки

Другие A2DP-кодеки не получили широкого распространения. Их поддержка либо практически полностью отсутствует, либо имеется только на определенных моделях наушников и смартфонов.
Стандартизированный в A2DP кодек ATRAC ни разу не использовался в качестве Bluetooth-кодека даже самими Sony, кодеки Samsung HD, Samsung Scalable и Samsung UHQ-BT имеют очень ограниченную поддержку со стороны передающих и получающих устройств, а HWA LHDC — слишком новый, и поддерживается всего тремя(?) устройствами. Не все производители публикуют точную информацию о кодеках, которые поддерживают те или иные беспроводные наушники, колонки, ресиверы или трансмиттеры. Иногда бывает так, что поддержка определённого кодека есть только на передачу, но на не приём (актуально для комбинированных трансмиттеров-ресиверов), хотя производитель заявляет просто о «поддержке», без примечаний (предполагаю, в этом виновато раздельное лицензирование энкодеров и декодеров некоторых кодеков). В самых дешевых устройствах можно вовсе не обнаружить заявленную поддержку aptX.

Однако, даже в Android будут отображаться только те кодеки, которые поддерживает как телефон, так и наушники. К сожалению, в интерфейсах большинства ОС нигде не отображается используемый кодек, и единственая ОС, имеющая хоть какой-то индикатор — Android, начиная с 8 версии.

Записать и проанализировать дамп трафика с параметрами согласования A2DP!
Сделать это можно в Linux, macOS и Android. Как же узнать, какие кодеки поддерживает устройство? Вы получите дамп в формате btsnoop, который можно загрузить в анализатор Wireshark.
Обратите внимание: корректный дамп можно получить только подключившись с телефона/компьютера к наушникам/колонке (как бы курьёзно это ни звучало)! В Linux можно воспользоваться Wireshark или hcidump, в macOS — Bluetooth Explorer, а в Android — штатной функцией сохранения Bluetooth HCI-дампа, которая доступна в инструментах разработчика. Чтобы гарантированно записать корректный дамп, сначала разорвите сопряжение с устройством, а затем, во время записи дампа, сопрягите телефон с наушниками. Наушники могут самостоятельно устанавливать соединение с телефоном, и в этом случае они будут запрашивать список кодеков у телефона, а не наоборот.

Используте следующий фильтр отображения, чтобы отсеять нерелевантный трафик:

btavdtp.signal_id

В результате вы должны увидеть что-то похожее:
Wireshark с загруженным дампом и фильтром для отображения A2DP-команды GetCapabilities

Виден идентификатор кодека."/> На каждом пункте команды GetCapabilities можно нажать, и посмотреть подробные характеристики кодека.
<img src="https://habrastorage.org/webt/7s/9a/xa/7s9axaeztya_dr2irptfi68ejxs.png" alt="Характеристики одного из выбранных пунктов.

Wireshark знает не все идентификаторы кодеков, поэтому часть кодеков придётся расшифровывать вручную, смотря в таблицу идентификаторов ниже:

Mandatory:
0x00 - SBC Optional:
0x01 - MPEG-1,2 (aka MP3)
0x02 - MPEG-2,4 (aka AAC)
0x04 - ATRAC Vendor specific:
0xFF 0x004F 0x01 - aptX
0xFF 0x00D7 0x24 - aptX HD
0xFF 0x000A 0x02 - aptX Low Latency
0xFF 0x00D7 0x02 - aptX Low Latency
0xFF 0x000A 0x01 - FastStream
0xFF 0x012D 0xAA - LDAC
0xFF 0x0075 0x0102 - Samsung HD
0xFF 0x0075 0x0103 - Samsung Scalable Codec
0xFF 0x053A 0x484C - Savitech LHDC 0xFF 0x000A 0x0104 - The CSR True Wireless Stereo v3 Codec ID for AAC
0xFF 0x000A 0x0105 - The CSR True Wireless Stereo v3 Codec ID for MP3
0xFF 0x000A 0x0106 - The CSR True Wireless Stereo v3 Codec ID for aptX

Чтобы не анализировать дампы вручную, я сделал сервис, который проанализирует всё автоматически: btcodecs.valdikss.org.ru

У каждого кодека есть свои преимущества и недостатки.
aptX и aptX HD используют жестко заданные профили, которые нельзя изменить без модификации энкодера и декодера. Ни производитель телефона, ни производитель наушников не в силах изменить битрейт или коэффициенты кодирования aptX. Владелец кодека, Qualcomm, выдаёт референсный энкодер в виде библиотеки. Эти факты — сильная сторона aptX — вы наперед знаете, какого качества звук вы получите, без каких-либо «но».

«Высокое качество» уже не такое высокое по современным меркам, а большинство Bluetooth-стеков не позволяют использовать параметры лучше, чем в профиле «высокое качество», хоть технические ограничения для этого отсутствуют.
Bluetooth SIG не имеет референсного энкодера SBC в виде библиотеки, и производители реализуют его самостоятельно.
Это — слабые стороны SBC — никогда наперед не ясно, какого качества звука ожидать от конкретного устройства. SBC, напротив, имеет множество настраиваемых параметров, динамический битрейт (энкодер может уменьшать параметр bitpool, если радиоэфир загружен), и не имеет жестко заданных профилей, а только рекомендуемые «среднее качество» и «высокое качество», которые добавили в спецификацию A2DP в 2003 году. SBC может выдавать как низкое, так и очень высокое качество звука, но последнее недостижимо без отключения или обхода искуственных ограничений Bluetooth-стеков.

Вероятнее всего, вина на низкокачественных аппаратных аудиоэнкодерах, встроенных в различные чипсеты телефонов. Ситуация с AAC неоднозначная: с одной стороны, теоретически кодек должен выдавать качество, неотличимое от оригинала, но практикой, судя по тестам лаборатории SoundGuys на разных Android-устройствах, это не подтверждается. Имеет смысл использовать AAC только на устройствах Apple, а на Android ограничиться aptX и LDAC.

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

С помощью него вы сможете тестировать эти аудиокодеки без фактической передачи аудио по Bluetooth, на любых проводных наушниках, колонках, и вашей любимой музыке, а также изменять параметры кодирования прямо во время воспроизведения аудио:
btcodecs.valdikss.org.ru/sbc-encoder
Сервис использует библиотеки кодирования SBC из проекта BlueZ и libopenaptx из ffmpeg, которые скомпилированы в WebAssembly и JavaScript из C, через emscripten, для выполнения в браузере. Я сделал веб-сервис, кодирующий аудио в SBC, aptX и aptX HD в реальном времени, прямо в браузере. Кто мог мечтать о таком будущем!

Вот как это выглядит:

Your browser does not support HTML5 video.

Обратите внимание, как меняется уровень шума после 20 кГц у разных кодеков. В оригинальном MP3-файле частоты выше 20 кГц отсутствуют.

Попробуйте попереключать кодеки и оценить, слышите ли вы разницу между оригиналом, SBC 53 Joint Stereo (стандартный и наиболее распространенный профиль), и aptX/aptX HD.

Я слышу разницу между кодеками в наушниках!

Люди, которые не слышат разницы между кодеками во время тестирования через веб-сервис, уверяют, что слышат её при прослушивании музыки в беспроводных наушниках. Увы, это не прикол и не эффект плацебо: разница действительно слышна, однако вызвана она не отличиями кодеков.

Производители Bluetooth-аппаратуры могут настроить DSP для каждого кодека раздельно, и при переключении между кодеками слушателю будет казаться, что он слышит различие работы кодеков, когда в действительности он слушает разные настройки DSP. Подавляющее большинство чипсетов Bluetooth-аудио, используемых в принимающих беспроводных устройствах, оснащаются цифровым обработчиком сигналов (Digital signal processor, DSP), который реализует эквалайзер, компандер, расширитель стерео и другие вещи, призванные улучшить (или изменить) звук.

На картинке: ДЕКОДЕР - Параметрический эквалайзер - улучшение стерео - компандер - пост мастеринг - усиление выхода
Конвеер обработки звука DSP Kalimba в чипах производства CSR/Qualcomm

На картинке: галочки активации разных функций DSP отдельно на каждый кодек.
Активация различных функций DSP для каждого кодека и выхода отдельно

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

Функциональные особенности устройств

Современная версия стандарта A2DP имеет функцию «абсолютной регулировки громкости» — управление громкостью устройства специальными командами протокола AVRCP, которое регулирует усиление выходного каскада, вместо программного уменьшения громкости аудиопотока. Если при изменении громкости на наушниках, изменение не синхронизируется с громкостью на телефоне, то это означает, что ваши наушники или телефон не поддерживают эту функцию. В таком случае, имеет смысл слушать музыку всегда с максимальной громкостью на телефоне, регулируя фактическую громкость кнопками наушников — в этом случае соотношение сигнал/шум будет лучше, и качество аудио должно быть выше.
В реальности же бывают печальные ситуации. На моих наушниках RealForce OverDrive D1 для SBC включен сильный компандер, и увеличение громкости приводит к повышению уровня тихих звуков, а громкость громких звуков при этом не меняется (происходит компрессия сигнала). Из-за этого приходится устанавливать громкость на компьютере примерно в половину, в этом случае эффекта компрессии практически нет.
По моим наблюдениям, все наушники с дополнительными кодеками поддерживают функцию абсолютной регулировки громкости, видимо, это одно из требований для сертификации кодеков.

Это позволяет, например, слушать музыку с компьютера и принимать звонки с телефона. Некоторые наушники поддерживают подключение двух устройств одновременно. Однако следует знать, что в этом режиме отключаются альтернативные кодеки, и используется только SBC.

3 Delay Reporting позволяет наушникам сообщать задержку передающему устройству, с которой фактически воспроизводится звук. Функция AVDTP 1. 0+. Это позволяет подстраивать синхронизацию аудио с видео в время просмотра видеофайлов: при проблемах с передачей по радиоэфиру, аудио не будет отставать от видео, а наоборот, видео будет тормозиться видеоплеером, пока аудио и видео снова не синхронизируются.
Функция поддерживается многими наушниками, Android 9+ и Linux с PulseAudio 12. О поддержке функции на других платформах мне неизвестно.

Для передачи голоса в Bluetooth используется Synchronous Connection Oriented (SCO) — синхронная передача с предварительным согласованием соединения. Режим позволяет передавать звук и голос одновременно (синхронно), а не выделять слоты на приём и передачу, как в случае A2DP. Это понижает общую задержку передачи аудио через радиоканал, но накладывает серьёзные ограничения на количество передаваемых данных за единицу времени, и отрицательно сказывается на качестве.
Когда используется этот режим, и голос, и аудио передаются с одинаковым качеством.
К сожалению, по состоянию на 2019 год, качество передачи речи через Bluetooth всё ещё низкое, и непонятно, почему Bluetooth SIG с этим ничего не делает.

CVSD

Базовый кодек передачи речи CVSD был стандартизирован в 2002 году, и поддерживается всеми устройствами двунаправленной связи через Bluetooth. Он обеспечивает передачу аудио с частотой дискретизации в 8 кГц, что соответствует качеству обычной проводной телефонии.

Пример записи в этом кодеке.

mSBC

Дополнительный кодек mSBC был стандартизирован в 2009 году, а в 2010 уже появились чипы, использующие его для передачи голоса. mSBC широко поддерживается различными устройствами.
Это не самостоятельный кодек, а обычный SBC из стандарта A2DP, с фиксированным профилем кодирования: 16 кГц, моно, bitpool 26.

Пример записи в этом кодеке.

Не блеск, но гораздо лучше, чем CVSD, однако всё ещё неприятно использовать его для общения через интернет, особенно, когда вы используете наушники для общении в игре — звук игры тоже будет передаваться с частотой дискретизации в 16 кГц.

FastStream

Компания CSR решила развить идею переиспользования SBC. Чтобы обойти ограничения протокола SCO и использовать более высокие битрейты, CSR пошли другим путём — внедрили поддержку двустороннего SBC-аудио в стандарт передачи одностороннего аудио A2DP, стандартизировали профили кодирования, и назвали это «FastStream».

1 или 48 кГц с битрейтом в 212 кбит/с, а для передачи аудио с микрофона используется моно, 16 кГц, с битрейтом 72 кбит/с (чуть лучше, чем у mSBC). FastStream передает в динамики стереозвук 44. Такие параметры гораздо лучше подходят для общения в онлайн-играх — звук игры и собеседников будет качественный.

Пример записи в этом кодеке (+ звук с микрофона, такой же, как у mSBC).

Компания придумала интересный костыль, но из-за того, что он противоречит стандарту A2DP, его поддержка есть только в некоторых трансмиттерах компании (которые работают как USB-аудиокарта, а не Bluetooth-устройство), но поддержки в Bluetooth-стеках он не получил, хотя количество наушников с поддержкой FastStream не такое уж и малое.

На данный момент поддержка FastStream в ОС есть только в виде патча для Linux'ового PulseAudio от разработчика Pali Rohár, который не включён в основную ветку программы.

aptX Low Latency

К большому удивлению, aptX Low Latency тоже поддерживает двунаправленное аудио, реализуя такой же принцип, как у FastStream.
Использовать эту особенность кодека не получится нигде — поддержки декодирования Low Latency нет ни в одной ОС и ни в одном известном мне Bluetooth-стеке. Вокруг спецификаций и версий Bluetooth возникла большая путаница из-за наличия двух несовместимых стандартов под одним брендом, оба из которых широко применяются для разных целей.

Ещё есть третий протокол, Bluetooth High Speed, но он не распространён, и не используется в бытовых устройствах. Существует два разных, не совместимых между собой протокола Bluetooth: Bluetooth Classic и Bluetooth Low Energy (LE, он же Bluetooth Smart).

0, изменения в спецификации касались преимущественно Bluetooth Low Energy, а Classic-версия получала только незначительные улучшения. Начиная с Bluetooth 4.

2 и Bluetooth 5:
Список изменений между Bluetooth 4.

2 TO 5. 9 CHANGES FROM v4.

1 NEW FEATURES 9.

0 Release. Several new features are introduced in the Bluetooth Core Specification 5. 1. The major areas of improvement are:
• Slot Availability Mask (SAM)
• 2 Msym/s PHY for LE
• LE Long Range
• High Duty Cycle Non-Connectable Advertising
• LE Advertising Extensions
• LE Channel Selection Algorithm #2
9. 0
• Higher Output Power 1 Features Added in CSA5 — Integrated in v5.

Источник: www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=421043 (страница 291)

Все остальные изменения затрагивают только Bluetooth LE (и Higher Output Power тоже). Только одно изменение коснулось Classic-версии в рамках спецификации Bluetooth 5: добавили поддержку технологии Slot Availability Mask (SAM), призванную улучшить разделение радиоэфира.

Наушники и колонки подключить через Bluetooth Low Energy невозможно: не существует стандарта передачи аудио с использованием LE. Все аудиоустройства используют только Bluetooth Classic. Стандарт A2DP, применяемый для передачи высококачественного аудио, работает только через Bluetooth Classic, и аналога в LE ему не существует.

Bluetooth 4. Вывод — приобретать аудиоустройства с Bluetooth 5 только из-за новой версии протокола бессмысленно. 1/4. 0/4. Немудрено, ведь даже производители Bluetooth-чипов в своих анонсах путаются в отличиях новой версии стандарта, а некоторые Bluetooth 5-чипы поддерживают пятую версию только для LE, а для Classic используют 4. 2 в контексте передачи аудио будет работать точно так же.
Если анонс новых наушников упоминает удвоенный радиус работы и уменьшенное энергопотребление благодаря Bluetooth 5, то знайте — они либо сами не разбираются, либо вводят вас в заблуждение. 2.

Величина задержки (запаздывания) аудио зависит от многих факторов: размера буфера в аудиостеке, в Bluetooth-стеке и в самом воспроизводящем беспроводном устройстве, алгоритмической задержки кодека.

Алгоритмическая задержка AAC для 44. Задержка простых кодеков, вроде SBC, aptX и aptX HD, совсем небольшая, и составляет 3-6 мс, чем можно пренебречь, но комплексные кодеки, вроде AAC и LDAC, могут давать ощутимое запаздывание. LDAC — около 30 мс (по грубому анализу исходного кода. 1 кГц составляет 60 мс. Могу ошибаться, но не сильно.)

Во время тестов я получил разброс от 150 до 250 мс на разных устройствах (с кодеком SBC). Итоговая задержка сильно зависит от воспроизводящего устройства, его чипсета и буфера. Если предположить, что устройства с поддержкой дополнительных кодеков aptX, AAC и LDAC используют качественные компоненты и маленький размер буфера, то получим следующие типичные задержки:

SBC: 150-250 мс
aptX: 130-180 мс
AAC: 190-240 мс
LDAC: 160-210 мс

Напоминаю: aptX Low Latency не поддерживается в операционных системах, из-за чего меньшую задержку можно получить только связкой трансмиттер+ресивер или трансмиттер+наушники/колонка, причём все устройства должны поддерживать этот кодек.

Как отличить качественное аудиоустройство от дешёвой поделки? По внешнему виду, прежде всего!

У дешевых китайских наушников, колонок и ресиверов:

  1. Отсутствует слово «Bluetooth» на коробке и устройстве, чаще всего используется «Wireless» и «BT»
  2. Отсутствует логотип Bluetooth Логотип Bluetooth на коробке или устройстве
  3. Нет синего мигающего светодиода

Отсутствие этих элементов говорит о том, что устройство не проходило сертификацию, а значит — низкокачественное и потенциально проблемное. Например, наушники фирмы Bluedio не сертифицированы Bluetooth, и не полностью соответствуют спецификации A2DP. Сертификацию они бы не прошли.

Рассмотрим несколько устройств и коробок от них:

В инструкции может быть логотип и название технологии Bluetooth, но самое главное — чтобы они были на коробке и/или самом устройстве. Это всё — несертифицированные устройства.

Если ваши наушники или колонка говорят «Ze bluetooth dewise is connecteda successfulle», это тоже не говорит об их качестве:

Способен ли Bluetooth полностью заменить проводные наушники и гарнитуры? Способен, но ценой низкого качества в режиме разговора, увеличенной задержкой передачи звука, которая может раздражать в играх, и множества проприетарных кодеков, требующих лицензионных отчислений и увеличивающих конечную стоимость как смартфонов, так и наушников.

Маркетинг альтернативных кодеков очень сильный: aptX и LDAC представляют в виде долгожданной замены «устаревшего и плохого» SBC, который далеко не так плох, как о нём принято думать.

Я взял инициативу в свои руки: Модифицируем Bluetooth-стек для улучшения звука на наушниках без кодеков AAC, aptX и LDAC Как выяснилось, искусственные ограничения Bluetooth-стеков на битрейт SBC можно обойти, так, что SBC не будет уступать aptX HD.

Этот файл раньше был выложен на сайте Bluetooth публично, но теперь он доступен только для вступивших в Bluetooth SIG. Бонус: референсный энкодер SBC, информация о битстриме A2DP и тестовые файлы.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть