MIDI

A interface digital para instrumentos musicais (MIDI) é um protocolo padrão para interconectar computadores com instrumentos musicais, iluminação de palco e outras mídias orientadas por 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, maior resolução e troca de propriedades. O MIDI 2.0 no modo host USB está sempre ativado quando o suporte a MIDI está ativado na plataforma. O MIDI 2.0 em transportes virtuais é compatível com o Android 15 e versões mais recentes.

Estritamente falando, o MIDI não está relacionado ao áudio. Mas, como o MIDI é usado com frequência em 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.

O 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 e 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 um 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 é compatível com USB On-The-Go, que permite que um dispositivo Android funcione como um host USB para acionar periféricos USB. As APIs de modo host USB permitem que desenvolvedores implementem MIDI por USB no nível do aplicativo, mas até recentemente não havia APIs de plataforma integradas para MIDI.

A partir do lançamento do Android 6.0 (Marshmallow), os fabricantes de dispositivos podem ativar o suporte opcional a MIDI na plataforma. O Android oferece suporte direto a transportes USB, BLE e virtuais (entre apps). O Android é compatível com MIDI 1.0 por um adaptador externo.

Para detalhes sobre 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.

Como ativar transportes MIDI 1.0

A implementação do MIDI 1.0 depende do ALSA para transportes de modo host USB e modo periférico USB. O ALSA não é usado para transportes virtuais e BLE.

Modo de host USB

Para ativar o MIDI no modo host USB, primeiro ofereça suporte ao modo host USB em geral e depois ative CONFIG_SND_RAWMIDI e CONFIG_SND_USB_MIDI na configuração do kernel.

O transporte MIDI por USB é formalmente definido pelo padrão Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 publicado pelo USB Implementers Forum, Inc.

Modo periférico USB

Para ativar o MIDI no modo periférico USB, talvez seja 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 gadget USB) nem foram mesclados no kernel.org upstream.

Os patches são mostrados na ordem de commit da árvore do kernel no projeto kernel/common ramo 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/

Você também precisa fazer uma destas ações:

  • Acesse Configurações > Opções do desenvolvedor > Rede e marque a caixa de seleção MIDI na caixa de diálogo "Selecionar configuração USB".
  • Com o dispositivo conectado ao host USB, deslize para baixo na parte de cima da tela, selecione a entrada USB para e escolha MIDI.

BLE

O MIDI por BLE está sempre ativado, desde que o dispositivo seja compatível com BLE.

Virtual (interapp)

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 suporte a MIDI, adicione esta linha ao seu 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.

Depuração no modo host

No modo de host USB, a depuração do Android Debug Bridge (adb) por USB não está disponível. Consulte a seção Uso sem fio do Android Debug Bridge para uma alternativa.