간단정리
- AVAudioSession : 기기의 오디오 장치를 어떤것을 사용할 것인지를 정의.
- AVPlayer : URL로 오디오 파일/ 영상 파일을 url이 있다면 url을 이용해서 재생할 수 있습니다. AVPlayer 자체는 영상을 재생하는 기능은 없지만, AVKit 또는 AVPlayerLayer를 이용하여 영상을 재생 시킬수있습니다.
- AVAudioPlayer : 로컬 파일로 저장된 오디오 파일을 재생시킵니다. 단순히 재생, 일시정지만 가능하고, 재생 위치이동, 음의 pitch, 재생 속도등을 제어하려면 AVAudioEngine을 사용해야합니다.
- AVAudioEngine : AVAudioPlayer과 마찬가지로 로컬파일로 저장된 오디오 파일을 재생합니다. 음의 pitch, 재생 위치, 재생 속도 등등을 제어 할 수 있습니다.
AVAudioEngine(이하 엔진)은 로컬 오디오 파일을 재생하는 player node, 재생중인 음원을 리얼타임으로 제어하는 Mixer node, 그리고 출력을 담당하는 output node로 이루어져있습니다. 또한 node를 연결하여 본인이 원하는 제어를 할 수 있습니다.
private let audioEngine = AVAudioEngine()
private let playerNode = AVAudioPlayerNode()
private var pitchControl = AVAudioUnitTimePitch()
audioEngine.attach(playerNode)
audioEngine.attach(pitchControl)
audioEngine.connect(playerNode, to: pitchControl, format: format)
audioEngine.connect(pitchControl, to: audioEngine.mainMixerNode, format: format)
self.audioEngine.prepare()
do{
try audioEngine.start()
setScheduleFile()
}catch{
print("AUDIO ENGINE START ERROR")
}
이런식으로 AVAudioEngine을 본인이 원하는 노드를 더해서 작동시키면 됩니다. 오디오 파일을 재생시키려면 playerNode에 오디오 파일을 넣어서 play를 하면 됩니다.
func setAudioFile(){
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
.appendingPathComponent("myRecoding.m4a")
guard let file = try? AVAudioFile(forReading: fileURL) else {return}
self.format = file.processingFormat
self.audioFile = file
}
playNode에 오디오 파일을 넣는 방법은 scheduleFile, scheduleSegment등이 있습니다. FileManager로 파일을 가져와 실행을 시키기 때문에 scheduleFile()로 예약을 해서 넣습니다.
func setScheduleFile(){
guard let file = audioFile else {return}
playerNode.scheduleFile(file, at: nil, completionCallbackType: .dataPlayedBack)
}
그리고 이제 play()를 누르면 재생이 됩니다.
playerNode.play()
'iOS > 앱 개발' 카테고리의 다른 글
swift ) 현재 시간을 기준으로 특정 시간과의 차이 계산하기 (0) | 2022.08.08 |
---|---|
IOS에서 POP, OOP 어떤것을 써야 하는가! 그것이 문제로다 (0) | 2022.08.05 |
swift 캡슐화, 은닉화 (0) | 2022.07.28 |
테이블뷰에서 NSCache 사용하기 (0) | 2022.07.21 |
AVAudioEngine으로 오디오 파일 재생시, 오디오 파일이 재생이 완료되면 다시 처음으로 돌아가게 하기. (0) | 2022.07.10 |