구현할 기능
고려할 사항
- 디바이스에서 소리를 재생하는 방법
- 디바이스에서 진동을 재생하는 방법
- 디바이스가 잠겨있는 상태에서 소리와 진동을 재생하는 방법
- 디바이스가 매너 모드일 경우에 소리를 재생하는 방법
디바이스에서 소리를 재생하는 방법 리서치
- 먼저 애플 공식문서에서 audio로 검색되는 프레임워크들 검색
- MediaPlayer
- 유저 미디어(애플뮤직)에서 무언가 찾아서 재생하는 방법
- MusicKit의 일부이다
- CoreAudio
- 오디오 하드웨어와 상호작용하기 위한 프레임워크
- 굉장히 로우 레벨 프레임워크같음.
- AVFoundation
- 시청각 에셋과 작업, 디바이스 카메라 조작, 오디오 처리, 시스템 오디오 상호작용 설정
- 파일에서 미디어 에셋 읽어서 재생 가능한 듯
- AVFAudio
- 오디오 재생, 녹음 및 처리; 앱의 시스템 오디오 동작 구성하기
- 소리 재생은 이 프레임워크가 적절해 보인다.
- AVKit
- 미디어 재생을 위한 유저 인터페이스 관련 프레임워크 (pip, 자막, 트랜스포트 컨트롤 등)
- Audio Toolbox
- 오디오 재생 및 녹음, 포맷 변환, 오디오 스트림 파싱, 오디오 세션 설정
- 얘도 재생 및 녹음이 있다.
- WWDC에서 audio로 영상 검색
- 딱히 관련있어 보이는 건 없음
- audio-haptic experience 디자인하는 영상 관심생김
- 시스템 알람 재생하고 싶어 시스템 사운드 재생 방법 리서치
- 이 방법으로 진행했지만, 원하는 벨소리는 시스템 사운드에 존재하지 않음
- 따라서 커스텀 벨소리 파일을 담고, 해당 파일을 재생하는 방법 리서치
- 파일 또는 버퍼에서 오디오 재생하는 AVAudioPlayer 좋아보임
- 볼륨 조정, 시작 / 정지 기능 모두 있어서 good
- 추가적인 조정 필요하면 AVAudioEngine 사용해야 하지만 거기까지는 필요 없음
- 적당한 벨소리 물색
- 딜라이트룸 다운받아서 살펴보기
- notification에 설정된 소리로 알람 기능 구현하는 듯?
- notification 기능이 켜져 있어야 제대로 동작하는 것 같음
푸시 알림을 통한 소리 재생 기능 구현
- 푸시 알림 동작시 소리 재생 가능
- 다만 배너가 사라지거나 사용자가 배너를 주시하여 디바이스가 사용자 시선을 감지해 화면을 계속 켜놓지 않는 이상 소리 재생은 5초정도만 가능
- 30초 미만의 소리 파일 적용 가능한데, 이 시간만큼 전부 재생되지가 않음 -> 반복적인 푸시 알림 필요
- interruption level -> 가장 높은 critical 설정을 통해 mute / 사용자 볼륨 bypass 가능
- 그런데 이는 특별한 entitlement가 필요하고, 애플에 요청해야 함 -> 스택 오버플로우 참고
- critical 설정으로도 소리 재생 시간이 늘어나는지는 확인 필요
영호 튜터님 의견
- critical entitlement는 거의 발급받을 수 없다고 보면 된다.
- 뭔가 다른 우회 방식이 있을 것 -> AVAudioSession은 음량 설정 가능
- 보통은 리모트 노티피케이션 씀. 로컬 노티피케이션은 잘 안 쓴다.