A Interface digital para instrumentos musicais (MIDI, na sigla em inglês) é um protocolo padrão para interligar computadores com instrumentos musicais, iluminação de palco e outras mídias orientadas a tempo.
A partir do Android 13, o suporte a MIDI 2.0 foi adicionado ao transporte USB. MIDI 2.0 é um padrão MIDI mais recente definido em 2020. Esse protocolo adiciona recursos como comunicação bidirecional, resolução mais alta e troca de propriedades. O MIDI 2.0 pelo modo host USB é sempre ativado quando o suporte ao MIDI é ativado na plataforma.
Na verdade, o MIDI não tem relação com o áudio. No entanto, como o MIDI é comumente usado com música, este artigo está na seção de áudio.
MIDI para NDK
O Android 10 facilita a portabilidade de apps de áudio profissionais que usam MIDI para a plataforma Android.
A
AMidi
é uma
API NDK que oferece aos desenvolvedores
de apps a capacidade de enviar e receber dados MIDI com código C/C++.
Os apps Android MIDI costumam usar a API
midi
para se comunicarem com o serviço Android MIDI. Os apps
MIDI dependem principalmente da classe
MidiManager
para descobrir, abrir e fechar um ou mais objetos
MidiDevice
, além de transmitir dados de e para cada dispositivo pelas portas de entrada e saída MIDI.
Transportes
A camada de transporte física especificada no MIDI 1.0 original é um loop de corrente com conector DIN de 5 pinos.
Desde o MIDI 1.0, outros transportes foram definidos, incluindo MIDI por USB e MIDI por Bluetooth de baixa energia (BLE).
MIDI para Android
O Android oferece suporte a USB On-The-Go, que permite que um dispositivo Android atue como host USB para controlar periféricos USB. As APIs do modo host USB permitem que os desenvolvedores implementem MIDI sobre USB no nível do aplicativo, mas até recentemente não havia APIs de plataforma integradas para MIDI.
A partir da versão do Android 6.0 (Marshmallow), os fabricantes de dispositivos podem ativar a compatibilidade opcional com MIDI na plataforma. O Android oferece suporte direto a transportes USB, BLE e virtuais (interapp). O Android oferece suporte a MIDI 1.0 por meio de um adaptador externo.
Para saber mais sobre a programação de aplicativos com as APIs MIDI, consulte o
pacote
android.media.midi
.
O restante deste artigo discute como um fabricante de dispositivos Android pode ativar o suporte a MIDI na plataforma.
Ativar os transportes MIDI 1.0
A implementação do MIDI 1.0 depende do ALSA para o modo host USB e os transportes do modo periférico USB. ALSA não é usada para BLE e transportes virtuais.
Modo de host USB
Para ativar o MIDI para o modo host USB, primeiro ofereça suporte ao modo host USB em geral e
ative CONFIG_SND_RAWMIDI
e CONFIG_SND_USB_MIDI
na configuração
do kernel. Consulte Configuração do kernel do Android.
O transporte MIDI por USB é definido formalmente pelo padrão Universal Serial Bus Device Definition for MIDI Devices Versão 1.0 de 1o de novembro de 1999 publicado pelo USB Implementers Forum, Inc.
Modo USB periférico
Para ativar o MIDI para o modo de periférico USB, pode ser necessário aplicar patches
ao kernel do Linux para integrar drivers/usb/gadget/f_midi.c
ao driver de gadget
USB. Esses patches estão disponíveis para a versão 3.10 do kernel do Linux. Esses patches ainda não foram atualizados para
ConfigFs
(uma nova arquitetura
para drivers de gadgets USB) nem foram mesclados no
kernel.org upstream.
Os patches são mostrados em ordem de confirmação para a árvore de kernel no branch android-3.10
do projeto kernel/common
:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- https://android-review.googlesource.com/#/c/143714/
Você também precisa fazer o seguinte:
- Acesse Configurações > Opções do desenvolvedor > Rede e marque a caixa MIDI na caixa de diálogo "Selecionar configuração USB".
- Enquanto ele estiver conectado ao host USB, puxe a tela de cima para baixo, selecione a entrada USB para e depois MIDI.
BLE
O MIDI por BLE é sempre ativado, desde que o dispositivo seja compatível com BLE.
Virtual (entre apps)
O transporte virtual (entre apps) está sempre ativado.
Reivindicar o recurso
Os apps podem verificar a presença de suporte a MIDI usando o
recurso android.software.midi
.
Para reivindicar o suporte a MIDI, adicione esta linha ao device.mk
:
PRODUCT_COPY_FILES += \ frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software. midi.xml
Consulte o Documento de definição de compatibilidade do Android (CDD) para informações sobre os requisitos para reivindicar o recurso.
Como depurar no modo host
No modo de host USB, a depuração do Android Debug Bridge (adb) por USB fica indisponível. Consulte a seção Uso sem fio do Android Debug Bridge para conferir uma alternativa.