Musical Instrument DigitalInterface (MIDI) é um protocolo padrão para interligar computadores com instrumentos musicais, iluminação de palco, e outros meios orientados para o tempo.
Estritamente falando, o MIDI não está relacionado com o áudio. Mas como o MIDI é vulgarmente utilizado com música, este artigo é colocado na secção de áudio.
MIDI para NDK
Android 10 facilita a portabilidade de aplicações de áudio profissionais utilizando MIDI para a plataforma Android.
p>AMidi
é uma APINDK que dá aos criadores de aplicações a capacidade de enviar e receber dados MIDI com código C/C++.
Aplicações MIDI para Androide utilizam geralmente a API midi
para comunicar com o serviço MIDI do Android. Os MIDIapps dependem principalmente do MidiManager
classe a descobrir, abrir, e fechar um ou mais MidiDevice
objectos, e passar dados de e para cada dispositivo através das portas de entrada e saída MIDI do dispositivo.
Transportes
Os transportadores físicos especificados no MIDI original 1.0 é um circuito de corrente com conector DIN de 5 pinos.
Desde MIDI 1.0, foram definidos transportes adicionais, incluindo MIDI sobre USB e MIDI sobreBluetooth Low Energy(BLE).
MIDI para Android
Android suportaUSB On-The-Go,o que permite que um dispositivo Android actue como um hospedeiro USB para conduzir periféricos USB. As APIs do modo anfitrião USB permitem aos desenvolvedores implementar MIDI sobre USB ao nível da aplicação, mas até recentemente não havia APIs de plataforma integradas para MIDI.
Início com o lançamento do Android 6.0 (Marshmallow), os fabricantes de dispositivos podem permitir MIDIsupport opcional na plataforma. O Android suporta directamente transportes USB, BLE, e virtuais (interapp). O Android suporta MIDI 1.0 através de um adaptador externo.
Para detalhes sobre programação de aplicações com as APIs MIDI, ver oandroid.media.midi
package.
O resto deste artigo discute como um fabricante de dispositivos Android pode suportar MIDI na plataforma.
Ativação de transportes
A implementação de MIDI depende de ALSA para o modo anfitrião USB e transportes em modo periférico USB.ALSA não é utilizado para os transportes BLE e virtuais.
Modo anfitrião USB
Ativar MIDI para modo anfitrião USB, primeiro suportar modo anfitrião USB em geral, e depois ativar CONFIG_SND_RAWMIDI
e CONFIG_SND_USB_MIDI
na sua configuração do núcleo. Ver Android Kernel Configuration.
O MIDI sobre transporte USB é formalmente definido pelaUniversal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999 standard publicado peloUSB Implementers Forum, Inc.
modo periférico USB
Para activar MIDI para modo periférico USB, pode ser necessário aplicar patches no seu kernel Linux para integrar drivers/usb/gadget/f_midi.c
no gadgetdriver USB. Estas correcções estão disponíveis para a versão 3.10 do kernel Linux. Estas correcções ainda não foram actualizadas paraConfigFs(uma nova arquitectura para drivers de gadgets USB), nem estão fundidas no upstreamkernel.org.
As correcções são mostradas em ordem de submissão para a árvore do kernel no projecto kernel/common
branch android-3.10
:
- https://android-review.googlesource.com/#/c/127450/
- https://android-review.googlesource.com/#/c/127452/
- https://android-review.googlesource.com/#/c/143714/
Também precisa de fazer um dos seguintes:
- Ir para Configurações > Opções do programador > Ligação em rede e marcar a caixa para MIDI na caixa de diálogo Seleccionar Configuração USB.
- Enquanto ligado ao host USB, puxar para baixo a partir do topo do ecrã, seleccionar a entradaUSB para, e depois seleccionar MIDI.
BLE
MIDI sobre BLE está sempre activado, desde que o dispositivo suporte BLE.
Virtual (interapp)
O transporte virtual (interapp) está sempre activado.
Apelando a funcionalidade
Aplicações podem filtrar a presença do suporte MIDI usando a funcionalidadeandroid.software.midi
.
Para reclamar 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
Veja o Documento de Definição de Compatibilidade Androideia (CDD)para obter informações sobre os requisitos para reclamar a funcionalidade.
Debugging enquanto em modo anfitrião
Enquanto em modo anfitrião USB, a depuração do Android Debug Bridge (adb) sobre USB não está disponível.Ver a secção Utilização sem fios do Android Debug Bridge para uma alternativa.