티스토리 뷰
[ 배경 지식 ]
AVAudioSession
AVAudioSession 은 앱과 시스템의 중개자로서 오디오를 사용하는 방법을 시스템에게 전달하는 객체입니다.
Default Audio Session은 기본 동작은 제공하지만 media app에서 필요한 오디오 동작들까지는 제공하지 않습니다.
앱의 audio session category 를 설정해줌으로서 기본 동작을 바꿀 수 있습니다.
category 종류로는 7가지가 있습니다. (참고: Audio Session Categories and Modes)
재생 앱이 가장 많이 사용하는 category는 playback 입니다. (녹음된 음악 또는 기타 사운드를 재생하는 카테고리 / 기본 nonmixable 옵션)
이 카테고리는 오디오 재생이 앱의 중앙 기능임을 나타냅니다.
이 카테고리를 지정하면, Ring/Silent 스위치가 자동 모드로 설정된 상태에서도 앱의 오디오가 계속됩니다 (iOS only)
이 카테고리로 background audio 를 재생시킬 수 도 있습니다. (Enabling Background Audio 를 했을 시)
이 configuration은 예제 코드처럼 앱이 런치될 때 해주는 게 좋습니다.
너가 setActive(_:) or setActive(_:options:) method 를 통해서 session을 activate 시켜줬을 때,
audio session은 이 configuration을 사용하게 됩니다.
[ TTS를 백그라운드 모드에서도 재생하기 ]
두단계만 해주면 끝!
프로젝트 세팅의 Background Modes > Audio ~~ 를 켜줍니다.
2. Configure AVAudioSession
AppDelegate > didFinishLaunchingWithOptions 에서 아래 코드를 추가해줍니다.
(두번째 라인 setActivate를 안해줘도 configuration이 잘 적용되는 것 같음)
try? AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
try? AVAudioSession.sharedInstance().setActive(true)
+ 주의사항
iOS 13부터 usesApplicationAudioSession 가 추가되었습니다.
AVSpeechSynthesizer는 Default Audio Session ( 코드로 하면 AVAudioSession.sharedInstance() ) 을 사용하는데,
이것을 false로 해주면 이를 안쓰고 separate audio session 을 사용하게 됩니다.
if #available(iOS 13.0, *) {
self.synthesizer.usesApplicationAudioSession = false
}
[ Control Center에서 background audio 제어할 수 있게 하기 ]
background audio를 지원한다면 Control Center에서 이를 제어할 수 있게 해주면 좋습니다.
Controlling Background Audio 문서를 보고 테스트하면 됩니다.
두 곳을 봐주면 됩니다.
- 왼쪽 사진 : (이름 모름) 에서 Control Center
- 오른쪽 사진 : iOS LockScreen 에서 Control Center
'🍏 > iOS' 카테고리의 다른 글
[iOS] backIndicatorTransitionMaskImage (0) | 2021.08.18 |
---|---|
[iOS] Single CollectionViewCell을 왼쪽 정렬(left align) 하기 (1) | 2021.08.12 |
[iOS] Xcode 별 Swift 버전 확인하기 (0) | 2021.08.04 |
[iOS] iPad에서 Keyboard Navigation 으로 포커스 이동하기 (2) | 2021.07.08 |
[iOS] DateFormat > Hour > hh / h / HH / H 차이 (0) | 2021.07.05 |
- Total
- Today
- Yesterday
- Watch App for iOS App vs Watch App
- Flutter Spacer
- Flutter getter setter
- Flutter Text Gradient
- drf custom error
- github actions
- 구글 Geocoding API
- flutter 앱 출시
- flutter deep link
- 플러터 싱글톤
- DRF APIException
- flutter dynamic link
- Django FCM
- 플러터 얼럿
- flutter build mode
- SerializerMethodField
- Sketch 누끼
- Flutter 로딩
- Python Type Hint
- Flutter Clipboard
- Django Firebase Cloud Messaging
- METAL
- Django Heroku Scheduler
- cocoapod
- 장고 Custom Management Command
- ribs
- PencilKit
- ipad multitasking
- 장고 URL querystring
- Dart Factory
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |