iOS/iOS

음성 녹음, 재생

Brad_Heo 2023. 9. 4. 21:03

음성 녹음을 위한 AVAudioPlayerDelegate
음성 재생을 위한 AVAudioRecorderDelegate

class AudioRecorderManager: NSObject, ObservableObject, AVAudioPlayerDelegate, AVAudioRecorderDelegate {

    // 음성메모 녹음
    var audioRecorder: AVAudioRecorder = AVAudioRecorder()
    @Published var isRecording = false

    // 음성메모 재생
    var audioPlayer: AVAudioPlayer?
    @Published var isPlaying = false
    @Published var isPaused = false

    // 음성데이터
    @Published var recordedFiles = [URL]()

}

extension AudioRecorderManager {

    func startRecording() {
        let date = Date()
        let fileURL = getDocumentsDirectory().appendingPathComponent("recording-\(date).m4a")

        let setting = [
            AVFormatIDKey: Int(kAudioFormatMPEG4AAC),
            AVSampleRateKey: 12000,
            AVNumberOfChannelsKey: 1,
            AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue
        ]

        // .playAndRecord -> 스피커 
        do {
            try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
          } catch {
            print("audioSession error: \(error.localizedDescription)")
          }

        do {
            audioRecorder = try AVAudioRecorder(url: fileURL, settings: setting)
            audioRecorder.delegate = self
            audioRecorder.record()
            self.isRecording = true
        } catch {
            print("녹음 중 오류 발생: \(error.localizedDescription)")
        }
    }

    func stopRecording() {
        audioRecorder.stop()
        self.recordedFiles.append(self.audioRecorder.url)
        self.isRecording = false
    }

    private func getDocumentsDirectory() -> URL {
        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        return paths[0]
    }

}

try AVAudioSession.sharedInstance().setCategory(.playAndRecord)

안해줄시 스피커로 음성이 나오는 것이 아닌, 헤드폰(통화할 시 음성나오는곳)에서 나왔다.

스크린샷 2023-09-04 오후 8 58 03

필요한 옵션에 맞춰 설정하면 될 것 같다.

스크린샷 2023-09-04 오후 8 58 09

참고자료 https://green1229.tistory.com/400

'iOS > iOS' 카테고리의 다른 글

iOS) XCFramework 생성  (0) 2024.04.22
iOS) UIVisualEffectBackdropView 제거  (0) 2023.07.17
iOS) UIViewController  (0) 2022.12.06
iOS) 프레임워크와 라이브러리에 대해서  (0) 2022.10.19