МИДИ

Цифровой интерфейс музыкальных инструментов (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 — это API NDK , который предоставляет разработчикам приложений возможность отправлять и получать MIDI-данные с помощью кода C/C++.

MIDI-приложения Android обычно используют midi API для взаимодействия с MIDI-сервисом Android. 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 от 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.

Виртуальный (interapp)

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

Заявление о праве на функцию

Приложения могут проверять наличие поддержки 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 для получения альтернативных вариантов.