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

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

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





Музыка через Bluetooth

Функциональная составляющая 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 устройствами


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


Передача данных через Bluetooth

В 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 слотов временного разделения эфира.

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

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

Необходимость инкапсуляции аудио в специальные транспортные протоколы L2CAP и AVDTP забирает 16 байт от возможного максимального количества передаваемой полезной аудионагрузки.
Тип пакета Кол-во слотов Макс. кол-во байт в пакете Макс. кол-во байт полезной нагрузки A2DP Макс. битрейт полезной нагрузки A2DP
2-DH3 3 367 351 936 кбит/с
3-DH3 3 552 536 1429 кбит/с
2-DH5 5 679 663 1414 кбит/с
3-DH5 5 1021 1005 2143 кбит/с
1414 и 1429 кбит/с точно недостаточно для передачи несжатого звука в реальных условиях, с зашумленным диапазоном 2.4 ГГц и необходимостью передачи служебных данных. EDR 3 мбит/с требователен к мощности передачи и шумам в эфире, поэтому, даже в режиме 3-DH5, комфортная передача PCM невозможна, постоянно будут кратковременные прерывания, и всё будет работать только на расстоянии в пару метров.
На практике, даже 990 кбит/с-аудиопоток (LDAC 990 kbit/s) передаётся с трудом.

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

SBC

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

Частота дискретизации Разрядность Битрейт Поддержка кодирования Поддержка декодирования
16, 32, 44.1, 48 кГц 16 бит 10-1500 кбит/с Всеми устройствами Всеми устройствами


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

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

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

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

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

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

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

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

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

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

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

Таблица поддержки возможностей SBC в разных ОС:
ОС Поддерживаемые частоты дискретизации Ограничение макс. Bitpool Ограничение макс. Bitrate Типичный Bitrate Динамическая подстройка Bitpool
Windows 10 44.1 кГц 53 512 кбит/с 328 кбит/с ?*
Linux (BlueZ + PulseAudio) 16, 32, 44.1, 48 кГц 64 (при входящем подключении), 53 (при исходящем) Нет ограничения 328 кбит/с ?*
macOS High Sierra 44.1 кГц 64, по умолчанию 53*** Неизвестно 328 кбит/с ?
Android 4.4-9 44.1/48 кГц** 53 328 кбит/с 328 кбит/с ?
Android 4.1-4.3.1 44.1, 48 кГц** 53 229 кбит/с 229 кбит/с ?
Blackberry OS 10 48 кГц 53 Нет ограничения 328 кбит/с ?
* 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.

Кодек Частота дискретизации Разрядность Битрейт Поддержка кодирования Поддержка декодирования
aptX 16, 32, 44.1, 48 кГц 16 бит 128 / 256 / 352 / 384 кбит/с (в зависимости от частоты дискретизации) Windows 10 (десктопная и мобильная), macOS, Android 4.4+/7*, Blackberry OS 10 Широким числом аудиоустройств (аппаратно)
* Версии до 7 требуют модификации Bluetooth-стека. Кодек поддерживается, только если производитель Android-устройства лицензировал использование кодека у Qualcomm (если в ОС есть библиотеки кодирования).

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

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

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

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

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

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

График спектра:
График спектра, максимальный уровень шумов — -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 кГц).

Кодек Частота дискретизации Разрядность Битрейт Поддержка кодирования Поддержка декодирования
aptX HD 16, 32, 44.1, 48 кГц 24 бита 192 / 384 / 529 / 576 кбит/с (в зависимости от частоты дискретизации) Android 8+* Некоторыми аудиоустройствами (аппаратно)
* Версии до 7 требуют модификации Bluetooth-стека. Кодек поддерживается, только если производитель Android-устройства лицензировал использование кодека у Qualcomm (если в ОС есть библиотеки кодирования).

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

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

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

aptX Low Latency

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

Частота дискретизации Битрейт Поддержка кодирования Поддержка декодирования
44.1 кГц 276/420 кбит/с Некоторыми трансмиттерами (аппаратно) Некоторыми аудиоустройствами (аппаратно)


AAC

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

Частота дискретизации Битрейт Поддержка кодирования Поддержка декодирования
8 — 96 кГц 8 — 576 кбит/с (для стерео), 256 — 320 кбит/с (типичный для Bluetooth) macOS, Android 7+*, iOS Широким числом аудиоустройств (аппаратно)
* только на устройствах, производители которых заплатили лицензионные отчисления

В iOS и macOS используется лучший на сегодняшний день кодировщик Apple AAC, обеспечивающий максимально возможное качество аудио. В Android используется второй по качеству кодировщик Fraunhofer FDK AAC, но могут использоваться различные аппаратные, встроенные в платформу (SoC), с неизвестным качеством кодирования. По недавним тестам сайта SoundGuys, качество кодирования AAC разными Android-телефонами сильно отличается:
График спектра кодирования AAC различных мобильных устройств. У Huawei P20 Pro наблюдается резкий спад в районе 14 кГц, у LG V30 — в районе 16 кГц, у Samsung Note 8 — 17 кГц, у Apple iPhone 7 — 19 кГц.

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


MP1/2/3

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

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

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

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.S. Patent 6,009,399, held by and administered by Technicolor, expired.
Источник: www.iis.fraunhofer.de/en/ff/amm/prod/audiocodec/audiocodecs/mp3.html

Частота дискретизации Битрейт Поддержка кодирования Поддержка декодирования
16 — 48 кГц 8 — 320 кбит/с Нигде не поддерживается Некоторыми аудиоустройствами (аппаратно)


LDAC

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

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

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

Частота дискретизации Битрейт Поддержка кодирования Поддержка декодирования
44.1 — 96 кГц 303/606/909 кбит/с (для 44.1 и 88.2 кГц), 330/660/990 кбит/с (для 48 и 96 кГц) Android 8+ Некоторыми наушниками Sony и единичными устройствами других производителей (аппаратно)


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

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

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, начиная с 8 версии, и macOS. Однако, даже в этих ОС будут отображаться только те кодеки, которые поддерживает как телефон/компьютер, так и наушники.

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

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


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

На каждом пункте команды GetCapabilities можно нажать, и посмотреть подробные характеристики кодека.
Характеристики одного из выбранных пунктов. Виден идентификатор кодека.

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 — вы наперед знаете, какого качества звук вы получите, без каких-либо «но».

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

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

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

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

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

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

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


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

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

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

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

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

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


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

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

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

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


Двунаправленная связь через Bluetooth. Передача голоса.

Для передачи голоса в Bluetooth используется Synchronous Connection Oriented (SCO) — синхронная передача с предварительным согласованием соединения. Режим позволяет передавать звук и голос строго по порядку, с симметричной скоростью отправки и приёма, без ожидания подтверждения передачи и переотправки пакетов. Это понижает общую задержку передачи аудио через радиоканал, но накладывает серьёзные ограничения на количество передаваемых данных за единицу времени, и отрицательно сказывается на качестве.
Когда используется этот режим, и голос, и аудио передаются с одинаковым качеством.
Передача самих данных стандаризирована профилем HSP, также описывающим дополнительные функции, вроде работы кнопок регулировки громкости, поднятия трубки и отбоя.
К сожалению, по состоянию на 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».

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

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

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

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

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


Bluetooth 5, Classic и Low Energy

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

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

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

Список изменений между Bluetooth 4.2 и Bluetooth 5:
9 CHANGES FROM v4.2 TO 5.0

9.1 NEW FEATURES

Several new features are introduced in the Bluetooth Core Specification 5.0 Release. 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.1.1 Features Added in CSA5 — Integrated in v5.0
• Higher Output Power
Источник: www.bluetooth.org/docman/handlers/DownloadDoc.ashx?doc_id=421043 (страница 291)

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

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

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

Задержка передачи аудио

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

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

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

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

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


Проблемы устройств, сертификации и логотипов Bluetooth

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

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

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

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






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

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



Заключение

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

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

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

Больше информации можно найти на сайтах SoundGuys и SoundExpert.

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

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


  1. Anselm_nn
    09.06.2019 18:12

    Картинка про стандарты отражает эту ситуацию отлично, но вот если к практике:
    1. купил наушники (Marshall Major 3 BT), заявлена поддержка aptX (не знаю, HD или нет)
    2. есть телефон на 8 android (в настройках для разработчиков на выбор sbc,aac,aptx,aptxhd,ldac, можно тыкать куда угодно, возвращается на aptx)
    3. есть планшет на 7 android, там нет aptx, но наушники работают и с ним. то есть в sbc они тоже умеют.
    4. наконец есть пк, linux mint (на базе ubuntu 16.04). с ним тоже работает. насколько понимаю по sbc.

    из всего этого вопрос, кто же решает в каком режиме работать, разве наушники? они не просто анонсируют сервисы? вроде бы решать должен сервер (в данном случае телефон/планшет/пк)

    из этого логично вытекает вопрос, если каким-то образом мне удастся на пк заменить библиотеки bluez на модифицированные с aptx, выбор будет за кем, за пк?


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

      из всего этого вопрос, кто же решает в каком режиме работать, разве наушники? они не просто анонсируют сервисы? вроде бы решать должен сервер (в данном случае телефон/планшет/пк)
      Зависит от того, кто к кому подключается, и от действий BT-стека в разных ситуациях.
      Кодек выбирает то устройство, которое подключается. Подключаться может как компьютер/смартфон к наушникам, так и наушники к смартфону. Когда смартфон подключается к наушникам, то происходит это так:

      image

      В Android, когда наушники подключаются к смартфону, для того, чтобы использовать свой кодек, в зависимости от приоритета, а не полагаться на выбор кодека и приоритеты наушников, стек делает следующее:

      image

      из этого логично вытекает вопрос, если каким-то образом мне удастся на пк заменить библиотеки bluez на модифицированные с aptx, выбор будет за кем, за пк?
      Чтобы полноценно включить поддержку aptX в Linux, нужна и последняя версия BlueZ (из git master), и PulseAudio с патчами aptX. В этом случае, у вас будет в интерфейсе управления PulseAudio (pavucontrol и аналоги) переключалка кодеков, и можно переключить так, что анонсироваться наушникам, если они захотят подключиться к компьютеру, будет только какой-то конкретный, а не все поддерживаемые.


    1. ScavS
      09.06.2019 18:30

      для aptx на компьютере тоже нужна поддержка, это часть интеловских адаптеров, дешевые китайские свистки на CSR 8510, да и вообще все CSR должны, ну и под win драйвера есть csr harmony, под линукс не знаю


      1. ValdikSS Автор
        09.06.2019 18:33
        +1

        Кодекам поддержка со стороны железа не нужна. В стеках Intel и CSR Harmony ограничение чисто маркетинговое. В Windows 10 появилась глобальная поддержка aptX в стандартном стеке Microsoft, и aptX работает на любом адаптере, даже на Cellink BTA-6030 2005 года выпуска, с Bluetooth 2.1+EDR. В Linux, аналогично, можно использовать любой кодек на любом адаптере.


        1. SuAlUr
          10.06.2019 11:34

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

          Потенциально проблемное — отчасти можно согласиться, но низкокачественное — нет. Из факта отсутствия сертификации уровень качества не вытекает логически.


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

            Это моё субъективное мнение, но пока что мне попадались несертифицированные устройства только невысокого качества.


  1. Andrusha
    09.06.2019 21:19
    +1

    По моим наблюдениям, все наушники с дополнительными кодеками поддерживают функцию абсолютной регулировки громкости, видимо, это одно из требований для сертификации кодеков.
    У меня приёмник Fiio BTR3, и в нём регулировка громкости кнопками не влияет на уровень на смартфоне. Впрочем, формально это и не наушники :)


    1. f15
      09.06.2019 21:40

      Причем они это рекламируют как преимущество. Я бы предпочел как раз «абсолютную» регулировку, чтобы лишний раз не нажимать микрокнопки на приемнике.


      1. stryaponoff
        10.06.2019 12:25

        У меня телефон на Android 8 умел в абсолютную регулировку, а после обновления (официального) до Android 9 эту возможность потерял. В настройках для разработчиков есть переключатель, который за это отвечает, но фактически на моём телефоне он ничего не делает. Так вот, к чему я это. Техподдержка производителя телефона мне начала рассказывать, что это у них не баг, а фича такая и «это же так удобно: можно выставить громкость на телефоне, а потом подстраивать на наушниках», так что это позиция не одних FiiO.


        1. ValdikSS Автор
          10.06.2019 13:06
          +1

          1. stryaponoff
            10.06.2019 13:11

            Спасибо за ссылку. Не думал, что проблема в самом Android


          1. nidalee
            11.06.2019 15:08

            У меня на Asus работает, исправили позже, или это уже самодеятельность производителя телефона?


      1. Evengard
        10.06.2019 14:45

        А я её наоборот отключил. Выставил на наушниках максимум, и подстраиваю громкость с телефона. Мой опыт был таким, что «абсолютный уровень» слишком тормозил, был не слишком точным да ещё и наушники от него пищат при изменении. Оно мне надо?..


        1. DatUser
          10.06.2019 16:40
          +1

          С абсолютным уровнем ещё бесил минимальный шаг регулировки в 1/10 уровня громкости в андроиде. Иногда реально при разговоре особо громогласные люди при хорошей связи на нормальном аппарате и на минимальном уровне в это первое деление уши выдавливали, и приходилось переключаться из наушников на телефон.
          Я к чему, любая фича всегда будет кому-то нравиться, а кому-то — нет. Решение здесь одно: фича должна быть параметризована, использовать её или нет — решение каждого пользователя.


        1. nidalee
          11.06.2019 15:09

          У меня при превышении определенного уровня громкости на телефоне включается компрессор. Приходится делать тише на телефоне и громче в наушниках.
          Можно и рут, конечно, но пока лень.


  1. f15
    09.06.2019 21:37

    Спасибо, очень познавательная и обстоятельная статья. Я уже некоторое время экспериментирую с «аудиофильскими» ЦАП с Bluetooth-приемником. Какое-то время пользовался сумрачным китайским изделием под названием Shanling H3. Оно работало, но строго в пределах 30см от телефона, желательно чтобы телефон и ЦАП были в карманах с одной стороны. Сделал вывод, что комфорт важнее теоретического прироста качества: преимущества APTx трудно оценивать, когда музыка заикается. Тем не менее, пользовался им активно, потому что удобно, и есть как субъективный прирост качества звука (приятнее), так и объективный (громче).

    Недавно купил Fiio BTR3. Это удобная маленькая штука, которая имеет несколько фишек, помогающих разобраться в салате из кодеков. Во-первых, в зависимости от используемого кодека меняется цвет индикатора на устройстве. Во-вторых, в настройках (через приложение Fiio Music) можно ограничить количество доступных кодеков. Это оказалось полезно. Например, в Samsung S9+ можно задать тип Bluetooth-кодека в Developer Options. В планшете Sony Z4 Tablet передача по LDAC (если верить индикатору на устройстве) начинает работать, только если в настройках BTR3 убрать все остальные кодеки. Иначе — только SBC.

    Благодаря вам уберу в настройках S9+ передачу в формате 24/96. Сделал вывод, что эта отрасль народного хозяйства еще не до конца допилена, так, чтобы «просто работало». Всегда есть возможность, что что-то пойдет не так. Устройства, которые просто работают (наушники Bose, например), видимо, могут это делать за счет выбора менее качественных параметров сжатия аудио. В целом не суть важно, если разницы не слышно. В принципе, BTR3 с моим самсунгом в режиме LDAC работает вполне стабильно.

    P.S. Fiio BTR3 вроде бы поддерживает HWA, но только через фирменное приложение. По факту, включение этой опции приводит к ужасным заиканиям — секунда музыки на две секунды паузы.


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

      P.S. Fiio BTR3 вроде бы поддерживает HWA, но только через фирменное приложение. По факту, включение этой опции приводит к ужасным заиканиям — секунда музыки на две секунды паузы.
      Вы подключаете Fiio BTR3 к телефону по Bluetooth, и можете передавать на него аудио в другом кодеке, просто переключив настройку в программе? Это интересно, нужно посмотреть, как это реализовано.


      1. f15
        10.06.2019 02:41

        Я не уверен, что там на самом деле что-то по-другому передается. Но да, в приложении Fiio Music есть переключалка HWA, которая вызывает преимущественно жуткие тормоза.


      1. Andrusha
        10.06.2019 15:26

        Если нужно, могу попробовать снять дамп по инструкции из статьи.


        1. KorDen32
          11.06.2019 00:32

          У вас тоже BTR3? Насколько (не)адекватно HWA LHDC работает у вас?


          1. Andrusha
            11.06.2019 14:26

            При активации может упасть или пропасть звук, так вроде из Fiio Music играет. На FLAC я особой разницы с LDAC не заметил, впрочем, у меня под рукой нашёлся только альбом Burzum, который и в mp3 128 kbps, я думаю, аналогично звучать будет.


    1. KorDen32
      10.06.2019 11:25

      Видимо зависит от телефона. У меня HWA начинает работать не с первого раза (вначале просто — играет 2 секунды и всё, стоп), и если начал работать (путем многократного вкл-выкл настройки и переключения треков) — то работает нормально, но до первой паузы воспроизведения или ручного переключения треков.


  1. entze
    09.06.2019 21:57

    Забавно, что aptX поддерживается macOS, но поддержку нужно включать эппловой утилитой. Интересно, считают ли при этом лицензии?

    AirPods работают с Android по AAC, но зафиксировать AAC-only не получается. Переключатся на SBC. Также есть приложенька под Android умеющая с шагом в 5% показывать заряд AirPods.


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

      Забавно, что aptX поддерживается macOS, но поддержку нужно включать эппловой утилитой. Интересно, считают ли при этом лицензии?
      Уверен, лицензия уже оплачена, раз в составе macOS есть aptX-энкодер.

      AirPods работают с Android по AAC, но зафиксировать AAC-only не получается. Переключатся на SBC.
      Как вы определяете, что они переключаются на SBC?


    1. DarkFatal1ty
      09.06.2019 23:46

      На P20 Pro из коробки PowerBeats 3 тоже выпадали в SBC. А сейчас, на последней прошивке, работают уже в AAC без проблем.


    1. RifleR
      10.06.2019 18:42

      Поддержку на macOS включать не обязательно. С большинством наушников не SBC кодек (aptX или AAC) будет работать "из коробки". Но некоторым наушникам необходимо форсирование (мне такие попадались пока раз — Huawei Freebuds), и тогда уже можно идти в утилиту и включать форсированный выбор кодека.


  1. Lebets_VI
    09.06.2019 21:59

    Спасибо огромое за эту и предыдущую статью!
    У меня, напимер, не хватало времени разобраться «со всем этим делом», а Вы мне просто помогли :)

    Хочу внести некоторую корректировку на Ваше предложение: «Наушники могут самостоятельно устанавливать соединение с телефоном» — не могут.
    В классическом блютусе есть понятия «master» и «slave», а также процедуры «inquiring» и «paging». Так вот, наушники (а также, колонки, и т.д.) — это «slave», а slave не может сам устанавливать соединение.
    Процедура соединения пиров четко отпределена в спецификации: сначала «inquiring» — если пиры совсем не знают друг о друге, а потом «paging» — тут обмен другими пакетами перед соединением («connecting»).
    Почему я обращаю на это внимание: скорее всего, описанные Вами выше процедуры о выборе кодека зависят как раз от того что происходит, «inquiring» или «paging».
    А за обе статьи еще раз, огромное спасибо, я просто представляю работу, которую вы провели.



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

      Проверил — наушники иногда могут выступать в роли master, и действительно сами устанавливают соединение с телефоном. Далеко не все наушники это делают, но некоторые — делают.
      habrastorage.org/webt/dg/5j/2r/dg5j2rh7h1nrk1dn5ole37ugmeu.png

      Я что-то не так понял? Не на тот пакет смотрю?

      Вообще, я имел в виду не физическое подключение, а логическое, на уровне открытия AVDTP. Наушники сами начинают опрашивать source'ы и sink'ы телефона, затем отправляют GetCapabilities телефону, а далее — SetConfiguration.
      habrastorage.org/webt/tf/zw/b0/tfzwb0kncjcejsci5fjep7bc5sk.png


      1. Lebets_VI
        09.06.2019 23:46

        Вы правы.
        Согласно профилю GAVDP и протоколу AVDTP роли между пирами в A2DP не оределены к тому же, упрощенно говоря, мастером является именно инициатор соединения.
        Это особенность ауди-видео профилей.


      1. POPSuL
        10.06.2019 11:58

        А не могли бы описать механизм «автоматического» подключения наушников с NFC?
        Даже без предварительного сопряжения я прикладываю свои Sony WI-C400 к телефону, они включаются, и каким то магическим образом подключаются.


        1. ValdikSS Автор
          10.06.2019 13:54

          Для NFC-сопряжения используется протокол Secure Simple Pairing с out-of-band-коммуникацией через NFC. Внутри наушников может находиться либо NFC-чип, либо пассивная NFC-метка. В обоих случаях через NFC передается MAC-адрес наушников, видимое имя, значения Hash C и Randomizer R, необходимые для сопряжения, и другие данные. Телефон, как только считывает эти данные, сразу пытается подключиться по MAC-адресу устройства и установить сопряжение.

          Включаются ваши наушники потому, что в них есть NFC-чип (а не пассивная метка), и как только на неё приходит питание, чип наушников просыпается и включает режим сопряжения.

          Подробнее описано здесь: members.nfc-forum.org//apps/group_public/download.php/18688/NFCForum-AD-BTSSP_1_1.pdf


          1. POPSuL
            11.06.2019 00:20

            Спасибо!


      1. DrunkBear
        10.06.2019 12:46

        Кстати, когда уши спариваются / подключаются c помощью nfc — они становятся master?


        1. nidalee
          11.06.2019 15:12

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


  1. Amistad
    09.06.2019 22:56

    Я не понял как устроен блютусный хэндс-фри.
    Гарнитура в ухе оцифровывает голос с микрофона, затем данные передаются на телефон, там перекодируются каким-то GSM-кодеком и после идет передача в сотовую сеть?

    Или гарнитура сразу сжимает голос GSM-кодеком и телефон транзитом передает эти данные в сотовую сеть?


    1. Barabek
      09.06.2019 23:00
      +1

      первый вариант


  1. Barabek
    09.06.2019 23:02

    А есть ли техническая возможность превратить мобильный телефон в bluetooth-ресивер по A2DP?


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

      Да. Современный Bluetooth-стек Android может работать sink'ом (т.е. воспроизводящим устройством), но для этого его нужно перекомпилировать со специальным флагом.


    1. Lebets_VI
      09.06.2019 23:50

      Я так делал еще в бытность WinMobile :) превращал коммуникатор в приемник звука. В WinMob был очень дружелюбный SDK, к тому же, это позволял делать стек от Broadcom из коробки.


    1. Rast1234
      10.06.2019 00:05

      Пытался разобраться в этом вопросе. Поддержка роли есть в андроиде с 4.какой-то версии, но надо пересобирать. Ядро или только приложение с настройками я так и не понял, потому что все равно в итоге со стороны софта было бы не понятно, как это заработает...


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

        Пересобирать нужно только саму прошивку (вернее, bluetooth-стек), не ядро. Сам не пробовал, но, скорее всего, никакой дополнительной поддержки со стороны софта не требуется: телефон просто сам начнет воспроизводить звук, без каких-либо программ и настроек.


  1. Astroscope
    09.06.2019 23:04

    Отличная статья, спасибо!

    Из-за массового выпуска смартфонов без аудиоразъема 3.5 мм, беспроводные Bluetooth-наушники для многих стали основным способом прослушивания музыки и общения в режиме гарнитуры.

    Не представляю, кто в здравом уме купит телефон без разъема для наушников/гарнитуры, если предполагает пользоваться наушниками и/или гарнитурой.


    1. Envek
      09.06.2019 23:10

      Я купил. Просто не обратил внимания (не подумал, что такое вообще возможно). В комплекте был переходник с USB-C на 3.5, но в итоге я купил себе беспроводную гарнитуру и премного благодарен судьбе за это — с bluetooth-гарнитурой гораздо лучше жить. Но теперь надо за ещё одной батарейкой следить, чтобы не села в самый неподходящий момент.


    1. Andrusha
      10.06.2019 03:08

      Не представляю, кто в здравом уме купит телефон без разъема для наушников/гарнитуры, если предполагает пользоваться наушниками и/или гарнитурой.
      Вообще, Bluetooth-гарнитуры существовали задолго до всей этой чехарды с аудиокодеками, когда подавляющее большинство телефонов и музыку-то проигрывать не умело. Вполне себе была неплохая альтернатива торчащему из телефона проводу с традиционно большим проприетарным разъёмом.
      Что же касается современного положения дел, то я не вижу принципиальной разницы в наличии/отсутствии 3,5 мм разъёма — при нынешнем-то ассортименте беспроводных наушников, приёмников и даже проводных DAC'ов — если вдруг комплектный переходник чем-то не устроил.


      1. Astroscope
        10.06.2019 11:05

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

        Трудно не согласиться с процитированным. И для пешехода, и автомобильная громкая связь — все это часто удобно и на самом деле было реализовано где-то лет двадцать, наверное, назад (The specifications were formalized by the Bluetooth Special Interest Group (SIG) and formally announced on the 20 of May 1998.)

        Что же касается современного положения дел, то я не вижу принципиальной разницы в наличии/отсутствии 3,5 мм разъёма — при нынешнем-то ассортименте беспроводных наушников, приёмников и даже проводных DAC'ов — если вдруг комплектный переходник чем-то не устроил.

        Я отношусь к тем, кто не собирается покупать новые наушники ради телефона. Телефон ради уже имеющихся наушников — вполне. Срок службы наушников очень большой, это десятилетия, тем боле что изнашивающиеся элементы (амбушюры, отделка оголовья, провода) можно заменить новыми оригинальными или подобрать альтернативы (для некоторых это не необходимый ремонт, а даже наоборот — развлечение и тюнинг). Срок службы телефона — лет пять, наверное, максимум, после чего из-за сговора с программистами морального старения оказывается, что в очередной раз разжиревший софт не очень-то комфортно на нем крутится и то, что аппарат прекрасно делал, будучи новым, сейчас получается довольно печально, а старый софт не работает из-за отсутствия его поддержки со стороны сервера (привет мессенджерам типа Skype). А в телефонах с трудной заменой аккумулятора (99,9% условно-современных аппаратов) рано или поздно настает такой момент, когда остаточная цена телефона приближается к цене нового аккумулятора с учетом стоимости его замены, и это может случиться заметно раньше тех абстрактных пяти лет, потому что если аккумулятор пришел в негодность, то без его замены ценность телефона вообще близка к нулю.

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


    1. POPSuL
      10.06.2019 12:03

      Я несколько лет назад купил специально Bluetooth наушники/гарнитуру, т.к. я посчитал что мне так будет комфортнее, не будут болтаться провода (в тот момент активно катался на велосипеде), не будут «дубеть» на морозе… В итоге, для себя понял что это очень удобно даже в повседневной жизни, можно например по квартире ходить и разговаривать по телефону, который просто где-то лежит.
      P/S/ с тех пор уже сменилось пара телефонов, последние два с Jack 3.5mm, но для прослушивания музыки он мне ни разу не пригождался.


      1. cyberly
        10.06.2019 13:24

        У меня та же история. Правда, jack пригождался-таки, для того чтобы воткнуть компьютерные колонки, когда делал ремонт. И есть у меня разговорная гарнитура для рабочих разговоров с jack'ом (микрофон на штанге с шумодавом и все такое, живет она на рабочем компьютере, но пару раз возможность воткнуть ее в телефон была кстати). Ну, еще FM-радио требует, чтобы наушники были проводными (впрочем, это тоже пригождалось считаные разы). Ну и как бы, проводные наушники/гарнитуры тупо дешевле беспроводных.

        В целом, я за «пусть лучше будет».


  1. reactoranime
    09.06.2019 23:06
    +1

    Обьясните, почему безпроводные наушники переключаются в моно при разговоре, вроде говорят технология aptX должна быть, но ведь она из 1988… например MDR-XB650BT, Sony лютое Г при разговоре, хотя наушники не за 5 баксов…


    1. Envek
      09.06.2019 23:13

      Смотрите в статье раздел «Двунаправленная связь через Bluetooth. Передача голоса.»:


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


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

        Упс, немного переписал эту часть: SCO всё же использует разделение по времени и выделяет слоты, но передает данные в симметричном канале, и строго по порядку.


  1. Rast1234
    10.06.2019 00:11

    Огромное спасибо за статью. Купил как-то дешевые jbl на распродаже. Порадовался отсутствию провода, огорчился качеству звука при работе в режиме гарнитуры. Если к винде цеплять то вообще трэш, оно видится как несколько устройств, звук теряется при переключениях музыка/звонок, обратно переключается не всегда. Думал китайцы накосячили, облизывался на беспроводы подороже, Sony какие-нибудь. А оно вон как, за десяток-другой тысяч деревянных можно купить себе то же самое легаси из 90-х… и другого просто нет. Одно разочарование с этим bluetooth, столько нагорожено в нем, разбираться и апгрейдить никто уже никогда не станет.


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

      На Bluetooth Classic забили. Ждём, пока добавят профиль передачи аудио в Bluetooth LE, может, сразу правильно и качественно сделают.


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

      Кстати, трюк: если использовать наушники со смартфоном, то можно в настройках Bluetooth-устройства отключить профиль гарнитуры («Phone calls»), тогда при телефонных звонках или в VoIP-программах будет использоваться микрофон смартфона, но динамики наушников, и будет высокое качество звука в наушниках.


      1. Rast1234
        10.06.2019 01:26

        Интересный лайфхак, вишенка на торте разочарования текущим состоянием дел :)


      1. BigD
        10.06.2019 08:23

        А почему?


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

          Если отключить Phone Calls, наушники не будут переключаться в стандарт HSP, а будут оставаться в A2DP.


          1. POPSuL
            10.06.2019 12:07

            Но тогда же появятся «те самые задержки» в 100-200ms, разве нет?
            Я когда пытался попробовать использовать наушники с windows для игр (ради эксперимента), в A2DP звук был качественный, но как раз с адскими задержками (по моим ощущениям там все 300ms было), а в HSP задержек не было, но играть с таким звуком было просто невозможно.


            1. Lobey
              10.06.2019 14:50

              При разговоре через сотовую сеть, задержки самой сотовой сети намного больше разницы между задержками HSP и A2DP. Да и для передачи голоса задержки не так важны, как для игр. Разницу вы не заметите.


              1. POPSuL
                11.06.2019 00:22
                -1

                Ну тут я думаю будет заметно, т.к. все задержки будут складываться, и в итоге получим 0.5-1s задержки, что будет уже вызывать дискомфорт при общении.


                1. nidalee
                  11.06.2019 15:16

                  Там обычно совсем не такие дикие задержки:

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

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


                  1. POPSuL
                    12.06.2019 05:42

                    Ну так я же к итогу приплюсовал задержку самой сотовой сети. В зависимости от региона мобильные провайдеры работают по разному… Раньше и трафик могли гонять через другой регион при звонках в рамках одного города.
                    Итого, при звонке с Сахалина в европейскую часть России будет около 0.5s, ~200ms на SBC, ~150ms будут сетевые задержки, ну и остальное уже кодеки, GSM, и всякое такое.


          1. fogone
            10.06.2019 15:19

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


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

              Можно либо отключить профиль HSP, чтобы использовался A2DP, и использовать внешний микрофон (смартфона или компьютера), либо купить наушники с поддержкой FastStream и Bluetooth-трансмиттер-аудиокарту к ним, тоже с поддержкой FastStream, либо наушники с FastStream + использовать Linux с патчем на поддержку FastStream.


              1. fogone
                10.06.2019 19:46

                В итоге приходится использовать a2dp+мирофон ноута, потому что качество звука hsp слишком низкое. Патч для линукса — это интересное решение, но так с ходу не могу найти в гугле куда смотреть, посоветуете? Я правильно понял, что только FastStream позволяет решить этот задачу?


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

                  Патчсет для pulseaudio: lists.freedesktop.org/archives/pulseaudio-discuss/2019-June/031168.html (это сообщение и все следующие).

                  Я правильно понял, что только FastStream позволяет решить этот задачу?
                  Похоже, что так. Ваши наушники должны поддерживать FastStream, чтобы это заработало.


      1. Kelsink
        10.06.2019 10:58

        Аналогично и с ПК. Полгода назад взял QC35 и был просто ШОКИРОВАН ужасным качеством звука в режиме гарнитуры. Он не просто ужасен. Это просто неприемлимо.
        Наушники, собственно, для работы используются, поэтому звонков много. В итоге пришлось прикупить внешний микрофон для стационарника и пользоваться встроенным для ноутбука.
        Спасибо за статью. Причину я тогда нашел, но детально почитать — приятно.


  1. Gordon01
    10.06.2019 01:15

    Пришел, чтобы в очередной раз написать, что Sony WH-1000XM3 — лучшие полноразмерные беспроводные наушники, а LDAC — лучший кодек для Bluetooth audio.


    1. ppl2scripts
      10.06.2019 05:15

      Звучат хорошо, а управление ужасное и неудобное.


    1. nidalee
      11.06.2019 15:18
      +1

      Хотел такие, но опасно большое количество отзывов «на морозе не работает и глючит управление». Не рискнул.


      1. Gordon01
        12.06.2019 11:40

        Может в Москве нет таких морозов, но у меня все ок)


  1. Wesha
    10.06.2019 04:32

    Например, наушники фирмы Bluedio не сертифицированы Bluetooth

    Уже знаем, что этоОНО.


  1. JBIckx
    10.06.2019 07:15

    Хоспаде, и весь этот зоопарк нам предлагают в замену четырём проводам и нехитрому разъёму?!
    Хотя не спорю, первое, что выходит из строя на моих телефонах — разъём наушников. Хотя нет, сначала перетирается кабель на наушниках в заделке в штекер.


    1. Mirn
      12.06.2019 05:55

      а если копнуть глубже то становиться просто страшно:
      1. в исходниках популярных блютуз аудио библиотек на DSP и MCU например от техаса не используется арифметика с насыщением хотя все их DSP и МК это поддерживают и использовать её в обработке звука само собой разумеющееся практика, а в некоторых кодеках попросту обязательное дело.
      2. Две из трёх библиотек производителей BL MCU, что я имел дело, написаны так, что это даже не proof of concept а какой то ардуино скетч для конкретно одного случая. В оставшейся единственной библиотеке только в лицензионном соглашении мельком упоминается что это демонстрационный код и желательно его переписать с нуля поняв как работает железо. Это крупнейшие производители и именно их либы только и встречаются в проектах на гитхабе, они же хвалятся что «имеют» более половины рынка BL решений (да да каждый по половине). И наверное, судя по качеству BL наушников, их используют все «как есть» с мелкими багфиксами.

      А потом удивляешся почему аудио либо икает, либо внезапно задержка возврастает более секунды (фифо буфера перехлёстываются), либо BL наушники попросту глючат, или невозможно использовать наушники на ПК блютуз «свистком» в сочетании с мышью например — икают или вообще не заводятся, особенно Аппловские.


  1. FFiX
    10.06.2019 07:27

    Жаль, что при всем многообразии кодеков тут почти нет открытых стандартов. Хотя кажется, что тот же Opus со своими низкими задержками и достаточно высоким качеством должен идеально подходить. Или нет?


    1. erty
      10.06.2019 11:49

      Opus очень тяжело декодировать. Только недавно стали появляться декодеры в SoC мобильников. А ведь декодер должен быть встроен в наушники.


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

      Корпорации по какой-то причине опасаются использовать аудиокодеки, за которыми стоят не корпорации, а сообщества. Предположительно из-за того, что если создатель аудиокодека — корпорация, то она гарантирует юридическую чистоту алгоритмов и, в случае чего, в суд будут подавать на неё в первую очередь, а не на пользователей (лицензиатов). В случае Opus, Vorbis и других кодеков, только предполагается, что они не нарушают никакие патенты (на сайте Xiph так и написано), но нет гарантии, что это действительно так.
      Это свойственно не только аудио, но и видеокодекам.


      1. nidalee
        11.06.2019 15:19

        С FFV1 та же история — читал кучу статей по нему, все исследователи говорят «ну в библиотеках используют, конечно, но правительство США — нет, так что нафиг!»
        Очень странный подход…


  1. BigD
    10.06.2019 08:21

    Почему с обычной Bluetooth гарнитурой звук при звонках очень «глухой», а с AirPods — нормальный? Кодек другой?


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

      Возможно, с обычной гарнитурой используется CVSD, а с AirPods — mSBC.


  1. Sabubu
    10.06.2019 08:39

    У вас в первой аудиозаписи (ZZ Top) на записи какие-то искажения (довольно слабые) слышны, как будто это запись с приемника и кто-то руку к антенне подносит, или как будто шум с пластинки. Искажения есть в обоих версиях, и в сжатой кодеком, и в оригинале.


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

      Это рип с пластинки, наверное.


      1. Sabubu
        10.06.2019 13:05

        Я послушал трек на Ютубе (я в курсе, что звук там всегда погано пережат) — там больше низких частот и меньше верхних, так что похоже что это может быть рип без коррекции, которая применяется в проигрывателях. Я просто хотел сказать, что не стоит сравнивать качество работы кодеков на изначально не очень качественной записи.


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


        А в общем, ощущение, что с беспроводными наушниками пока все плохо. Нужен либо более хороший стандарт передачи данных, без потери (WiFI?), либо просто закачивать в наушники флак секунд на 5-10 вперед (на случай разрывов).


  1. Lehas
    10.06.2019 09:21

    sbc vs aptx hd?
    нет разницы?
    вам медведь на ухо наступил или тест был на китайских bludio?!


    1. nidalee
      11.06.2019 15:20

      Разницы может не быть, если SBC правильно настроен. Перечитайте статью :)


  1. ilyaster
    10.06.2019 09:41

    Есть у кого опыт использования в машине bluetiooth передатчика на aux вход? Чтобы звук был хороший и работал во время зарядки.


  1. cooladmin
    10.06.2019 10:15

    Подскажите, а какие стандарты, кодеки или способы передачи используются в БП игровых наушниках, например в Loghitech G933? Это ведь не BT?


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

      Похоже, что это — радиогарнитура. Возможно, просто несжатый аудиопоток передаётся.


  1. KorDen32
    10.06.2019 10:36

    HWA LHDC — слишком новый, и поддерживается всего тремя(?) устройствами.

    Из приемных устройств сейчас вроде бы есть только FiiO BTR3.
    Однако в качестве передающего можно использовать практически любой смартфон с их приложением FiiO Music. Оно дико глючное, HWA LHDC запускается с пятого пинка с подвывертом, но вроде даже работает. Надо бы подампить эфир…


  1. Nessi
    10.06.2019 12:16

    На практике, даже 990 кбит/с-аудиопоток (LDAC 990 kbit/s) передаётся с трудом.

    Таким образом, стандарт Bluetooth за 25 лет развития до сих пор не научился устойчиво передавать данные на скорости 1 Мбит/с (которая, кажется, была заявлена ещё в 1й его версии). По-моему, это несколько ненормально.


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

      Заявляют канальные скорости, а не скорости передачи данных.
      Bluetooth, зато, хорошо работает в условиях загаженного эфира 2.4 ГГц. Там, где почти не работает Wi-Fi ни на одном канале, постоянно теряются пакеты и не открываются страницы, Bluetooth может вполне себе играть музыку без прерываний. Его даже глушилкой крайне тяжело заглушить.


      1. Vaitek
        12.06.2019 23:33

        Лет 10 пользуюсь бт наушниками для прослушивания музыки. На всех замечал следующее: очень часто музыка начинает заикаться, когда стоишь на переходе у светофора. Вот что в светофоре может глушить бт? :-)


        1. Mirn
          13.06.2019 03:09

          Аналогично замечал что как и в России так и в Европе с Японией бт наушники икают на светофорах.


          1. ValdikSS Автор
            13.06.2019 09:34

            Vaitek, Mirn, чаще всего виноваты не светофоры, а открытые пространства перед ними. Пока вы переходите дорогу, сигналу становится не обо что отражаться: нет ни домов, ни инфраструктурных объектов.


  1. Jogker
    10.06.2019 12:16

    А что за проблема «пустить» эфирную трансляцию FM-радио на Android-смартфоне в BT-гарнитуру?
    Возможно ли возрождение проекта «Spirit Real M Radio»?


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

      Предполагаю, что по умолчанию FM-чип может выводить звук только в аудиовыход, а для перенаправления аудиопотока обратно в ОС нужно делать дополнительные действия, что тяжело в условии userspace-программы.
      Автор Spirit Real FM Radio умер, а кроме него FM-радио мало кому было интересно.


      1. Jogker
        11.06.2019 08:51

        Получается FM-чип локализован, а MP3 обработка c SD-card на одном кристалле с ВТ?
        P.S. Вот, с ходу — 2006 год!!! newatlas.com/go/5201

        Всё больше на какой-то странный заговор похоже ))


  1. esata
    10.06.2019 12:48

    github.com/EHfive/pulseaudio-modules-bt — PulseAudio модуль для поддержки AptX, AptX HD и LDAC

    Может кому-то пригодится


  1. 727digital
    10.06.2019 13:12

    Прочитал статью, огромное спасибо.
    Какой можете посоветовать Bluetooth аудио ресивер (подключение внешних устройств через блютуз) со следующими характеристиками:
    1. кол-во сопрягаемых устройств 5шт (TV — LG, Phone — Xiaomi, Apple, Table — Huawei, PC — Linux Centos, PC Windows 10)
    2. кол-во одновременно подключенных устройств 2шт. (передавать голос по очереди будут)
    3. разъемы 3.5 или RCA для передачи сигнала к колонкам.
    4. Покрытие 10м включая стены.
    5. Постоянная работа устройства даже при отключенных сопряженных устройств

    Столкнулся с тем, что очень много китайских моделей обладают следующими недостатками:
    1. Уходит в спячку при отсутствии активных подключений. приходится постоянно нажимать на кнопку. Решал костылем в виде одного постоянно подключенного потребителя
    2. Не дружит со всеми устройствами. Текущий никак не хочет работать с планшетом Huawei, и Linux машинами.
    3. От устройства к устройству очень сильно прыгает покрытие. кто-то работает только в прямой видимости, кто-то пробивает одну, две пеноблочные стены.


    1. snnrman
      10.06.2019 14:03

      Может не так понял, но я в машине использую TPLink HA100. Не засыпает никогда, работает со всеми моими устройствами (iPhone, Lenovo, Nokia etc), пробивает машину и бетонную стену. Точно работает с двумя устройствами одновременно.


      1. 727digital
        11.06.2019 11:41

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


        1. nidalee
          11.06.2019 15:22

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


  1. Pavel7
    10.06.2019 14:02

    Хотелось бы в очередной раз проклять Microsoft за вырезание hands-free профиля из стандартного BT стека, начиная с Windows 10.


  1. Serge12_17
    10.06.2019 15:19

    Здравствуйте!
    Наконец то нашел знающего человека.
    У меня наушники Sony MDR1abt. С топовыми телефонами Sony работает LDAC, но у меня ASUS Zenfone. Когда в инструментах разработчика выбираю LDAC он автоматически слетает на другой кодек.
    Подскажите, пожалуйста, как можно включить LDAC или настроить другой кодек приемлемого качества? У меня андроид 8.1.
    Можно ли настроить кодек в Windows 10, чтобы получить хорошее качество звука и слушать с ноутбука?


    1. ValdikSS Автор
      10.06.2019 16:10

      Вы пробовали задавать этот вопрос в техническую поддержку производителя?

      Можно ли настроить кодек в Windows 10, чтобы получить хорошее качество звука и слушать с ноутбука?
      Windows 10 поддерживает aptX, как вариант.


      1. Serge12_17
        10.06.2019 16:37

        Техническая поддержка ASUS говорит, что прошивка телефона не поддерживает LDAC.
        Как я понял Вы сделали патчи SBC HD, но они не для стандартного Андроида, правильно?
        Т.е. пока вариантов нет? Или есть какие идеи?

        Как посмотреть какой кодек в Windows работает? Можете посоветовать как их переключать там?


        1. ValdikSS Автор
          10.06.2019 21:14

          Патчи SBC HD можно применить и на стандартный Android (AOSP), но их применение требует перекомпиляции прошивки (или, как минимум, bluetooth-стека).

          Попробуйте записать дамп и загрузить его на btcodecs.valdikss.org.ru.

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


  1. Nikoepikhin
    10.06.2019 15:19

    Добрый день. Нужен ваш совет тк плохо разбираюсь в кодировании. Есть ли смысл увеличивать битрейт sbc с учетом прослушивания музыки на смартфоне в формате мп3 320 кб с? Или смысл есть только для файлов с изначально лучшим качеством?


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

      MP3 320 кбит/с — это отличное качество аудио. Повышать битрейт SBC имеет смысл, если считаете, что слышите уменьшение стереопары или малое количество высоких частот на стандартном битрейте.


  1. Chefranov
    10.06.2019 17:51

    Кстати, никто не знает почему AirPods на Windows отваливаются когда пытаешься использовать одновременно микрофон и динамиики? То есть не получается использовать наушники при звонках в Skype, Telegram и т.п.


  1. predatorsk
    10.06.2019 17:51

    Огромное спасибо за эти статьи по Bluetooth, очень полезно. Некоторое время для Андроид уже существует модуль Bluetooth stack Audio bitrate changer в репозитории magisk, который по описанию делает ну фактически то же самое, что и ваш. Не могли бы вы глянуть в чем отличия?
    https://github.com/gjf/gjf_bt


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

      Этот модуль патчит библиотеку bluetooth-стека для активации SBC Dual Channel и повышения битрейта. Модуль работает он только на определенных устройствах, и его работоспособность зависит от оптимизаций компилятора при сборке прошивки.
      Автор модуля — gjf


  1. BiosUefi
    10.06.2019 22:35

    ?, для чего время делится на 625-микросекундные интервалы, называемые слотами (slot). 


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


  1. ConstSe
    10.06.2019 23:56

    Немного оффтоп, но раз уж тут присутствуют знатоки, то спрошу. Дано:
    — адаптер Asus USB BT400
    — ухи Sony WH-CH500
    — Ubuntu 18.04
    Недавно стали отваливаться наушники в не совсем конкретных случаях. Если нет звуков минут 5, если нажал на паузу в видео в браузере, закончилось одно видео и началось другое. Может отвалиться, а может и не отвалиться. Причём не соединение с наушниками пропадает, а вывод звука переключается с BT на встроенное аудио. И после этого помогает только удалить сопряжение и подключить заново. Однако с месяц назад это всё работало отлично. Ни единого разрыва. И в винде работает по сей день. Что-то обновилось, видимо, а я не отследил.
    В какую сторону надо копать? Blutooth, Pulse, ALSA, ядро?


    1. RussianNeuroMancer
      13.06.2019 01:54

      wiki.archlinux.org/index.php/PulseAudio/Troubleshooting_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)#%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B_%D0%B2%D0%BE%D1%81%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B3%D0%B0%D1%80%D0%BD%D0%B8%D1%82%D1%83%D1%80%D1%8B_Bluetooth
      Для начала я бы попробовал это.