Цифровой интерфейс музыкальных инструментов (MIDI) — это стандартный протокол для соединения компьютеров с музыкальными инструментами, сценическим освещением и другими носителями, ориентированными на время.
Начиная с Android 13, к USB-транспорту добавляется поддержка MIDI 2.0 . MIDI 2.0 — это новый стандарт MIDI, определенный в 2020 году. Этот протокол добавляет такие функции, как двусторонняя связь, более высокое разрешение и обмен свойствами. Режим MIDI 2.0 через USB-хост всегда включен, если на платформе включена поддержка 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) .
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
в конфигурации вашего ядра. См . Конфигурацию ядра Android.
Транспортировка MIDI через USB формально определена в стандарте «Определение класса устройства универсальной последовательной шины для MIDI-устройств версии 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
:
- 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 .
БЛЕ
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.