MIDI 디바이스 지원
MIDI 디바이스 지원(MIDI Device Support) 플러그인은 MIDI(Musical Instrument Digital Interface) 프로토콜 메시지를 주고 받을 수 있도록 해 줍니다. 보통 언리얼 엔진과 MIDI 키보드 같은 외부 하드웨어 간의 커뮤니케이션에 가장 자주 사용됩니다. 하지만 MIDI는 데이터 프로토콜이기 때문에 메시지에서 파싱된 데이터를 사용하여 오디오 이외의 관련 파라미터를 구동할 수도 있습니다.
현재 언리얼 엔진은 스트리밍되는 MIDI 데이터만 지원합니다. MIDI 파일 읽기는 지원되지 않습니다.
MIDI란?
MIDI는 MIDI 메시지를 사용하는 서로 다른 오디오 하드웨어 디바이스 간의 커뮤니케이션을 위해 디자인된 데이터 프로토콜입니다. MIDI 메시지는 메시지 타입을 포함한 바이트('상태' 바이트)로 시작하고 데이터 바이트가 뒤따릅니다.
예를 들어 가장 흔한 MIDI 메시지는 Note On 메시지인데, 이 메시지는 'Note On' 메시지라는 것을 나타내고 의도된 채널(0~15 값)과 커뮤니케이션을 수행하는 상태 바이트로 시작하여 그 뒤를 피치 데이터 바이트와 속도 데이터 바이트가 차례로 뒤따릅니다. 각 데이터 바이트의 최상위 비트는 데이터 바이트를 표시하는 데 사용되기 때문에 피치 및 속도 데이터는 0~127 사이의 값만 포함할 수 있습니다.
MIDI 프로토콜은 0~127의 피치 값을 Hz 같은 유닛으로 변환하는 방법처럼 데이터 바이트를 해석하는 방법을 지정하기도 합니다. 언리얼 엔진은 이 방식으로 MIDI 데이터를 직접 트랜슬레이션하지 않고 잠재적으로는 사용자가 MIDI 메시지를 사용하여 오디오 외의 행동을 구동할 수 있게 하는 반면, 사운드 유틸리티(Sound Utilities) 플러그인은 MIDI 데이터 변환을 수행하는 데 사용할 수 있는 다양한 함수가 포함되어 있습니다.
워크플로
MIDI 출력
언리얼 엔진에서 MIDI 출력 기능을 사용하려면 다음 워크플로를 따릅니다.
-
MIDI 신호를 전송할 디바이스의 ID를 찾습니다. 방법은 다음과 같습니다.
-
디폴트 MIDI 디바이스를 선택합니다.
-
사용 가능한 모든 MIDI 디바이스에 대해 반복작업합니다.
-
특정 MIDI 디바이스를 이름으로 찾습니다.
관련 블루프린트 함수로는 Get Default MIDI Output Device ID, Find MIDI Devices 및 Get MIDI Output Device ID by Name 이 있습니다.
-
-
블루프린트 함수 Create MIDIDevice Output Controller 를 사용하여 MIDI Output UObject 를 생성하세요. 이 함수는 ID를 입력으로 취하여 MIDI 출력에 대한 레퍼런스를 반환하거나 MIDI 디바이스 연결에 실패한 경우 null 레퍼런스를 반환합니다.
MIDI 디바이스 출력 컨트롤러를 변수에 캐시하는 것이 중요합니다. 그렇지 않으면 MIDI 컨트롤러가 예기치 않게 가비지 컬렉션될 위험이 있습니다.
-
MIDI 명령을 전송합니다. 이러한 명령은 MIDI 디바이스 출력 컨트롤러 에서 작동하는 MIDI 디바이스 매니저(MIDI Device Manager) 의 함수가 됩니다. 일반적으로 가장 자주 사용되는 함수는 Send MIDINote On, Send MIDINote Off 및 Send MIDIPitch Bend 입니다.
-
MIDI 프로토콜에 좀 더 익숙하다면 Send MIDIEvent 를 활용하여 원시 MIDI 이벤트 데이터를 구성할 수도 있습니다.
MIDI 출력을 위한 기본 블루프린트 구현은 아래 이미지와 비슷하지만 전송할 MIDI 데이터에 따라서 보다 자세한 지침이 있을 수 있습니다.
MIDI 입력
MIDI 입력 을 구성하려면 아래 설명된 워크플로를 따릅니다.
-
MIDI 입력 디바이스(MIDI Input Device) 구성을 구하여 변수에 캐시합니다. 출력 대신 입력 을 포함한다는 점만 제외하면 위에서 설명한 MIDI 출력 구성의 첫 두 단계와 거의 동일합니다.
-
MIDI 입력 디바이스에서 Assign To On MIDI Note On 과 같은 액션을 통해 관련된 MIDI 이벤트 에 대한 델리게이트에 등록합니다.
-
이러한 MIDI 이벤트의 결과 데이터를 사용하여 재생 중인 사운드의 피치 또는 속도 같은 프로젝트 파라미터를 구동합니다. 사운드 유틸리티 플러그인의 일부 함수는 MIDI(0~127)의 적분 데이터 포인트를 주파수 또는 볼륨 스칼라 같은 오디오 엔진에서 보다 쉽게 해석할 수 있는 단위로 변환할 수 있습니다.
-
좀 더 숙련된 사용자의 경우 변경 제어(Control Change) 메시지와 같은 MIDI 데이터의 해석 또는 오디오 컴포넌트(Audio Component) 여러 개를 사용하고 활성 음을 트래킹하여 폴리포니 음악 시스템을 생성하는 등의 실험을 해볼 수 있습니다.
기본적인 MIDI 입력 시스템 블루프린트 구현은 다음과 비슷할 수 있지만 들어오는 MIDI 데이터의 경우에는 좀 더 복잡할 수 있습니다.
