Цифровое аудио USB

В этой статье рассматривается поддержка Android для цифрового звука USB и связанных протоколов на основе USB.

Аудитория

Целевая аудитория этой статьи - OEM-производители устройств Android, поставщики SoC, поставщики периферийных USB-устройств для аудио, разработчики продвинутых аудиоприложений и другие лица, желающие получить подробное представление о внутреннем устройстве цифрового звука USB на Android.

Конечные пользователи устройств Nexus должны вместо этого прочитать статью « Запись и воспроизведение звука в режиме USB-хоста» в Справочном центре Nexus . Хотя эта статья не ориентирована на конечных пользователей, некоторые потребители-аудиофилы могут найти ее части, которые могут заинтересовать.

Обзор USB

Универсальная последовательная шина (USB) неофициально описана в статье USB в Википедии и официально определяется стандартами, опубликованными организацией USB Implementers Forum, Inc. Для удобства мы суммируем здесь основные концепции USB, но стандарты являются авторитетным справочником.

Основные понятия и терминология

USB - это шина с единственным инициатором операций передачи данных, называемым хостом . Хост связывается с периферийными устройствами через шину.

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

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

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

Каждая периферийная функция имеет интерфейс, который определяет протокол для связи с этой функцией.

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

Есть два типа каналов: сообщения и поток . Канал сообщений используется для двунаправленного контроля и состояния. Потоковый канал используется для однонаправленной передачи данных.

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

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

Периферийное устройство может иметь терминалы, которые подключаются к внешнему миру, помимо самого периферийного устройства. Таким образом, периферийное устройство служит для преобразования между протоколом USB и сигналами «реального мира». Терминалы являются логическими объектами функции.

Режимы Android USB

Режим разработки

Режим разработки присутствует с момента первого выпуска Android. Устройство Android отображается как периферийное устройство USB для главного ПК с операционной системой для настольных компьютеров, например Linux, Mac OS X или Windows. Единственная видимая периферийная функция - это либо Android fastboot, либо Android Debug Bridge (adb) . Протоколы fastboot и adb накладываются на режим массовой передачи данных USB.

Режим хоста

Режим хоста представлен в Android 3.1 (уровень API 12).

Поскольку устройство Android должно выступать в качестве хоста, а большинство устройств Android включает в себя разъем micro-USB, который напрямую не разрешает работу хоста, обычно требуется адаптер OTG, такой как этот:

OTG

Рисунок 1. Мобильный адаптер (OTG).

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

Активный концентратор

Рисунок 2. Активный концентратор

Режим аксессуаров

Режим аксессуаров был представлен в Android 3.1 (уровень API 12) и перенесен на Android 2.3.4. В этом режиме устройство Android работает как периферийное USB-устройство под управлением другого устройства, например док-станции, которая выступает в качестве хоста. Разница между режимом разработки и дополнительным режимом заключается в том, что хосту доступны дополнительные функции USB, помимо adb. Устройство Android начинает работу в режиме разработки, а затем переходит в режим дополнительных устройств в процессе повторного согласования.

В Android 4.1 режим аксессуаров был расширен дополнительными функциями, в частности звуком, описанным ниже.

USB аудио

USB-классы

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

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

Класс USB-аудио

Здесь нас интересуют только периферийные устройства, которые реализуют аудиофункции и, таким образом, соответствуют классу аудиоустройств. Существует две редакции спецификации класса аудио USB: класс 1 (UAC1) и 2 (UAC2).

Сравнение с другими классами

USB включает в себя множество других классов устройств, некоторые из которых можно спутать с классом аудио. Класс запоминающих устройств (MSC) используется для секторно-ориентированного доступа к мультимедиа, а протокол передачи мультимедиа (MTP) предназначен для полного доступа файлов к мультимедиа. И MSC, и MTP могут использоваться для передачи аудиофайлов, но только класс USB audio подходит для потоковой передачи в реальном времени.

Аудио терминалы

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

каналы

Периферийное устройство со звуковой функцией может включать в себя терминал источника, терминал приемника или оба. Каждое направление может иметь один канал ( моно ), два канала ( стерео ) или более. Периферийные устройства с более чем двумя каналами называются многоканальными . Обычно стереопоток интерпретируется как состоящий из левого и правого каналов и, соответственно, интерпретируется многоканальный поток как имеющий пространственные положения, соответствующие каждому каналу. Тем не менее, также вполне уместно (особенно для звука USB, а не HDMI ) не назначать какое-либо конкретное стандартное пространственное значение каждому каналу. В этом случае приложение и пользователь сами определяют, как использовать каждый канал. Например, четырехканальный входной поток USB может иметь первые три канала, подключенные к различным микрофонам в комнате, а последний канал принимает входные данные от AM-радио.

Изохронный режим передачи

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

Изохронная передача происходит каждый период начала кадра (SOF). Период SOF составляет одну миллисекунду для полной скорости и 125 микросекунд для высокой скорости. Каждый полноскоростной кадр содержит до 1023 байтов полезной нагрузки, а высокоскоростной кадр - до 1024 байтов. Сложив их вместе, мы рассчитаем максимальную скорость передачи как 1 023 000 или 8 192 000 байт в секунду. Это устанавливает теоретический верхний предел для комбинированной частоты дискретизации аудио, количества каналов и битовой глубины. Практический предел ниже.

В изохронном режиме есть три подрежима:

  • Адаптивная
  • Асинхронный
  • Синхронный

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

В асинхронном подрежиме (также называемом неявной обратной связью) приемник или источник определяет частоту дискретизации, а хост приспосабливается к ней. Основное теоретическое преимущество асинхронного подрежима состоит в том, что тактовая частота USB источника или потребителя физически и электрически ближе (и действительно может быть такой же или производной) тактовой частотой, которая управляет ЦАП или АЦП. Эта близость означает, что асинхронный подрежим должен быть менее восприимчив к джиттеру часов. Кроме того, часы, используемые ЦАП или АЦП, могут иметь более высокую точность и меньший дрейф, чем часы главного устройства.

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

В таблице ниже приведены изохронные подрежимы:

Подрежим Счетчик байтов
за пакет
Частота дискретизации
определяется
Используется для аудио
адаптивный Переменная хозяин да
асинхронный Переменная периферийный да
синхронный фиксированный USB часы нет

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

Поддержка Android для класса USB audio

Режим разработки

USB-звук не поддерживается в режиме разработки.

Режим хоста

Android 5.0 (уровень API 21) и выше поддерживает подмножество функций USB audio class 1 (UAC1):

  • Устройство Android должно выступать в качестве хоста
  • Аудиоформат должен быть PCM (тип интерфейса I).
  • Разрядность должна быть 16, 24 или 32 бит, при этом 24 бита полезных аудиоданных выровнены по левому краю в наиболее значимых битах 32-битного слова.
  • Частота дискретизации должна быть 48, 44,1, 32, 24, 22,05, 16, 12, 11,025 или 8 кГц.
  • Количество каналов должно быть 1 (моно) или 2 (стерео).

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

Режим аксессуаров

В Android 4.1 (уровень API 16) добавлена ​​ограниченная поддержка воспроизведения звука на хосте. В режиме аксессуаров Android автоматически направляет свой аудиовыход на USB. То есть устройство Android служит источником данных для хоста, например док-станцией.

Аудио в режиме аксессуаров имеет следующие особенности:

  • Устройство Android должно управляться знающим хостом, который может сначала перевести устройство Android из режима разработки в режим дополнительных устройств, а затем хост должен передать аудиоданные с соответствующей конечной точки. Таким образом, устройство Android не кажется хосту «лишенным драйверов».
  • Направление должно быть введено относительно хоста.
  • Аудиоформат должен быть 16-битным PCM.
  • Частота дискретизации должна быть 44,1 кГц.
  • Количество каналов должно быть 2 (стерео).

Аудио в режиме аксессуаров не получило широкого распространения и в настоящее время не рекомендуется для новых разработок.

Применение цифрового аудио USB

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

Сказка о двух ЦАП

В приведенном ниже примере диаграммы мы сравниваем два дизайна. Сначала у нас есть мобильное устройство с прикладным процессором (AP), встроенным ЦАП, усилителем и аналоговым TRS-разъемом, подключенным к наушникам. Также мы рассматриваем мобильное устройство с USB-подключением к внешнему USB-ЦАП и усилителю, также с наушниками.

Сравнение ЦАП

Рисунок 3. Сравнение двух ЦАП

Какой дизайн лучше? Ответ зависит от ваших потребностей. У каждого есть свои преимущества и недостатки.

Примечание. Это искусственное сравнение, поскольку на реальном устройстве Android, вероятно, будут доступны оба варианта.

Первая конструкция A проще, дешевле, потребляет меньше энергии и будет более надежной, если в остальном будут использоваться не менее надежные компоненты. Однако обычно есть компромиссы между качеством звука и другими требованиями. Например, если это устройство массового потребления, оно может быть разработано для удовлетворения потребностей обычного потребителя, а не для аудиофила.

Во втором варианте внешнее периферийное аудиоустройство C может быть спроектировано для более высокого качества звука и большей выходной мощности без ущерба для стоимости базового устройства Android для массового рынка B. Да, это более дорогая конструкция, но стоимость покрывается только те, кто этого хочет.

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

С другой стороны, второй вариант более сложен, и с его усложнением появляется больше возможностей для отказа. Также существует дополнительная задержка со стороны контроллеров USB.

Приложения в режиме хоста

Типичные аудиоприложения в режиме хоста USB включают в себя:

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

Для всех этих приложений Android обнаруживает совместимое цифровое периферийное аудиоустройство USB и автоматически направляет воспроизведение и захват звука соответствующим образом в соответствии с правилами политики аудио. Стереоконтент воспроизводится на первых двух каналах периферийного устройства.

Для цифрового аудио USB нет специальных API. Для расширенного использования автоматическая маршрутизация может мешать работе приложений, поддерживающих USB. Для таких приложений отключите автоматическую маршрутизацию с помощью соответствующего элемента управления в разделе Медиа в Настройках / Параметры разработчика .

Отладка в режиме хоста

В режиме USB-хоста отладка adb через USB недоступна. См. Альтернативу в разделе « Беспроводное использование Android Debug Bridge» .

Реализация USB-аудио

Рекомендации для производителей периферийных аудиоустройств

Для взаимодействия с устройствами Android производители периферийных аудиоустройств должны:

  • дизайн для соответствия аудио классу; в настоящее время Android нацелен на класс 1, но разумно планировать для класса 2
  • избегать причуд
  • тест на совместимость с эталонными и популярными Android-устройствами
  • четко документировать поддерживаемые функции, соответствие классу звука, требования к питанию и т. д., чтобы потребители могли принимать обоснованные решения

Рекомендации для производителей устройств Android и поставщиков SoC

Чтобы поддерживать цифровое аудио через USB, OEM-производители устройств и поставщики SoC должны:

  • разработка оборудования для поддержки режима USB-хоста
  • включить общую поддержку хоста USB на уровне инфраструктуры с помощью флага функции android.hardware.usb.host.xml
  • включить все необходимые функции ядра: режим USB-хоста, USB-аудио, режим изохронной передачи; см. Конфигурация ядра Android
  • будьте в курсе последних выпусков ядра и исправлений; несмотря на благородную цель соответствия классу, существуют звуковые периферийные устройства с причудами , а в последних ядрах есть обходные пути для таких причуд.
  • включить политику аудио USB, как описано ниже
  • добавить audio.usb.default в PRODUCT_PACKAGES на device.mk
  • тест на совместимость с обычными периферийными аудиоустройствами USB

Как включить аудио политику USB

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

device/oem/codename/audio_policy.conf

Компонент "oem" в имени пути следует заменить на имя OEM-производителя, производящего устройство Android, а "codename" следует заменить на кодовое имя устройства.

Здесь показан пример записи:

audio_hw_modules {
  ...
  usb {
    outputs {
      usb_accessory {
        sampling_rates 44100
        channel_masks AUDIO_CHANNEL_OUT_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_OUT_USB_ACCESSORY
      }
      usb_device {
        sampling_rates dynamic
        channel_masks dynamic
        formats dynamic
        devices AUDIO_DEVICE_OUT_USB_DEVICE
      }
    }
    inputs {
      usb_device {
        sampling_rates dynamic
        channel_masks AUDIO_CHANNEL_IN_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_IN_USB_DEVICE
      }
    }
  }
  ...
}

Исходный код

Реализация уровня аппаратной абстракции аудио (HAL) для аудио USB находится здесь:

hardware/libhardware/modules/usbaudio/

USB audio HAL в значительной степени полагается на tinyalsa , описанный в Audio Terminology . Хотя USB-аудио полагается на изохронную передачу, это абстрагируется реализацией ALSA. Таким образом, USB audio HAL и tinyalsa не должны беспокоиться об этой части протокола USB.

Тестирование звука USB

Для получения информации о тестировании CTS для USB-аудио см. USB Audio CTS Verifier Tests .