๊ฐ์
AVFoundation
์ ์ด์ฉํด์ ์ค๋์ค๋ฅผ ๋
น์, ์ฌ์, ์ ์ฅํด๋ณด์.
์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ ์ ๋จผ์ AVFoundation
์์ ์ค์์ ์ธ ๊ฐ์ง ํด๋์ค๋ฅผ ์ดํด๋ณธ๋ค.
AVAudioSession
AVAudioRecorder
AVAudioPlayer
AVAudioSession
class AVAudioSession: NSObject
An audio session acts as an intermediary between your app and the operating system—and, in turn, the underlying audio hardware.
์ค๋์ค ์ธ์ ์ ์ฑ๊ณผ ์ด์ ์ฒด์ ์ฌ์ด์ ์ค๊ฐ์ ์ญํ ์ ํ๋ฉฐ ๊ธฐ๋ณธ ์ค๋์ค ํ๋์จ์ด ์ญํ ๋ ํฉ๋๋ค.
๋ชจ๋ iOS, tvOS, watchOS ์ฑ์๋ ๋ค์ ๋์์ผ๋ก ๋ฏธ๋ฆฌ ๊ตฌ์ฑ๋ ๊ธฐ๋ณธ ์ค๋์ค ์ธ์ ์ด ์๋ค.
- ์ค๋์ค ์ฌ์์ ์ง์ํ์ง๋ง ์ค๋์ค ๋ น์์ ํ์ฉํ์ง ์๋๋ค. (tvOS๋ ์ค๋์ค ๋ น์์ ์ง์ํ์ง ์๋๋ค.)
- iOS์์ ๋ฒจ์๋ฆฌ/๋ฌด์ ์ค์์น๋ฅผ ๋ฌด์ ๋ชจ๋๋ก ์ค์ ํ๋ฉด ์ฑ์์ ์ฌ์์ค์ธ ๋ชจ๋ ์ค๋์ค๊ฐ ๋ฌด์์ผ๋ก ์ค์ ๋๋ค.
- iOS์์ ๊ธฐ๊ธฐ๋ฅผ ์ ๊ทธ๋ฉด ์ฑ์ ์ค๋์ค๊ฐ ์์๊ฑฐ๋๋ค.
- ์ฑ์์ ์ค๋์ค๋ฅผ ์ฌ์ํ๋ฉด ๋ค๋ฅธ ๋ฐฐ๊ฒฝ ์ค๋์ค๋ ์์๊ฑฐ๋๋ค.
์ด๋ฌํ ๊ธฐ๋ณธ ๋์์ ๋ณ๊ฒฝํ๋ ค๋ฉด ์ฑ์ ์ค๋์ค ์ธ์
์นดํ
๊ณ ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ฉด ๋๋ค. ์ฌ์ฉํ ์ ์๋ ์นดํ
๊ณ ๋ฆฌ๋ 7๊ฐ์ง์ด๊ณ , ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ์นดํ
๊ณ ๋ฆฌ๋ playback
์ด๋ค. ์ด ์นดํ
๊ณ ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌด์ ๋ชจ๋๋ก ์ค์ ๋ ์ํ์์๋ ์ฑ์ ์ค๋์ค๋ฅผ ์ฌ์ํ ์๋ ์๋ค. ์ฐธ๊ณ
AVAudioSession
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ์ฑ์ ์ค๋์ค ์ธ์
์ ๊ตฌ์ฑํ๋ค. ์ด ํด๋์ค๋ ์นดํ
๊ณ ๋ฆฌ, ๋ชจ๋, ๊ธฐํ ๊ตฌ์ฑ์ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ฑ๊ธํค ๊ฐ์ฒด์ด๋ค. ์ฑ์ ์๋ช
์ฃผ๊ธฐ ๋์ ์ค๋์ค ์ธ์
๊ณผ ์ํธ์์ฉํ ์ ์์ง๋ง, ์ฑ์ด ์์๋ ๋ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ ์ฉํ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ดํ, setActive(_:)
๋๋ setActive(_:options:)
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ํ์ฑํํ๋ฉด ์์์ ๊ตฌ์ฑํ ์ค์ ์ด ์ ์ฉ๋๋ค.
AVAudioRecorder
class AVAudioRecorder: NSObject
์ค๋์ค ๋ ์ฝ๋๋ฅผ ์ด์ฉํด ๋ค์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๋ค.
- ์์คํ ์ ํ์ฑ ์ ๋ ฅ ์ฅ์น์์ ์ค๋์ค ๋ น์
- ์ง์ ๋ ๊ธฐ๊ฐ ๋๋ ์ฌ์ฉ์๊ฐ ๋ น์์ ์ค์งํ ๋ ๊น์ง ๋ น์
- ๋ น์ ์ผ์ ์ค์ง ๋ฐ ๋ค์ ์์
- Access recording-level metering data
iOS ๋๋ tvOS์์ ์ค๋์ค๋ฅผ ๋ น์ํ๋ ค๋ฉด ์ค๋์ค ์ธ์ ์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ record ๋๋ playAndRecord๋ก ๊ตฌ์ฑํด์ผ ํ๋ค.
AVAudioPlayer
class AVAudioPlayer: NSObject
์ค๋์ค ํ๋ ์ด์ด๋ฅผ ์ด์ฉํด ๋ค์ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ ์๋ค.
- ํ์ผ ๋๋ ๋ฒํผ์์ ๋ชจ๋ ๊ธธ์ด์ ์ค๋์ค ์ฌ์
- ์ฌ์๋๋ ์ค๋์ค์ ๋ณผ๋ฅจ, ํจ๋, ์๋ ๋ฐ ๋ฐ๋ณต ๋์ ์ ์ด
- Access recording-level metering data
- ์ฌ๋ฌ ํ๋ ์ด์ด์ ์ฌ์์ ๋๊ธฐํํ์ฌ ์ฌ๋ฌ ์ฌ์ด๋๋ฅผ ๋์์ ์ฌ์
iOS ๋๋ tvOS์์ ์ค๋์ค๋ฅผ ์ฌ์ํ๋ ค๋ฉด Configuring the Audio Playback of iOS and tvOS Apps๋ฅผ ์ฐธ๊ณ ํ๋ค.
→ ์์ฝํ์๋ฉด
- ๋๋ถ๋ถ์ ๋ฏธ๋์ด ์ฌ์ ์ฑ์๋
playback
์นดํ ๊ณ ๋ฆฌ๋ก ์ค์ ํ๋ฉด ๋๋ค. - ๊ทธ ๋ฐ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ค๋์ค๋ฅผ ํ์ฑํํ๋ ค๋ฉด ๋ค์์ฒ๋ผ ์ค์ ํ๋ฉด ๋๋ค.
- Xcode์์
ํ๋ก์ ํธ.xcodeproj
์ ํ Signing & Capabilities
ํญ์์Capability
์ถ๊ฐ ์ ํBackground Mode
์ถ๊ฐAudio, AirPlay, and Picture in Picture
์ฒดํฌ
- Xcode์์
์ฌ์ฉ์์๊ฒ ๋ น์ ๊ถํ ์์ฒญํ๊ธฐ
์ค์ํ ์์๋ฅผ ๋ชจ๋ ์ดํด๋ณด์์ผ๋, ์ค์ ๋ก ๋์ํ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ณด์. AVAudioSession
์ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ๋์์๋ฏ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋
น์์ ํ์ฉํ์ง ์๋๋ค. ์๋ํ๋ฉด ๋
น์ ๊ธฐ๋ฅ์ ๊ฐ์ธ์ ๋ณด์ ํฌํจ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ ๋
น์์ ํ๋ ค๋ฉด ๋จผ์ ์ฌ์ฉ์์๊ฒ ๋ง์ดํฌ ์ฌ์ฉ ๊ถํ์ ์์ฒญํด์ผ ํ๋ค.
Info.plist
์ ์์ ๊ฐ์ด ์ถ๊ฐํ๋ค. ์ฌ์ฉ์์๊ฒ ์ ๋ง์ดํฌ ๊ถํ์ด ํ์ํ ์ง ์ค๋ช
์ ํด์ผ ํ๋ค.
์ด์ ์ฌ์ฉ์์๊ฒ ๊ถํ ์์ฒญํ๋ ๋ฉ์๋๋ฅผ ์์ฑํด๋ณด์. ๊ถํ์ ์์ฒญํ ๋ ์ธ ๊ฐ์ง ์ํฉ์ด ์๋ค.
- ํ ๋ฒ๋ ์ฌ์ฉ์์๊ฒ ๋ น์ ๊ถํ์ ์์ฒญํ์ง ์์ ๊ฒฝ์ฐ
- ์ฌ์ฉ์์๊ฒ ๋ น์ ๊ถํ์ ๊ฑฐ๋ถ๋นํ ๊ฒฝ์ฐ
- ์ฌ์ฉ์์๊ฒ ๋ น์ ๊ถํ์ ํ์ฉ๋ฐ์ ๊ฒฝ์ฐ
๊ถํ ์์ฒญ์ ๋น๋๊ธฐ๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ completionHandler
๋ฅผ ์ด์ฉํ๋ค.
requestMicrophoneAccess()
๋ viewWillAppear(_:)
์์ ํธ์ถํด์ ์ฌ์ฉํ๋ค. Alert
์ ๋์ฐ์ง ์์ ๊ฑฐ๋ผ๋ฉด viewDidLoad(_:)
์์ ํธ์ถํด๋ ๋ฌด๊ดํ๋ค.
๊ณ ๋ฏผ์ธ ์ ์, ์ฌ์ฉ์์๊ฒ ๋ น์ ๊ถํ์ ๊ฑฐ๋ถ๋นํ์ ๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ค์ ํ๋ฉด์์ ๊ถํ ํ์ฉ์ ํ๊ฒ๋ ์ ๋ํ๋ ๋ถ๋ถ์ด๋ค. ์ฑ์ผ๋ก ๋ค์ ๋์์์ ๋ ๊ถํ์ ํ์ฉํ๋์ง ์๊ณ ์ถ์๋ฐ, ์ด ๋ถ๋ถ์ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ ์ง ๋ชจ๋ฅด๊ฒ ์ด์ ๋ค๋ฅธ ๋ถ๊ป ์ฌ์ญค๋ดค๋ค. ์ฑ์ ์๋ช ์ฃผ๊ธฐ ์ค์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ํฌ๊ทธ๋ผ์ด๋๋ก ์ฌ ๋ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ์ จ๋ค.
๊ทธ๋ฐ๋ฐ ์ฑ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์ด์ฉํ์ง ์๊ณ Observable
๋ก ๋ง๋ค์ด์ ๊ด์ฐฐํ๋ฉด ๋์ง ์์๊น? ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ๋น์ทํ ์๊ฐ์ ํ ์ฌ๋์ด ์์๋ ๋ชจ์์ธ์ง, RxPermission
์ด๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์๋ค. (ํ์ฌ๋ deprecated)
์์ง๊น์ง ์ด ๋ถ๋ถ์ ์ฐ์ ์์์ ๋ฐ๋ ค์ ๊ตฌํํ์ง ๋ชปํ๊ณ ์๋๋ฐ, ๊ตณ์ด Rx๋ฅผ ์ฐ์ง ์์๋ NotificationCenter
๋ฅผ ์ด์ฉํด์ ๊ตฌํํ ์ ์์ ๊ฑฐ ๊ฐ๋ค.
์ค๋์ค ๋ น์, ์ ์ฅํ๊ธฐ
์๋ฌดํผ ์์ ๋จ๊ณ์์ ์ฌ์ฉ์์๊ฒ ๊ถํ์ ํ๊ฐ๋ฐ์๋ค๋ฉด ๋
น์์ ํ ์ ์๋ค. ๋
น์์ ํ๋ ค๋ฉด AVAudioRecorder
๋ฅผ ์ฌ์ฉํ๋ค. AVAudioSession
์ฒ๋ผ ์ฑ๊ธํค ๊ฐ์ฒด๊ฐ ์์ง ์๊ณ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ๋ค. ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋ [String: Any]
์ ์ค์ ๊ฐ์ ๋ด์์ ์์ฑํ ์ ์๋ค.
AVAudioRecorder
๋ฅผ ์ด๊ธฐํ๊น์ง ํ๊ณ ๋๋ฉด ๋์ด๋ค. ์ด์ ๋
น์ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ , ๋ฒํผ๊ณผ ์ฐ๊ฒฐํด์ฃผ๋ฉด ๋๋ค.
์ฌ์ฉ์๊ฐ ๊ถํ์ ํ์ฉํ๊ณ && ๋ น์ ๋ฒํผ์ ํญ ํ๋ค๋ฉด
- ๋ น์์ ํ๊ณ ์์ง ์์ผ๋ฉด ๋ น์์ ์์ํ๋ค.
- ๋ น์์ ํ๊ณ ์๋ค๋ฉด ๋ น์์ ์ ์งํ๋ค.
์ค๋์ค ์ฌ์ํ๊ธฐ
๋
น์ ์ค์ผ ๋๋ ์ฌ์์ ํ ์ ์์ผ๋(ํ์ผ์ด ์ ์ฅ๋์ง ์์์ผ๋ฏ๋ก), ํ์ธํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. delegate
๋ ์ค๋์ค ์ฌ์์ด ๋๋ฌ์ ๋ ๋์์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฒ์ด๋ค.
์ ์ฒด ์ฝ๋๋ jwonyLee/iOSExamples์ ์๋ค.