[swift] 로컬 파일을 이용한 사운드 녹음하기

iOS 애플리케이션을 개발하다 보면 가끔은 사용자가 음성을 녹음하여 저장해야 하는 경우가 있습니다. 이때 가장 흔히 사용하는 방법은 로컬 파일을 이용해서 사운드를 녹음하고 저장하는 것입니다. Swift 언어를 사용하여 로컬 파일을 이용한 사운드 녹음 방법에 대해 알아보겠습니다.

AVAudioRecorder 사용하기

AVAudioRecorder는 iOS에서 사운드를 녹음하기 위한 클래스입니다. 먼저 AVAudioSession을 설정해야 합니다. AVAudioSession은 오디오 세션의 구성과 제어를 담당합니다.

import AVFoundation

func setupAudioSession() {
    let session = AVAudioSession.sharedInstance()
    
    do {
        try session.setCategory(.playAndRecord, mode: .default, options: [])
        try session.setActive(true)
    } catch {
        print("Failed to set up audio session: \(error)")
    }
}

위의 예제에서는 AVAudioSession을 초기화한 후, 카테고리를 .playAndRecord로 설정하고, 활성화 시킵니다. .playAndRecord 카테고리는 음악 재생과 동시에 오디오를 녹음할 수 있는 카테고리입니다.

import AVFoundation

func startRecording() {
    let audioFilename = getDocumentsDirectory().appendingPathComponent("recording.m4a")
    let settings = [
        AVFormatIDKey: Int(kAudioFormatMPEG4AAC), // 사운드 포맷 설정
        AVSampleRateKey: 44100, // 샘플 레이트 설정
        AVNumberOfChannelsKey: 1, // 채널 개수 설정
        AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue // 오디오 품질 설정
    ]
    
    do {
        let audioSession = AVAudioSession.sharedInstance()
        try audioSession.setCategory(.playAndRecord, mode: .default, options: [])
        try audioSession.setActive(true)
        
        let recorder = try AVAudioRecorder(url: audioFilename, settings: settings)
        recorder.record()
    } catch {
        print("Failed to start recording: \(error)")
    }
}

위의 예제에서는 startRecording() 함수를 정의하여 사운드 녹음을 시작합니다. getDocumentsDirectory() 함수는 녹음된 파일의 경로를 반환합니다. 녹음할 파일의 설정은 settings 변수에 딕셔너리 형태로 저장되어 있으며, 여기서는 AAC 포맷을 사용하고, 44100 샘플 레이트, 단일 채널, 고음질로 설정되어 있습니다.

이제, AVAudioRecorder(url:settings:) 생성자를 사용하여 AVAudioRecorder 객체를 생성하고, record() 메서드를 호출하여 녹음을 시작합니다.

이제, startRecording()을 호출하면 앱에서 사운드 녹음이 시작됩니다.

사운드 녹음 중지하기

사운드 녹음을 중지하기 위해서는 stop() 메서드를 호출하면 됩니다.

func stopRecording() {
    let audioSession = AVAudioSession.sharedInstance()
    
    do {
        try audioSession.setActive(false)
    } catch {
        print("Failed to stop recording: \(error)")
    }
}

위의 예제에서는 stopRecording() 함수를 정의하여 사운드 녹음을 중지합니다. 녹음 중지 이후에는 반드시 setActive(false)를 호출해야 합니다.

결론

iOS 애플리케이션에서 로컬 파일을 이용하여 사운드를 녹음하는 방법에 대해 알아보았습니다. AVAudioRecorder를 사용하여 사운드 녹음을 시작하고 중지할 수 있습니다. 이를 활용하여 애플리케이션에서 음성 기능을 구현할 수 있습니다.

더 자세한 내용은 AVAudioRecorder 문서를 참고하시기 바랍니다.