[Swift] iOS AudioSession 녹음과 동시에 다른 오디오 믹싱하는 옵션

반응형

AudioSession

 

AudioSession은 싱글톤으로 구현되어 있으며 앱 오디오 세션과 앱의 인터페이스를 정의할 수 있습니다.

 

setActive 함수는 앱이 오디오를 사용하겠다고 통보하는 기능을 하고 반대로 setDeactive는 앱이 오디오를 사용하지 않겠다고 통보합니다. 오디오 세션을 설정할때는 3가지 옵션이 있는데 각각 다음과 같습니다. 예를 들어 카플레이를 사용할 때는 모드를. voicePrompt를 사용합니다.

 

  • Category (playback, playAndRecord)
  • Mode (default)
  • Option (mixWIthOthers, duckOthers)

 

위의 코드의 핵심은 mixWithOthers 옵션을 사용해 다른 앱과 오디오가 겹칠 때 동시에 재생한다는 것과 defaultToSpeaker와 블루투스를 위해서 allowBluetoothA3DP 옵션을 사용한다는 것입니다. 또한 카테고리는 재생과 녹음을 동시에 할 것이기 때문에 .playAndRecord 를 사용합니다. 또한 웹에서 오디오를 재생할 때 앱에서 녹음이 먼저 진행되고 있다면 앱의 마이크가 죽어버리는 문제가 있는데 그때에는 웹에서 다른 오디오 파일을 한 번 재생하고 바로 정지해야 합니다. 이는 WKWebKit 에 있는 버그로 알려져 있습니다.

 

 

iOS 녹음 기능을 사용하면서 동시에 음악을 재생하거나 다른 미디어를 재생할 때 설정해줘야 하는 옵션은 AudioSession을 통해서 설정할 수 있습니다. 다음과 같이 카테고리를 playAndRecord로 설정하고 mixWithOthers 옵션을 추가한 후에 setActive 함수를 호출해주면 됩니다.

let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(.playAndRecord, options: [.mixWithOthers, .defaultToSpeaker, .allowBluetoothA2DP])
try audioSession.setActive(true)
// code...
}
catch {
print(error)
}
view raw blog1.swift hosted with ❤ by GitHub

 

 

 또한 웹에서 음악 또는 영상 파일을 재생하는 경우에는 다음과 같이 WKWebViewConfiguration 에 mediaTypesRequiringUserActionForPlayback 값을 빈배열을 추가해줘야 합니다.

let configuration = WKWebViewConfiguration()
configuration.userContentController = contentController
configuration.allowsInlineMediaPlayback = true
configuration.allowsPictureInPictureMediaPlayback = false
configuration.mediaTypesRequiringUserActionForPlayback = []
view raw blog2.swift hosted with ❤ by GitHub

 

참고자료

 

 

https://wlaxhrl.tistory.com/92

 

iOS에서의 Audio Session

Apple의 Audio Session Documentation 을 참고하여 따로 정리해본 오디오 세션 정리글입니다. Audio Session 동작에 대한 개괄적인 설명과 play, record 등을 위한 Audio Session Setting 방법을 다룹니다. 더 상세히 공

wlaxhrl.tistory.com

 

https://developer.apple.com/audio/

 

Audio - Apple Developer

Find presentations, documentation, and development resources for working with audio on Apple Platforms.

developer.apple.com

 

반응형

댓글

Designed by JB FACTORY