음성 녹음을 위한 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)
안해줄시 스피커로 음성이 나오는 것이 아닌, 헤드폰(통화할 시 음성나오는곳)에서 나왔다.
필요한 옵션에 맞춰 설정하면 될 것 같다.
'iOS > iOS' 카테고리의 다른 글
iOS) Universal link (0) | 2024.12.12 |
---|---|
iOS) XCFramework 생성 (0) | 2024.04.22 |
iOS) UIVisualEffectBackdropView 제거 (0) | 2023.07.17 |
iOS) UIViewController (0) | 2022.12.06 |
iOS) 프레임워크와 라이브러리에 대해서 (0) | 2022.10.19 |