Аудиоподдержка слуховых аппаратов с использованием Bluetooth LE

Слуховые аппараты (HA) могут иметь улучшенную доступность на мобильных устройствах под управлением Android за счет использования ориентированных на соединение каналов L2CAP (CoC) через Bluetooth с низким энергопотреблением (BLE). CoC использует эластичный буфер из нескольких аудиопакетов для поддержания стабильного потока аудио даже в случае потери пакетов. Этот буфер обеспечивает качество звука для слуховых аппаратов за счет задержки.

Дизайн CoC ссылается на базовую спецификацию Bluetooth версии 5 (BT). Чтобы соответствовать основным спецификациям, все многобайтовые значения на этой странице должны читаться с прямым порядком байтов.

Терминология

  • Central — Android-устройство, которое сканирует рекламу через Bluetooth.
  • Периферийный - слуховой аппарат, который отправляет рекламные пакеты по Bluetooth.

Топология сети и системная архитектура

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


Рис. 1. Топология сопряжения слуховых аппаратов с мобильными устройствами Android с использованием CoC через BLE.

Когда центральный блок не передает аудиоданные на периферийное устройство и может поддерживать соединение BLE, центральный блок не должен отключаться от периферийного устройства. Поддержание соединения позволяет передавать данные на сервер GATT, расположенный на периферийном устройстве.

При сопряжении и подключении слуховых аппаратов центральный офис должен:

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

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

Системные Требования

Чтобы правильно реализовать CoC для удобства пользователей, системы Bluetooth в центральных и периферийных устройствах должны:

  • реализовать совместимый контроллер BT 4.2 или более поздней версии. LE Secure Connections настоятельно рекомендуется.
  • иметь центральную поддержку как минимум 2 одновременных каналов LE с параметрами, описанными в разделе Формат аудиопакета и синхронизация .
  • иметь периферийное устройство, поддерживающее как минимум 1 канал LE с параметрами, описанными в разделе « Формат аудиопакета и синхронизация» .
  • иметь управление потоком на основе кредита LE [BT Vol 3, Part A, Sec 10.1]. Устройства должны поддерживать размер MTU и MPS не менее 167 байтов на CoC и иметь возможность буферизовать до 8 пакетов.
  • иметь расширение длины данных LE [BT Vol 6, Part B, Sec 5.1.9] с полезной нагрузкой не менее 167 байтов.
  • обеспечить, чтобы центральное устройство поддерживало команду обновления соединения HCI LE и соответствовало ненулевым параметрам maximum_CE_Length и minimum_CE_Length .
  • пусть центральный сервер поддерживает пропускную способность для двух соединений LE CoC с двумя разными периферийными устройствами с интервалами соединения и размерами полезной нагрузки в формате аудиопакета и синхронизацией .
  • периферийное устройство должно установить параметры MaxRxOctets и MaxRxTime в кадрах LL_LENGTH_REQ или LL_LENGTH_RSP как наименьшие требуемые значения, необходимые для этих спецификаций. Это позволяет центральному серверу оптимизировать планировщик времени при расчете времени, необходимого для получения кадра.

Настоятельно рекомендуется, чтобы центральный и периферийный серверы поддерживали 2 МБ PHY, как указано в спецификации BT 5.0. Центральный должен поддерживать аудиоканалы со скоростью не менее 64 кбит/с как на физическом уровне 1M, так и на уровне 2M. PHY дальнего действия BLE не должен использоваться.

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

Услуги АША ГАТТ

Периферийное устройство должно реализовывать службу сервера GATT потоковой передачи аудио для слуховых аппаратов (ASHA), описанную ниже. Периферийное устройство должно объявить об этой услуге, когда находится в обычном режиме обнаружения, чтобы позволить центральному устройству распознать аудиоприемник. Для любых операций потоковой передачи аудио LE требуется шифрование. Потоковое аудио BLE состоит из следующих характеристик:

Характеристика Характеристики Описание
Только для чтения Читать См. ReadOnlyProperties .
Аудиоконтрольная точка Пишите и пишите без ответа Контрольная точка аудиопотока. См. AudioControlPoint .
АудиоСтатусПойнт Прочитать/уведомить Поле отчета о состоянии для точки управления звуком. Коды операций:
  • 0 - Статус ОК
  • -1 - Неизвестная команда
  • -2 - Недопустимые параметры
Объем Пишите без ответа Байт между -128 и 0, указывающий степень затухания, применяемого к потоковому аудиосигналу, в диапазоне от -48 дБ до 0 дБ. Значение -128 должно интерпретироваться как полное приглушение, т. е. самый низкий уровень громкости без приглушения равен -127, что эквивалентно затуханию -47,625 дБ. При значении 0 поток синусоидального тона «rail-to-rail» должен представлять входной эквивалент 100 дБ SPL на слуховом аппарате. Центральное устройство должно осуществлять потоковую передачу в номинальном полном масштабе и использовать эту переменную для установки желаемого уровня представления на периферийном устройстве.
LE_PSM_OUT Читать PSM для подключения аудиоканала. Выбирается из динамического диапазона [BT Vol 3, Part A, Sec 4.22]

UUID, присвоенные сервису и характеристикам:

UUID службы : {0xFDF0}

Характеристика UUID
Только для чтения {6333651e-c481-4a3e-9169-7c902aad37bb}
Аудиоконтрольная точка {f0d4de7e-4a88-476c-9d9f-1937b0996cc0}
АудиоСтатус {38663f1a-e711-4cac-b641-326b56404837}
Объем {00e4ca9e-ab14-41e4-8823-f9e70c7e91df}
LE_PSM_OUT {2d410339-82b6-42aa-b34e-e2e01df8cc1a}

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

Только для чтения

ReadOnlyProperties имеют следующие значения:

Байт Описание
0 Версия - должна быть 0x01
1 См. Возможности устройства .
2-9 См. HiSyncId .
10 См. Карту характеристик .
11-12 Задержка рендеринга. Это время в миллисекундах с момента, когда периферийное устройство получает звуковой кадр, до момента, когда периферийное устройство воспроизводит выходные данные. Эти байты можно использовать для задержки видео для синхронизации со звуком.
13-14 Зарезервировано для использования в будущем. Инициализировать нулями.
15-16 Поддерживаемые идентификаторы кодеков . Это битовая маска поддерживаемых идентификаторов кодеков. 1 в битовой позиции соответствует поддерживаемому кодеку. Например, 0x0002 указывает, что поддерживается G.722 на частоте 16 кГц. Все остальные биты должны быть установлены в 0.

Возможности устройства

Кусочек Описание
0 Сторона устройства (слева: 0, справа: 1).
1 Монофонический (0) / Бинауральный (1). Указывает, является ли устройство автономным и принимает монофонические данные, или оно является частью набора.
2-7 Зарезервировано (установлено на 0).

HiSyncID

Это поле должно быть уникальным для всех бинауральных устройств, но оно должно быть одинаковым для левого и правого набора.

Байт Описание
0-1 ID производителя. Это идентификаторы компании , присвоенные BTSIG.
2-7 Уникальный идентификатор, идентифицирующий слуховой аппарат. Этот идентификатор должен быть установлен одинаковым как на левом, так и на правом периферийном устройстве.

Карта характеристик

Кусочек Описание
0 Поддерживается потоковая передача звука LE CoC (Да/Нет).
1-7 Зарезервировано (установлено на 0).

Идентификаторы кодеков

Если бит установлен, то поддерживается именно этот кодек.

ID / номер бита Кодек и частота дискретизации Требуемый битрейт Время кадра Обязательно на центральном (C) или периферийном (P)
0 Сдержанный Сдержанный Сдержанный Сдержанный
1 G.722 @ 16 кГц 64 кбит/с Переменная С и П
2-15 зарезервированы.
0 также зарезервирован.

Аудиоконтрольная точка

Эту контрольную точку нельзя использовать, когда LE CoC закрыт. Описание процедуры см. в разделе Запуск и остановка аудиопотока .

Опкод Аргументы Описание
1 «Start»
  • uint8_t codec
  • uint8_t audiotype
  • int8_t volume
  • int8_t otherstate
Указывает периферийному устройству сбросить кодек и начать воспроизведение кадра 0. Поле кодека указывает идентификатор кодека, который следует использовать для этого воспроизведения. Например, поле кодека равно "1" для G.722 на частоте 16 кГц.

Битовое поле типа аудио указывает типы аудио, присутствующие в потоке:
  • 0 - неизвестно
  • 1 - Рингтон
  • 2 - Телефонный звонок
  • 3 - Медиа
Поле otherstate указывает, подключена ли другая сторона бинауральных устройств. Значение поля равно 1, когда подключено другое периферийное устройство, в противном случае значение равно 0.

Периферийное устройство не должно запрашивать обновления соединения, пока не будет получен код операции «Stop» .
2 «Stop» Никто Инструктирует периферийное устройство прекратить рендеринг звука. После этой остановки следует инициировать новую последовательность настройки звука, чтобы снова воспроизвести звук.
3 «Status»
  • uint8_t connected
Информирует подключенное периферийное устройство об обновлении состояния другого периферийного устройства. В связанном поле указывается тип обновления:
  • 0 - другое периферийное устройство отключено
  • 1 - Подключено другое периферийное устройство
  • 2 - Обновление параметра соединения LE произошло на любом соединении.

Реклама службы ASHA GATT

Сервисный UUID должен быть в рекламном пакете. Либо в объявлении, либо в кадре ответа сканирования периферийные устройства должны иметь служебные данные:

Байтовое смещение Имя Описание
0 Длина объявления >= 0x09
1 Тип объявления 0x16 (служебные данные — 16-битный UUID)
2-3 UUID сервиса 0xFDF0 (прямой порядок следования байтов)

Примечание. Это временный идентификатор.
4 Версия протокола 0x01
5 Возможности
  • 0 - левая (0) или правая (1) сторона
  • 1 - одинарное (0) или двойное (1) устройство.
  • 2-7 - зарезервировано. Эти биты должны быть равны нулю.
6-9 Усеченный HiSyncID Четыре младших байта HiSyncId . Эти байты должны быть самой случайной частью идентификатора.

Периферийные устройства должны иметь тип данных « Полное местное имя », указывающий название слухового аппарата. Это имя будет использоваться в пользовательском интерфейсе мобильного устройства, чтобы пользователь мог выбрать нужное устройство. Имя не должно указывать на левый или правый канал, поскольку эта информация предоставляется в DeviceCapabilities .

Если периферийные устройства помещают имя и типы данных службы ASHA в один и тот же тип кадра (ADV или SCAN RESP), то два типа данных («Полное локальное имя» и «Служебные данные для службы ASHA») должны появиться в одном кадре. Это позволяет сканеру мобильного устройства получать оба данных в одном и том же результате сканирования.

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

Синхронизация левого и правого периферийных устройств

Для работы с Bluetooth на мобильных устройствах Android периферийные устройства отвечают за обеспечение их синхронизации. Воспроизведение на левом и правом периферийных устройствах необходимо синхронизировать по времени. Оба периферийных устройства должны одновременно воспроизводить аудиосэмплы из источника.

Периферийные устройства могут синхронизировать свое время, используя порядковый номер, предшествующий каждому пакету полезной аудиоинформации. Центральная служба гарантирует, что аудиопакеты, предназначенные для одновременного воспроизведения на каждом периферийном устройстве, имеют одинаковый порядковый номер. Порядковый номер увеличивается на единицу после каждого аудиопакета. Каждый порядковый номер имеет длину 8 бит, поэтому порядковые номера будут повторяться после 256 аудиопакетов. Поскольку размер каждого аудиопакета и частота дискретизации фиксированы для каждого соединения, два периферийных устройства могут определить относительное время воспроизведения. Дополнительные сведения об аудиопакете см. в разделе Формат и синхронизация аудиопакета.

Центральный помогает, предоставляя триггеры бинауральным устройствам, когда может потребоваться синхронизация. Эти триггеры информируют каждое периферийное устройство о состоянии сопряженного с ним периферийного устройства всякий раз, когда выполняется операция, которая может повлиять на синхронизацию. Триггеры:

  • В рамках команды «Start» AudioControlPoint выдается текущее состояние подключения другой стороны бинауральных устройств.
  • Всякий раз, когда происходит подключение, отключение или обновление параметров подключения на одном периферийном устройстве, команда «Status» AudioControlPoint отправляется на другую сторону бинауральных устройств.

Формат аудиопакета и время

Упаковка аудиокадров (блоков сэмплов) в пакеты позволяет слуховому аппарату получать синхронизацию из временных привязок канального уровня. Для упрощения реализации:

  • Звуковой кадр всегда должен соответствовать интервалу соединения по времени. Например, если интервал соединения составляет 20 мс, а частота дискретизации — 16 кГц, то аудиокадр должен содержать 320 выборок.
  • Частота дискретизации в системе ограничена кратными 8 кГц, чтобы всегда иметь целое число выборок в кадре, независимо от времени кадра или интервала соединения.
  • Байт последовательности должен предшествовать звуковым кадрам. Байт последовательности должен считаться с циклическим циклом и позволять периферийному устройству обнаруживать несоответствие или опустошение буфера.
  • Аудиокадр всегда должен помещаться в один пакет LE. Аудиокадр должен быть отправлен как отдельный пакет L2CAP. Размер PDU LE LL должен быть:
    размер аудио полезной нагрузки + 1 (счетчик последовательности) + 6 (4 для заголовка L2CAP, 2 для SDU)
  • Событие подключения всегда должно быть достаточно большим, чтобы содержать 2 аудиопакета и 2 пустых пакета для ACK, чтобы зарезервировать полосу пропускания для повторных передач. Обратите внимание, что аудиопакет может быть фрагментирован центральным контроллером Bluetooth. Периферийное устройство должно иметь возможность принимать более 2 фрагментированных аудиопакетов на одно событие соединения.

Чтобы дать центральному узлу некоторую гибкость, длина пакета G.722 не указывается. Длина пакета G.722 может изменяться в зависимости от интервала соединения, установленного центральным сервером.

Выходной формат октета G.722 ссылается на Rec. ITU-T G.722 (09/2012), раздел 1.4.4 «Мультиплексор».

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

Кодек Битрейт Интервал подключения Длина CE (1M/2M PHY) Размер полезной нагрузки аудио
G.722 @ 16 кГц 64 кбит/с 20 мс 5000/3750 долларов США 160 байт

Запуск и остановка аудиопотока

Перед запуском аудиопотока центральный процессор опрашивает периферийные устройства и устанавливает кодек с общим знаменателем. Затем настройка потока выполняется в следующей последовательности:

  1. PSM и опционально считывается RenderDelay. Эти значения могут кэшироваться центральным сервером.
  2. Канал CoC L2CAP открыт — периферийное устройство должно первоначально предоставить 8 кредитов.
  3. Выдается обновление соединения для переключения ссылки на параметры, необходимые для выбранного кодека. Центральный сервер может выполнить это обновление соединения перед соединением CoC на предыдущем шаге.
  4. И центральный, и периферийный хост ждут события завершения обновления.
  5. Перезапустите аудиокодер и сбросьте счетчик последовательности пакетов на 0. На AudioControlPoint выдается команда «Start» с соответствующими параметрами. Централ ожидает успешного уведомления о статусе предшествующей команды «Start» от периферийного устройства перед потоковой передачей. Это ожидание дает периферийному устройству время для подготовки конвейера воспроизведения звука. Во время потоковой передачи звука реплика должна быть доступна при каждом событии подключения, даже если текущая задержка реплики может быть ненулевой.
  6. Периферийное устройство берет первый аудиопакет из своей внутренней очереди (порядковый номер 0) и воспроизводит его.

Централ подает команду «Стоп» на закрытие аудиопотока. После этой команды периферийное устройство не обязательно должно быть доступно при каждом подключении. Чтобы перезапустить потоковую передачу аудио, выполните описанную выше последовательность, начиная с шага 5. Когда центральная система не передает потоковую передачу аудио, она все равно должна поддерживать соединение LE для служб GATT.

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