logo

English

이곳의 프로그래밍관련 정보와 소스는 마음대로 활용하셔도 좋습니다. 다만 쓰시기 전에 통보 정도는 해주시는 것이 예의 일것 같습니다. 질문이나 오류 수정은 siseong@gmail.com 으로 주세요. 감사합니다.

[iOS] Audio Session Setting

by digipine posted Nov 26, 2021
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

Category / Mode / CategoryOptions 세 가지 범주를 소개하겠다. OS에게 앱에서 오디오를 어떻게 쓸지 알려주기 위한 방법들이며, 새로이 설정할 때에는 명시적으로 오디오세션을 deactive 후 다시 active 해주어야 한다. 주요한 것들 위주로 간단히 설명하겠다.

 

Category

경험 상 많이 쓰이는 것들

  • playback: 무음모드일때도 소리 남
  • playAndRecord: 녹음과 재생 같이 쓸 때 사용. 소리 input 필요할때 쓴다. 무음모드일때도 소리 남
  • 위 카테고리 2개는 default가 noxmixable이며 (다른 앱과 소리 동시에 들리지 않음) 옵션을 통해 mixable하게 만들 수 있다

그 외의 것들

  • ambient: for play along. mixable. 무음모드일 때 소리 안 남
  • soloAmbient: default. nonmixable. 무음모드일 때 소리 안 남
  • record: 오디오 녹음만을 위함 (재생 불가)
  • multiRoute: 여러 루트로 오디오 출력 시 사용

아래는 간단한 비교 테이블이다. 원하는 스펙을 찾아 사용하면 된다.

 

Category 폰 무음모드 or Lock 상태에서 다른 앱 오디오와 상호작용 input(recording)/output(playback)
ambient play X mix output only
soloAmbient play X interrupt output only
playback play O interrupt (옵션 추가로 mix 가능) output only
record record O interrupt input only
playAndRecord play O record O interrupt (옵션 추가로 mix 가능) input & output
multiRoute play O interrupt input & output

 

Mode

경험 상 많이 쓰이는 것들

  • default: 웬만하면 이걸로 하면 된다
  • moviePlayback: 영상 재생 시
  • videoRecording: 영상 녹화 시
  • spokenAudio: for continuous spoken audio. (ex) 팟캐스트 앱은 이 모드를 사용
  • voicePrompt: 카플레이 등을 위한 모드. for text-to-speech
    • (추천 호환 옵션: duckOthers & interruptSpokenAudioAndMixWithOthers)

참고사항

  • Category와 Mode가 호환이 안 되는 쌍이 존재함. 그럴 때는 setting 이 아예 실패하므로 주의
    • (ex) videoRecording은 record, playAndRecord 카테고리가 아니면 사용할 수 없다
    • (ex) playAndRecord + .voicePrompt 는 같이 사용할 수 없다

 

CategoryOptions

경험 상 많이 쓰이는 것들

  • mixWithOthers: 다른 앱의 소리와 우리 앱 소리가 함께 들릴 수 있게 하는 옵션.
  • duckOthers: mixWithOthers 를 기본으로 채택하면서 +우리 앱에서 소리가 날 때는 다른 앱 소리를 살짝 죽이는 옵션.
  • interruptSpokenAudioAndMixWithOthers: mixWithOthers를 기본으로 채택하면서 + 다른 앱에서 spokenAudio 가 출력될 때에만 interrupt 걸고 우리 앱이 소리를 독차지 (*라디오, 팟캐스트 등을 생각하면 됨)
    • <참고> duckOthers와 함께 사용하게 되면 다른 앱에서 Media 종류의 Audio 를 재생할때는 duckOthers 의 설정을 따르고, 다른 앱에서 spokenAudio가 출력되고 있을 때에만 우리 앱이 interrupt 를 걸어버린다
  • allowBluetoothA2DP: 블루투스 디바이스 지원을 위한 옵션
    • playback 카테고리에서는 기본제공이지만 playAndRecord 카테고리에서는 기본이 아니기 때문에 따로 셋팅해주어야 함
  • defaultToSpeaker: 연결된 오디오 receiver가 따로 있을때(ex: 아이폰 built-in receiver, 이어폰, 카오디오 등), 그쪽이 아닌 폰 speaker로 오디오를 전달하게 해주는 옵션
    • playAndRecord 카테고리에서만 유효한 옵션
    • 이 옵션과 같은 역할을 하는 AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker) 라는 일회성 함수도 있다



출처: https://wlaxhrl.tistory.com/92 [찜토끼의 Swift 블로그]


List of Articles
No. Subject Author Date Views
16 [MacOS, Swift] 스크롤뷰, NSScrollView 사용법 엉뚱도마뱀 2018.11.01 1640
15 The distance estimate iBeacon signal strength lizard2019 2019.10.25 851
14 macOS ARP Spoofing Attack file digipine 2020.09.17 850
13 [iOS/Objective-C] __weak, __block 사용법 digipine 2021.02.16 5752
12 WatermelonDB 'jsi/jsi.h' file not found 문제 해결 file digipine 2021.04.06 857
11 Concurrent vs Serial DispatchQueue: Concurrency in Swift explained lizard2019 2021.04.16 613
10 [MacOS] Terminal 에서 zsh compinit: insecure directories 경고 제거하기 lizard2019 2021.04.30 780
9 [iOS/macOS] 사설 인증서를 사용한 SSL HTTPS 통신 시 우회처리 digipine 2021.07.06 3426
8 [iOS] 개발자를 위한 iOS 15의 새로운 기능 file digipine 2021.11.04 700
» [iOS] Audio Session Setting digipine 2021.11.26 669
6 [macOS] 현재 사용 중인(열려있는) 포트 확인하고 Close 하기 digipine 2022.10.24 545
5 [macOS, iOS] 개발자 정보 확인하는 명령어 digipine 2023.03.23 340
4 [macOS] Xcode 디버깅 시 Could not attach pid 오류 해결 file lizard2019 2023.06.05 1135
3 Firebase 'GoogleUtilities/GULURLSessionDataResponse.h' file not found Error Fix lizard2019 2023.07.04 520
2 macOS Daemon 관련 시스템 폴더 목록 lizard2019 2024.03.08 356
1 Core Audio를 사용하여 macOS에서 Audio를 Capture하는 코드 digipine 2024.04.19 334
Board Pagination Prev 1 2 3 Next
/ 3