[swift] AudioUnit의 MIDI 입력과 출력

개요

이번에는 AudioUnit을 사용하여 MIDI 데이터를 입력하고 출력하는 방법에 대해 알아보겠습니다. MIDI 입력을 통해 외부 장치에서 MIDI 이벤트를 받고, MIDI 출력을 통해 생성된 MIDI 이벤트를 외부 장치로 보낼 수 있습니다.

MIDI 입력

MIDI 입력 장치 설정

MIDI 입력을 사용하려면 AudioComponentInstance에서 MIDI 입력을 사용할 수 있도록 설정해야 합니다.

let desc = AudioComponentDescription(
    componentType: kAudioUnitType_MusicDevice,
    componentSubType: kAudioUnitSubType_DLSSynth,
    componentManufacturer: kAudioUnitManufacturer_Apple,
    componentFlags: 0,
    componentFlagsMask: 0
)

var synthUnit: AudioComponentInstance?
let status = AudioComponentInstanceNew(desc, &synthUnit)

이벤트 수신

MIDI 입력에서 MIDI 이벤트를 받으려면 MusicDeviceMIDIEvent 함수를 사용하여 처리할 수 있습니다.

let status = MusicDeviceMIDIEvent(synthUnit, status, data1, data2, 0)

MIDI 출력

이벤트 생성

MIDI 이벤트를 생성하려면 MIDIPacketListAdd 함수를 사용하여 MIDI 이벤트를 생성할 수 있습니다.

var packet = MIDIPacket()
packet.timeStamp = 0
packet.length = 3
packet.data.0 = 0x90
packet.data.1 = 60
packet.data.2 = 100
MIDIPacketListAdd(packetList, 1024, &packet, 0, 3)

MIDI 출력 장치 설정

MIDI 출력을 사용하려면 AudioComponentInstance에서 MIDI 출력을 사용할 수 있도록 설정해야 합니다.

let desc = AudioComponentDescription(
    componentType: kAudioUnitType_MusicDevice,
    componentSubType: kAudioUnitSubType_DLSSynth,
    componentManufacturer: kAudioUnitManufacturer_Apple,
    componentFlags: 0,
    componentFlagsMask: 0
)

var synthUnit: AudioComponentInstance?
let status = AudioComponentInstanceNew(desc, &synthUnit)

결론

이렇게하면 AudioUnit을 사용하여 MIDI 데이터를 입력하고 출력할 수 있습니다. MIDI 입력을 통해 외부 장치에서 MIDI 이벤트를 받고, MIDI 출력을 통해 생성된 MIDI 이벤트를 외부 장치로 보낼 수 있습니다. MIDI 데이터의 입력 및 출력은 음악 애플리케이션 및 MIDI 컨트롤러와의 상호 작용을 추가하는 데 유용합니다.

참고 자료