Musical Instrument DigitalInterface (MIDI) is een standaard protocol voor het verbinden van computers met muziekinstrumenten, podium verlichting, en andere tijd-georiënteerde media.
Strict genomen, is MIDI niet gerelateerd aan audio. Maar omdat MIDI vaak met muziek wordt gebruikt, wordt dit artikel in de audio-sectie geplaatst.
MIDI voor NDK
Android 10 maakt het eenvoudiger om professionele audio-apps die MIDI gebruiken naar het Android-platform te porten.
AMidi
is eenNDK API die app-ontwikkelaars de mogelijkheid biedt MIDI-gegevens te verzenden en te ontvangen met C/C++ code.
Android MIDI-apps gebruiken meestal de midi
API om te communiceren met de Android MIDI-service. MIDI-apps zijn voornamelijk afhankelijk van de MidiManager
class om een of meer MidiDevice
objecten te ontdekken, openen en sluiten, en data door te geven van en naar elk apparaat via de MIDI input en output poorten van het apparaat.
Transports
De fysieke transportlayers die in originele MIDI 1.0 is een stroomlus met een 5-pins DIN-connector.
Sinds MIDI 1.0 zijn er extra transporten gedefinieerd, waaronder MIDI over USBen MIDI over Bluetooth Low Energy (BLE).
MIDI voor Android
Android ondersteunt USB On-The-Go, waarmee een Android-apparaat kan fungeren als een USB-host om USB-randapparatuur aan te sturen. De USB host mode API’s stellen ontwikkelaars in staat om MIDI over USB te implementeren op applicatieniveau, maar tot voor kort waren er geen ingebouwde platform API’s voor MIDI.
Beginnend met de Android 6.0 (Marshmallow) release, kunnen toestelfabrikanten optionele MIDI-ondersteuning in het platform inschakelen. Android ondersteunt direct USB, BLE, en virtuele (interapp) transporten.Android ondersteunt MIDI 1.0 via een externe adapter.
Voor details over het programmeren van toepassingen met de MIDI API’s, zie hetandroid.media.midi
package.
De rest van dit artikel bespreekt hoe een Android-apparaatmaker MIDI-ondersteuning in het platform kan inschakelen.
Transporten inschakelen
MIDI implementatie is afhankelijk van ALSA voor USB host mode en USB peripheral mode transporten.ALSA wordt niet gebruikt voor de BLE en virtuele transporten.
USB host mode
Om MIDI voor USB host mode in te schakelen, ondersteun eerst USB host mode in het algemeen, en schakel dan CONFIG_SND_RAWMIDI
en CONFIG_SND_USB_MIDI
in uw kernelconfiguratie in. Zie Android Kernel Configuration.
Het MIDI over USB transport is formeel gedefinieerd door deUniversal Serial Bus Device Class Definition for MIDI Devices Release 1.0 Nov 1, 1999standaard gepubliceerd door hetUSB Implementers Forum, Inc.
USB peripheral mode
Om MIDI voor USB peripheral mode in te schakelen, moet u wellicht patches toepassen op uw Linux kernel om drivers/usb/gadget/f_midi.c
te integreren in de USB gadgetdriver. Deze patches zijn beschikbaar voor Linux kernel versie 3.10. Deze patches zijn nog niet geupdate voorConfigFs (een nieuwe architectuur voor USB gadgetdrivers), noch zijn ze samengevoegd op upstreamkernel.org.
De patches worden in commit volgorde getoond voor de kernel tree bij project 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/
Je moet ook een van de volgende dingen doen:
- Ga naar Instellingen > Ontwikkelaarsopties > Netwerken en vink het vakje voor MIDI aan in het dialoogvenster USB-configuratie selecteren.
- Terwijl verbonden met de USB host, trek naar beneden vanaf de bovenkant van het scherm, selecteer de entryUSB voor, en selecteer dan MIDI.
BLE
MIDI over BLE is altijd ingeschakeld, mits het apparaat BLE ondersteunt.
Virtueel (interapp)
Het virtuele (interapp) transport is altijd ingeschakeld.
Claiming the feature
Apps kunnen screenen op de aanwezigheid van MIDI-ondersteuning met behulp van deandroid.software.midi
feature.
Om MIDI-ondersteuning te claimen, voegt u deze regel toe aan uw device.mk
:
PRODUCT_COPY_FILES += \frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.midi.xml
Zie hetAndroid Compatibility Definition Document (CDD)voor informatie over de vereisten om de functie te claimen.
Debuggen in hostmodus
Terwijl Android Debug Bridge (adb) zich in USB-hostmodus bevindt, is debuggen via USB niet beschikbaar. Zie het gedeelte Draadloos gebruik van Android Debug Bridge voor een alternatief.