MIDI 아키텍처

이 도움말에서는 플랫폼 구현, API 또는 플랫폼별 기능과 상관없이 일반적인 MIDI 아키텍처를 설명합니다.

주요 개념

이벤트

MIDI 프로토콜은 이벤트 기반 통신을 위해 설계되었습니다. 이벤트는 특정 시간에 무언가가 발생했거나 발생할 것임을 나타냅니다. MIDI 이벤트는 정보의 원자 번들인 메시지로 표현됩니다.

전송

MIDI 메시지는 전송이라고 줄여 부르는 전송 레이어를 통해 인코딩되고 전달됩니다. 전송 레이어는 원시 MIDI 데이터를 수신자에게 보내고 수신자는 데이터를 메시지로 디코딩합니다.

하드웨어 기반 MIDI 전송에는 다음이 포함됩니다.

  • 5핀 DIN 커넥터가 있는 MIDI 1.0 전류 루프
  • USB
  • 저전력 블루투스(BLE)

메시지 표현

MIDI 전송 사양은 메시지 전달 방법을 설명합니다. 메시지 패키징이 가장 낮은 수준에서 전송별로 적용되지만, 상위 수준의 애플리케이션에서는 시간순으로 정렬된 일련의 메시지를 경계가 구분된 바이트 스트림으로 간주할 수 있습니다. 이는 메시지 경계의 시작점을 알 수 있는 경우 각 메시지가 메시지의 전체 길이를 알 수 있는 충분한 정보를 포함하고 있기 때문에 가능합니다.

대부분의 MIDI 메시지는 1~3바이트로 짧지만, SysEx를 통해 더 긴 메시지를 보낼 수 있습니다.

타임스탬프

타임스탬프는 전송에 따라 발신 또는 수신 시에 메시지에 첨부되는 선택적 라벨입니다. 타임스탬프는 초 또는 과 같은 시간 단위로 표현됩니다.

명시적 타임스탬프가 없는 경우 시스템은 바로 이전 메시지 또는 현재 시간의 타임스탬프를 대체해야 합니다. 명시적이든 암시적이든 이러한 타임스탬프의 정확성은 MIDI 기반 시스템의 안정성 측면에서 중요합니다.

타임스탬프는 MIDI 1.0 프로토콜의 일부가 아니며, 종종 플랫폼별 API의 일부로 추가되기도 합니다. BLE 전송에는 하나의 BLE 패킷 내에서 전송되는 여러 개별 메시지의 시간을 나타내는 타임스탬프가 있습니다.

기기

주변기기는 컴퓨터의 입력/출력(I/O) 기능을 제공합니다. MIDI 주변기기MIDI 기기는 일반적으로 MIDI 프로토콜을 지원하는 하드웨어 또는 소프트웨어 모듈을 의미합니다. 이 문서 내에서 MIDI 주변기기는 물리적 항목을 의미하고, MIDI 기기는 실제로 MIDI를 구현하는 모듈을 나타냅니다.

포트

포트는 컴퓨터와 주변기기 간의 인터페이스 역할을 담당합니다.

MIDI 1.0은 5핀 DIN 소켓(암)을 포트로 사용합니다. 각 포트는 OUT(MIDI 데이터의 소스), IN(MIDI 데이터의 싱크) 또는 THRU(OUT으로 직접 라우팅되는 IN을 의미함)입니다.

USB 및 BLE와 같은 기타 전송을 통해 포트 개념이 확장됩니다.

MIDI 기기에는 OUT 포트, IN 포트가 1개 이상 있거나 두 포트가 모두 있습니다.

MIDI 기기는 각 OUT 포트에서 발신되는 메시지 스트림을 제공하며 각 IN 포트에 도착하는 메시지 스트림을 수신합니다. INOUT 용어는 당연히 하나의 포트와 관련이 있으며, 다른 포트의 관점에서는 용어가 반대로 적용됩니다.

연결

MIDI 1.0 전송에서는 전류 루프의 특성으로 인해 OUT 포트가 IN 또는 THRU 포트 최대 1개에만 연결됩니다. USB 및 BLE 전송에서는 최하위 레이어에서 이 사항이 동일하게 적용되지만, 다수의 IN 포트로 브로드캐스트되도록 구현에서 메시지 스트림을 다시 조정할 수 있습니다.

케이블

MIDI 1.0 케이블OUT 포트를 IN 또는 THRU 포트로 연결하는 실제 전선 번들입니다. 케이블은 데이터만 전송합니다.

참고: 미사용 핀 2개를 통해 전원을 공급하는 비표준 수정사항이 MIDI에 적용되었으며, 이를 팬텀 파워라고 합니다.

USB 케이블은 커넥터 유형이 매우 다양하다는 점을 제외하면 큰 차이가 없습니다. IN/OUT/THRU 개념은 호스트/주변기기 역할로 대체됩니다.

USB 호스트 모드에서 작동할 때 호스트 기기는 MIDI 주변기기에 전력을 공급합니다. 대부분의 소형 MIDI 주변기기는 1 USB 단위 부하(100mA) 이하를 사용합니다. 그러나 일부 대형 주변기기나 오디오 출력 또는 조명이 있는 주변기기는 호스트 기기에서 공급하는 것보다 더 많은 전력이 필요합니다. 문제가 발생하면 다른 MIDI 주변기기나 전력이 공급되는 USB 허브를 사용해 보시기 바랍니다.

채널

각 MIDI 메시지 스트림은 16개의 채널에서 멀티플렉스 처리됩니다. 메시지 대부분은 특정 채널을 대상으로 하지만, 채널이 지정되지 않은 메시지 유형도 있습니다. 일반적으로 채널은 1~16 사이의 번호가 매겨지지만, 0~15 사이의 채널 값으로 표현됩니다.

애플리케이션에 채널이 16개 이상 필요하거나 메시지 스트림 하나가 지원할 수 있는 수준보다 처리량이 더 높아야 하는 경우에는 포트를 여러 개 사용해야 합니다.

MIDI 1.0에서는 이를 위해 포트 쌍을 연결하는 케이블을 여러 개 사용합니다.

USB를 통한 MIDI 전송에서 단일 USB 엔드포인트는 각각 케이블 번호[sic]로 식별되는 여러 개의 포트를 지원할 수 있습니다. USB MIDI 사양에 따르면 케이블 번호는 엔드포인트 내의 가상 포트를 식별합니다.

참고:포트 번호는 포트를 식별하기 때문에 이 용어가 더 정확하다고 할 수 있습니다.

따라서 단일 USB 물리적 케이블은 16개 채널로 구성되는 세트를 두 개 이상 전달할 수 있습니다.

플랫폼 구현

소개 부분에서 언급했듯이, 이러한 일반적인 MIDI 개념은 모든 구현에 적용됩니다. Android 플랫폼상의 개념에 관한 자세한 내용은 android.media.midi를 위한 Android MIDI 사용자 가이드를 참고하세요.