МИДИ

MIDI (Musical Instrument Digital Interface) — это стандартный протокол для соединения компьютеров с музыкальными инструментами, сценическим освещением и другими средствами передачи данных, зависящими от времени.

Начиная с Android 13, в USB-транспорт добавлена ​​поддержка MIDI 2.0 . MIDI 2.0 — это более новый стандарт MIDI, определенный в 2020 году. Этот протокол добавляет такие функции, как двусторонняя связь, более высокое разрешение и обмен свойствами. MIDI 2.0 через режим USB-хоста всегда включен, если поддержка MIDI включена на платформе. Поддержка MIDI 2.0 через виртуальные транспорты доступна в Android 15 и выше.

Строго говоря, MIDI не имеет отношения к аудио. Но поскольку MIDI широко используется в музыке, эта статья помещена в раздел аудио.

MIDI для NDK

Android 10 упрощает перенос профессиональных аудиоприложений, использующих MIDI, на платформу Android.

AMidi — это API из NDK , который позволяет разработчикам приложений отправлять и получать MIDI-данные с помощью кода на C/C++.

Приложения Android, использующие MIDI, обычно применяют midi API для связи со службой Android MIDI. В основном, MIDI-приложения зависят от класса MidiManager , который обнаруживает, открывает и закрывает один или несколько объектов MidiDevice , а также передает данные между устройствами через MIDI-входы и выходы.

Транспорты

В оригинальной версии MIDI 1.0 физический транспортный уровень представляет собой токовую петлю с 5-контактным разъемом DIN .

Начиная с MIDI 1.0, были определены дополнительные способы передачи данных, включая MIDI через USB и MIDI через Bluetooth Low Energy (BLE) .

MIDI для Android

Android поддерживает USB On-The-Go , что позволяет устройству Android выступать в качестве USB-хоста для управления USB-периферийными устройствами. API режима USB-хоста позволяют разработчикам реализовывать MIDI через USB на уровне приложения, но до недавнего времени не существовало встроенных платформенных API для MIDI.

Начиная с версии Android 6.0 (Marshmallow), производители устройств могут включить дополнительную поддержку MIDI в платформе. Android напрямую поддерживает USB, BLE и виртуальные (межприкладные) каналы передачи данных. Android поддерживает MIDI 1.0 через внешний адаптер.

Подробную информацию о программировании приложений с использованием MIDI API см. в пакете android.media.midi .

В оставшейся части статьи рассматривается, как производитель Android-устройств может включить поддержку MIDI на платформе.

Включение MIDI 1.0-транспорта

Реализация MIDI 1.0 зависит от ALSA для передачи данных в режиме хоста USB и в режиме периферийного устройства USB. ALSA не используется для передачи данных по BLE и виртуальным устройствам.

режим хоста USB

Чтобы включить MIDI для режима USB-хоста, сначала необходимо обеспечить поддержку режима USB-хоста в целом, а затем включить параметры CONFIG_SND_RAWMIDI и CONFIG_SND_USB_MIDI в конфигурации ядра.

Передача MIDI-данных через USB формально определяется стандартом Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999, опубликованным организацией USB Implementers Forum, Inc.

режим периферийного устройства USB

Для включения MIDI в режиме USB-периферийного устройства может потребоваться внести изменения в ядро ​​Linux, интегрировав drivers/usb/gadget/f_midi.c в драйвер USB-устройства. Эти изменения доступны для ядра Linux версии 3.10. Они еще не обновлены для ConfigFs (новой архитектуры для драйверов USB-устройств) и не включены в репозиторий kernel.org .

Патчи отображаются в порядке коммитов для дерева ядра в ветке проекта kernel/common android-3.10 :

  1. https://android-review.googlesource.com/#/c/127450/
  2. https://android-review.googlesource.com/#/c/127452/
  3. https://android-review.googlesource.com/#/c/143714/

Вам также необходимо выполнить одно из следующих действий:

  • Перейдите в «Настройки» > «Параметры разработчика» > «Сеть» и установите флажок для параметра MIDI в диалоговом окне «Выбор конфигурации USB».
  • Подключив устройство к USB-хосту, проведите пальцем вниз от верхней части экрана, выберите пункт "USB" , а затем выберите "MIDI" .

БЛЕ

Передача MIDI по BLE всегда включена, при условии, что устройство поддерживает BLE.

Виртуальный (межприложениевый)

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

Заявление о наличии функции

Приложения могут проверять наличие поддержки MIDI с помощью функции android.software.midi .

Чтобы активировать поддержку MIDI, добавьте следующую строку в файл device.mk :

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.
midi.xml

Информацию о требованиях для активации этой функции см. в документе Android Compatibility Definition Document (CDD) .

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

В режиме USB-хоста отладка через USB с помощью Android Debug Bridge (adb) недоступна. Альтернативный способ отладки описан в разделе « Использование беспроводной связи » Android Debug Bridge.