MIDI

Musical Instrument Digital Interface (MIDI) é um protocolo padrão para interconectar computadores com instrumentos musicais, iluminação de palco e outras mídias orientadas ao 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. Este protocolo adiciona recursos como comunicação bidirecional, resolução mais alta e troca de propriedades. MIDI 2.0 através do modo host USB está sempre habilitado quando o suporte MIDI está habilitado na plataforma.

A rigor, MIDI não tem relação com áudio. Mas como o MIDI é comumente usado com música, este artigo é colocado na seção de áudio.

MIDI para NDK

O Android 10 facilita a portabilidade de aplicativos de áudio profissionais usando MIDI para a plataforma Android.

AMidi é uma API NDK que oferece aos desenvolvedores de aplicativos a capacidade de enviar e receber dados MIDI com código C/C++.

Os aplicativos Android MIDI geralmente usam a API midi para se comunicar com o serviço Android MIDI. Os aplicativos MIDI dependem principalmente da classe MidiManager para descobrir, abrir e fechar um ou mais objetos MidiDevice e passar dados de e para cada dispositivo por meio das portas de entrada e saída MIDI do dispositivo.

Transportes

A camada de transporte físico especificada no MIDI 1.0 original é um loop de corrente com conector DIN de 5 pinos .

Desde o MIDI 1.0, transportes adicionais foram definidos, incluindo MIDI sobre USB e MIDI sobre Bluetooth Low Energy (BLE) .

MIDI para Android

O Android oferece suporte a USB On-The-Go , que permite que um dispositivo Android atue como um 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 Android 6.0 (Marshmallow), os fabricantes de dispositivos podem ativar o suporte MIDI opcional 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 obter detalhes sobre a programação de aplicativos com APIs MIDI, consulte o pacote android.media.midi .

O restante deste artigo discute como um fabricante de dispositivos Android pode ativar o suporte MIDI na plataforma.

Habilitando transportes MIDI 1.0

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

Modo host USB

Para habilitar o modo MIDI para host USB, primeiro suporte o modo host USB em geral e, em seguida, habilite CONFIG_SND_RAWMIDI e CONFIG_SND_USB_MIDI na configuração do kernel. Consulte Configuração do kernel do Android.

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

Modo periférico USB

Para habilitar o MIDI para o modo periférico USB, pode ser necessário aplicar patches ao kernel Linux para integrar drivers/usb/gadget/f_midi.c ao driver do dispositivo USB. Esses patches estão disponíveis para o kernel Linux versão 3.10. 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 commit para a árvore do kernel no projeto kernel/common branch 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 o seguinte:

  • Vá para Configurações > Opções do desenvolvedor > Rede e marque a caixa MIDI na caixa de diálogo Selecionar configuração USB.
  • Enquanto estiver conectado ao host USB, desça da parte superior da tela, selecione a entrada USB para e selecione MIDI .

BLE

MIDI sobre BLE está sempre habilitado, desde que o dispositivo suporte BLE.

Virtual (interaplicativo)

O transporte virtual (interapp) está sempre habilitado.

Reivindicando o recurso

Os aplicativos podem rastrear a presença de suporte MIDI usando o recurso android.software.midi .

Para reivindicar suporte 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 obter informações sobre os requisitos para reivindicar o recurso.

Depurando no modo host

No modo 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 obter uma alternativa.