[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 컨트롤러와의 상호 작용을 추가하는 데 유용합니다.