언리얼 엔진의 미디

미디 데이터를 프로젝트에 스트리밍하는 방법을 살펴봅니다.

Choose your operating system:

Windows

macOS

Linux

미디 디바이스 지원

미디 디바이스 지원 플러그인 활성화

미디 디바이스 지원(MIDI Device Support) 플러그인은 미디(MIDI, Musical Instrument Digital Interface) 프로토콜 메시지를 주고 받을 수 있도록 해줍니다. 보통 언리얼 엔진과 미디 키보드 같은 외부 하드웨어 간의 커뮤니케이션에 가장 자주 사용됩니다. 하지만 미디는 데이터 프로토콜이기 때문에 메시지에서 파싱된 데이터를 사용하여 오디오 이외의 관련 파라미터를 구동할 수도 있습니다.

현재 언리얼 엔진은 스트리밍된 미디 데이터만 지원합니다. 미디 파일 읽기는 지원되지 않습니다.

미디란?

미디는 미디 메시지를 사용하는 서로 다른 오디오 하드웨어 디바이스 간의 커뮤니케이션을 위해 디자인된 데이터 프로토콜입니다. 미디 메시지는 메시지 타입을 포함한 바이트('상태' 바이트)로 시작하고 데이터 바이트가 뒤따릅니다.

예를 들어 가장 흔한 미디 메시지는 Note On 메시지인데, 이 메시지는 'Note On' 메시지라는 것을 나타내고 의도된 채널(0~15 값)과 커뮤니케이션을 수행하는 상태 바이트로 시작하여 그 뒤를 피치 데이터 바이트와 속도 데이터 바이트가 차례로 뒤따릅니다. 각 데이터 바이트의 최상위 비트는 데이터 바이트를 표시하는 데 사용되기 때문에 피치 및 속도 데이터는 0~127 사이의 값만 포함할 수 있습니다.

미디 프로토콜은 0~127의 피치 값을 Hz 같은 단위로 변환하는 방법처럼 데이터 바이트를 해석하는 방법을 지정하기도 합니다. 언리얼 엔진은 이 방식으로 미디 데이터를 직접 트랜슬레이션하지 않고 잠재적으로는 사용자가 미디 메시지를 사용하여 오디오 외의 비헤이비어를 구동할 수 있게 하는 반면, 사운드 유틸리티(Sound Utilities) 플러그인은 미디 데이터 변환을 수행하는 데 사용할 수 있는 다양한 함수가 포함되어 있습니다.

사운드 유틸리티 플러그인 활성화

워크플로

미디 출력

언리얼 엔진에서 미디 출력 기능을 사용하려면 다음 워크플로를 따릅니다.

  1. 미디 신호를 전송할 디바이스의 ID를 찾습니다. 방법은 다음과 같습니다.

    • 디폴트 미디 디바이스를 선택합니다.

    • 사용 가능한 모든 미디 디바이스에 대해 반복작업합니다.

    • 특정 미디 디바이스를 이름으로 찾습니다.

    관련 블루프린트 함수로는 Get Default MIDI Output Device ID , Find MIDI DevicesGet MIDI Output Device ID by Name 이 있습니다.

  2. 블루프린트 함수 Create MIDIDevice Output Controller 를 사용하여 MIDI Output UObject 를 생성하세요. 이 함수는 ID를 입력으로 취하여 미디 출력에 대한 참조를 반환하거나 미디 디바이스 연결에 실패한 경우 null 참조를 반환합니다.

    미디 디바이스 출력 컨트롤러를 변수에 캐시하는 것이 중요합니다. 그렇지 않으면 미디 컨트롤러가 예기치 않게 가비지 컬렉션될 위험이 있습니다.

  3. 미디 명령을 전송합니다. 이러한 명령은 MIDI 디바이스 출력 컨트롤러 에서 작동하는 미디 디바이스 매니저(MIDI Device Manager) 의 함수가 됩니다. 일반적으로 가장 자주 사용되는 함수는 Send MIDINote On , Send MIDINote OffSend MIDIPitch Bend 입니다.

  4. 미디 프로토콜에 좀 더 익숙하다면 Send MIDIEvent 를 활용하여 원시 미디 이벤트 데이터를 구성할 수도 있습니다.

미디 출력을 위한 기본 블루프린트 구현은 아래 이미지와 비슷하지만 전송할 미디 데이터에 따라서 보다 자세한 지침이 있을 수 있습니다.

기본 미디 출력 블루프린트

미디 입력

미디 입력 을 구성하려면 아래 설명된 워크플로를 따릅니다.

  1. 미디 입력 디바이스(MIDI Input Device) 구성을 구하여 변수에 캐시합니다. 출력 대신 입력 을 포함한다는 점만 제외하면 위에서 설명한 미디 출력 구성의 첫 두 단계와 거의 동일합니다.

  2. 미디 입력 디바이스에서 Assign To On MIDI Note On 과 같은 액션을 통해 관련된 미디 이벤트 에 대한 델리게이트에 등록합니다.

  3. 이러한 미디 이벤트의 결과 데이터를 사용하여 재생 중인 사운드의 피치 또는 속도 같은 프로젝트 파라미터를 구동합니다. 사운드 유틸리티 플러그인의 일부 함수는 미디(0~127)의 적분 데이터 포인트를 주파수 또는 볼륨 스칼라 같은 오디오 엔진에서 보다 쉽게 해석할 수 있는 단위로 트랜슬레이션할 수 있습니다.

  4. 좀 더 숙련된 사용자의 경우 변경 제어(Control Change) 메시지와 같은 미디 데이터의 해석 또는 오디오 컴포넌트(Audio Component) 여러 개를 사용하고 활성 음을 트래킹하여 폴리포니 음악 시스템을 생성하는 등의 실험을 해볼 수 있습니다.

기본적인 미디 입력 시스템 블루프린트 구현은 다음과 비슷할 수 있지만 들어오는 미디 데이터의 경우에는 좀 더 복잡할 수 있습니다.

기본 미디 입력 블루프린트

태그