МИДИ

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

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

MIDI для НДК

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 с низким энергопотреблением (BLE) .

МИДИ для 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 через внешний адаптер.

Дополнительные сведения о программировании приложений с помощью API-интерфейсов MIDI см. в пакете android.media.midi .

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

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

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

Режим USB-хоста

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

Транспорт MIDI через USB формально определяется стандартом Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 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 (CDD) для получения информации о требованиях для использования этой функции.

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

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