MIDI

MIMD(Musical Instrument Digital Interface)는 컴퓨터를 악기, 무대 조명, 기타 시간 지향적인 미디어와 상호 연결하기 위한 표준 프로토콜입니다.

Android 13부터 USB 전송에 MIDI 2.0 지원이 추가되었습니다. MIDI 2.0은 2020년에 정의된 최신 MIDI 표준입니다. 이 프로토콜은 양방향 통신, 고해상도 및 속성 교환과 같은 기능을 추가합니다. 플랫폼에 MIDI 지원이 사용 설정되면 USB 호스트 모드를 통한 MIDI 2.0이 항상 사용됩니다.

엄밀히 말하면 MIDI는 오디오와 관련이 없지만, 일반적으로 음악과 함께 사용되기 때문에 오디오 섹션에 이 문서가 배치되었습니다.

NDK용 MIDI

Android 10에서는 MIDI를 사용하는 전문 오디오 앱을 Android 플랫폼에 더 쉽게 포팅할 수 있습니다.

AMidi는 앱 개발자가 C/C++ 코드로 작성된 MIDI 데이터를 주고받는 데 사용할 수 있는 NDK API입니다.

Android MIDI 앱은 대개 midi API를 사용하여 Android MIDI 서비스와 통신합니다. MIDI 앱은 주로 MidiManager 클래스를 사용해 하나 이상의 MidiDevice 객체를 검색하고 열고 닫으며, 기기의 MIDI 입력 및 출력 포트를 통해 각 기기로 데이터를 전달하거나 기기에서 데이터를 전달받습니다.

전송

원본 MIDI 1.0에 지정된 물리적 전송 레이어5핀 DIN 커넥터가 있는 전류 루프입니다.

MIDI 1.0부터 USB를 통한 MIDI 및 저전력 블루투스(BLE)를 통한 MIDI를 비롯하여 추가 전송 방식이 정의되었습니다.

Android용 MIDI

Android는 Android 기기가 USB 주변기기를 구동하는 USB 호스트 역할을 하도록 허용하는 USB OTG(On-The-Go)를 지원합니다. USB 호스트 모드 API를 사용하면 개발자는 애플리케이션 수준에서 USB를 통한 MIDI를 구현할 수 있지만, 최근까지는 MIDI용 내장 플랫폼 API가 제공되지 않았습니다.

Android 6.0(Marshmallow) 출시부터 기기 제조업체는 플랫폼에서 MIDI 지원을 선택사항으로 사용 설정할 수 있습니다. Android는 USB, BLE 및 가상(애플리케이션 간) 전송을 직접 지원하며, 외부 어댑터를 통해 MIDI 1.0을 지원합니다.

MIDI API를 사용한 애플리케이션 프로그래밍에 관한 자세한 내용은 android.media.midi 패키지를 참고하세요.

이 문서의 나머지 부분에서는 Android 기기 제조업체가 플랫폼에서 MIDI 지원을 사용 설정하는 방법을 설명합니다.

MIDI 1.0 전송 사용 설정

MIDI 1.0 구현은 USB 호스트 모드 및 USB 주변기기 모드 전송 방식을 위한 ALSA에 따라 다릅니다. ALSA는 BLE 및 가상 전송에 사용되지 않습니다.

USB 호스트 모드

USB 호스트 모드에서 MIDI를 사용 설정하려면 먼저 일반적으로 USB 호스트 모드를 지원한 후 커널 구성에서 CONFIG_SND_RAWMIDICONFIG_SND_USB_MIDI를 사용 설정합니다. Android 커널 구성을 참고하세요.

USB를 통한 MIDI 전송은 USB Implementers Forum, Inc에서 발표한 Universal Serial Bus Device Class Definition for MIDI Devices Release 1.0(1999년 11월 1일) 표준에 의해 공식 정의됩니다.

USB 주변기기 모드

USB 주변기기 모드에서 MIDI를 사용 설정하려면 Linux 커널에 패치를 적용하여 drivers/usb/gadget/f_midi.c를 USB 가젯 드라이버에 통합해야 할 수도 있습니다. 이러한 패치는 Linux 커널 버전 3.10에서 사용할 수 있습니다. 이러한 패치는 아직 ConfigFs(USB 가젯 드라이버용 신규 아키텍처)용으로 업데이트되지 않았으며 업스트림 kernel.org에서 병합되지도 않았습니다.

패치는 kernel/common 프로젝트 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/

또한 다음 중 하나를 실행해야 합니다.

  • 설정 > 개발자 옵션 > 네트워킹으로 이동하여 USB 설정 선택 대화상자에서 MIDI 체크박스를 선택합니다.
  • USB 호스트에 연결되어 있는 동안 화면 상단에서 아래로 끌어당겨 USB 항목을 선택한 후 MIDI를 선택합니다.

BLE

기기가 BLE를 지원한다면 BLE를 통한 MIDI는 항상 사용 설정됩니다.

가상(애플리케이션 간)

가상(애플리케이션 간) 전송은 항상 사용 설정됩니다.

기능 요청

앱에서 android.software.midi 기능을 사용하여 MIDI 지원 여부를 확인할 수 있습니다.

MIDI 지원을 요청하려면 device.mk에 다음 줄을 추가합니다.

PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.software.midi.xml:system/etc/permissions/android.software.
midi.xml

기능을 요청하는 데 필요한 요구사항에 관한 자세한 내용은 Android 호환성 정의 문서(CDD)를 참고하세요.

호스트 모드에서 디버깅

USB 호스트 모드에서 USB를 통한 Android 디버그 브리지(adb) 디버깅은 사용할 수 없습니다. 이에 관한 대안은 Android 디버그 브리지의 무선 사용 섹션을 참고하세요.