[ios] Core Audio 오디오 스트림 세팅

iOS 애플리케이션에서 Core Audio를 사용하여 오디오 스트림을 설정하는 방법에 대해 알아보겠습니다.

AVAudioSession 구성

일반적으로 AVAudioSession을 사용하여 오디오 입력 및 출력 디바이스를 구성합니다.

다음은 오디오 세션을 구성하는 예제입니다:

import AVFoundation

let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(.playAndRecord, mode: .default, options: [.defaultToSpeaker])
    try session.setActive(true)
} catch {
    // Handle error
}

이 코드에서 setCategory를 사용하여 애플리케이션의 오디오 사용 사례에 적합한 카테고리를 설정하고, .playAndRecord로 설정하여 오디오 재생과 녹음을 가능하게 합니다. setActive를 호출하여 세션을 활성화합니다.

Audio Unit 설정

Audio Unit은 오디오 입력 및 출력에 대한 저수준 제어를 제공합니다. 오디오 스트림을 설정하려면 Audio Component를 만들고 Audio Unit을 구성해야 합니다.

다음은 Remote I/O Audio Unit을 만들고 설정하는 예제입니다:

import AudioToolbox

var rioUnit: AudioComponentInstance? = nil

var cd = AudioComponentDescription(
    componentType: kAudioUnitType_Output,
    componentSubType: kAudioUnitSubType_RemoteIO,
    componentManufacturer: kAudioUnitManufacturer_Apple,
    componentFlags: 0,
    componentFlagsMask: 0
)
guard let component = AudioComponentFindNext(nil, &cd) else {
    // Handle error
    return
}

let status = AudioComponentInstanceNew(component, &rioUnit)
guard status == noErr else {
    // Handle error
    return
}

let bus = 1
var one: UInt32 = 1
var zero: UInt32 = 0

status = AudioUnitSetProperty(rioUnit,
                             kAudioOutputUnitProperty_EnableIO,
                             kAudioUnitScope_Input,
                             bus,
                             &one,
                             UInt32(MemoryLayout.size(ofValue: one)))

status =  AudioUnitSetProperty(rioUnit,
                              kAudioOutputUnitProperty_EnableIO,
                              kAudioUnitScope_Output,
                              bus,
                              &zero,
                              UInt32(MemoryLayout.size(ofValue: zero)))

// Audio Unit을 초기화하고 활성화하는 추가 단계가 필요합니다.

Audio Unit을 초기화하고 활성화하는 추가 단계를 위해서는 해당 문서와 자료를 참고하시기 바랍니다.

정리

Core Audio를 사용하여 iOS 애플리케이션에서 오디오 스트림을 설정하는 방법에 대해 알아보았습니다. AVAudioSession을 사용하여 오디오 세션을 구성하고, Audio Unit을 설정하여 저수준의 오디오 처리를 수행할 수 있습니다.

더 자세한 정보는 Apple Developer Documentation를 참고하십시오.

참고 자료: