Цифровой интерфейс музыкальных инструментов (MIDI) – это стандартный протокол для подключения компьютеров к музыкальным инструментам, сценическому освещению и другим устройствам, работающим с временными данными.
В Android 13 добавлена поддержка MIDI 2.0 для передачи данных по USB. MIDI 2.0 – это более новый стандарт MIDI, определенный в 2020 году. Этот протокол поддерживает двустороннюю связь, более высокое разрешение и обмен свойствами. MIDI 2.0 в режиме USB-хоста всегда включен, если на платформе включена поддержка MIDI. MIDI 2.0 через виртуальные транспорты поддерживается в Android 15 и более поздних версиях.
Строго говоря, MIDI не имеет отношения к аудио. Однако, поскольку MIDI обычно используется для работы с музыкой, эта статья размещена в разделе "Аудио".
MIDI для NDK
В Android 10 упрощен перенос профессиональных аудиоприложений, использующих MIDI, на платформу Android.
AMidi – это NDK API, который позволяет разработчикам приложений отправлять и получать данные MIDI с помощью кода C/C++.
Приложения Android MIDI обычно используют API
midi для связи с сервисом Android MIDI. Приложения MIDI в основном зависят от класса
MidiManager, который позволяет обнаруживать, открывать и закрывать один или несколько объектов
MidiDevice, а также передавать данные на каждое устройство и с него через порты MIDI-входа и MIDI-выхода.
Протоколы
Физический транспортный уровень, указанный в оригинальном стандарте MIDI 1.0, представляет собой токовую петлю с пятиконтактным разъемом DIN.
После MIDI 1.0 были определены дополнительные транспорты, включая MIDI через USB и MIDI через Bluetooth с низким энергопотреблением (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:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- https://android-review.googlesource.com/#/c/143714/
Кроме того, вам нужно выполнить одно из следующих действий:
- Выберите Настройки > Для разработчиков > Сеть и установите флажок MIDI в диалоговом окне "Выбор конфигурации USB".
- Когда устройство подключено к хосту USB, проведите вниз от верхнего края экрана, выберите USB для и нажмите MIDI.
BLE
MIDI over 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 (CDD).
Отладка в режиме хоста
В режиме хоста USB отладка через Android Debug Bridge (adb) по USB недоступна. В качестве альтернативы можно использовать беспроводное подключение Android Debug Bridge.