버전
menu_open
대상 플랫폼:
Wwise SDK 2023.1.3
오디오 세션 이해하기

iOS SDK는 Apple의 오디오 세션(audio session) API을 기반으로 하여 앱과 앱 내에서의 운영 체제 오디오 관리 체계를 따릅니다. 오디오 세션의 주요 목표는 서로 다른 시스템 이벤트나 사용자 동작이 발생할 때 오디오 앱에 대한 알려진 행동들을 제공하는 것입니다. 즉, 오디오 세션은 오디오 앱과 iOS 운영 체제 사이 중간 계층으로, 예상되는 오디오 동작을 제공합니다.

시스템과 다른 앱에서 애플리케이션 오디오 동작은 오디오 세션 카테고리와 하위 카테고리를 통해 제어되며, 이들을 카테고리 옵션(category option)이라고 부릅니다. 오디오를 사용하거나 생성하는 모든 iOS 앱은, 원하는 오디오 동작을 명시하기 위해 주어진 오디오 세션 카테고리와 선택한 카테고리 옵션에서 시스템에 등록돼야 합니다.

오디오 세션은 iOS 시스템 방해와 오디오 경로 변경을 처리하고 대응하는 데도 사용합니다.

마지막으로, 오디오 세션은 iOS가 낮은 레벨 하드웨어 오디오 요소를 서로 다른 오디오 앱과 시스템 사운드 사이에서 공유하기 위해 사용하는 방법이기도 합니다. 따라서 잘못된 시스템 이벤트 관리로 인해 앱 오디오가 들리지 않거나 앱이 멈추는 걸 방지하기 위해 오디오 세션 요구 사항을 따르는 게 필수적입니다.

오디오 앱이 오디오를 캡처하거나 생성할 때마다 시스템에서 해당 오디오 세션을 활성화 시켜야 합니다. 예를 들어 사용자가 음악 앱의 '재생' 버튼을 누르면 그 직후 앱이 해당 오디오 세션 활성화를 요청하고, 반대로 '정지' 버튼을 누르면 비활성화시켜야 합니다. 많은 iOS 내장 앱이 오디오 세션을 오디오를 출력하거나 캡처하는 데 사용하기 때문에 사용자 앱 오디오 동작에 영향을 끼칠 수 있습니다.

  • 캘린더 앱 (오디오 알림 이용)
  • 카메라 (비디오)
  • 시계 앱 (알람, 스톱워치, 타이머)
  • FaceTime
  • Garage Band
  • iTunes Store
  • 지도
  • 음악 앱
  • 전화
  • 팟캐스트
  • SIRI
  • 음성 메모

iOS는 앱의 오디오 세션을 언제든 비활성화해 수신 전화나 타이머 알람, 캘린더 일정과 같이 다양한 오디오 이벤트에 응답할 수 있습니다. 이런 이벤트들을 interruptions (방해)라고 하며, 오디오 앱은 이런 오디오 세션 우선순위 변경에 대한 응답을 준비하고 있어야 하고 interruption이 끝났을 때 재생이나 녹음을 올바르게 재개할 수 있어야 합니다. 애플리케이션 전환, 홈 버튼을 눌렀을 때 백그라운드 처리, 기기 잠금 및 잠금 해제는 오디오 세션 활성화와 비활성화가 일어날 수 있는 상황들입니다. 다음은 이런 이벤트를 Wwise로 어떻게 관리하고 올바른 오디오를 위해 클라이언트 앱이 처리해야 할 작업은 무엇인지 자세히 설명합니다.

오디오 세션 카테고리와 옵션

iOS에서 실행되는 모든 오디오 앱은 사운드 출력, 처리, 획득을 위해 오디오 세션를 사용해야 합니다. 모든 오디오 앱의 오디오 사용 목적이 똑같지는 않기 때문에 (오디오 녹음 앱은 다른 오디오 앱이 시작될 때 게임이 완전히 정지된 동안 백그라운드 실행으로부터 오디오를 획득해와야 하는 경우가 있음), iOS는 위에서 언급한 사용자 동작이나 시스템 이벤트가 발생할 때 예상되는 오디오 동작을 묶은 오디오 세션 카테고리 몇 개를 정의합니다. 앱이 기기에서 오디오를 처리할 수 있게 되기 전에 주어진 카테고리를 사용하도록 앱이 등록돼있어야 합니다.

카테고리별로 서로 다르게 분류돼있는 주요 오디오 동작들은 다음과 같습니다.

  • 기기의 벨소리/무음 모드 전환에 의해 앱 오디오가 음소거되는지 여부 (주로 '잠금' 버튼)
  • 혼합될 수 없는 오디오 앱으로 설정된 다른 앱의 오디오를 해당 오디오 앱이 정지시킬 것인지 여부, 또는
  • 앱이 오디오 입력(녹음), 오디오 출력(재생), 또는 입력과 출력 둘 다 허용하는지.

각 오디오 앱은 한 번에 한 카테고리에만 속할 수 있습니다. 만약 아무 카테고리도 명확하게 선택하지 않은 경우 기본 설정인 AVAudioSessionCategorySoloAmbient 카테고리가 사용됩니다. Four main categories are available in the iOS Wwise SDK:

  • AkAudioSessionCategoryAmbient: iOS 오디오 세션 AVAudioSessionCategoryAmbient 카테고리와 같습니다.
    • 오디오 재생에만 사용됩니다 (녹음 불가).
    • 벨소리/무음 코드 전환이 활성화됐을 때 앱 오디오가 음소거됩니다 ('잠금'을 누른 경우).
    • 다른 오디오 앱이 해당 오디오 세션을 포그라운드에 활성화하면 앱 오디오가 중단됩니다.
    • App audio will be mixed with other mixable background audio (for example, the Music app).
    • 앱 오디오가 SFX나 대사, 음악 같은 다양한 사운드 종류를 포함할 수 있습니다. 앱 오디오가 Wwise에서 음소거할 수 있는 BGM으로 특별히 태그돼있지 않은 이상 (자세한 내용은 사용자 음악 (BGM)과 DVR 처리 참고), Ambient 카테고리에 들어있는 모든 앱 오디오가 다른 앱 오디오와 혼합됩니다. 가장 전형적인 예는, 사용자가 음악 앱을 켜고 개발 앱으로 되돌아가기 전에 음악 재생을 누른 경우입니다.
    • 이 카테고리는, 다른 앱의 오디오를 함께 끌어들여 색다른 오디오 경험을 구현하려는 게임에 적합합니다. 이 카테고리를 이용하면 개발 앱이 SFX나 대사를 출력하는 동안 사용자가 음악 앱으로 음악을 들을 수 있습니다.
    • Ambient 는 개발 앱에서의 오디오 백그라운드 재생을 허용하지 않습니다. 만약 사용자가 개발 앱에서 다른 오디오 앱으로 전환할 경우, 다른 앱이 혼합 가능한 카테고리를 사용할 지라도 현재 앱 오디오가 음소거됩니다.
  • AkAudioSessionCategorySoloAmbient: iOS 오디오 세션 AVAudioSessionCategorySoloAmbient 카테고리와 같습니다.
    • 오디오 재생에만 사용됩니다 (녹음 불가).
    • 벨소리/무음 코드 전환이 활성화됐을 때 앱 오디오가 음소거됩니다 ('잠금'을 누른 경우).
    • Ambient 카테고리와 가장 큰 차이점은, 해당 오디오 세션이 활성화됐을 때 다른 앱의 오디오가 중단된다는 점입니다.
    • 다른 오디오 앱이 해당 오디오 세션을 포그라운드에 활성화하면 앱 오디오가 중단됩니다.
    • 다른 오디오 앱이 혼합 가능한, 또는 불가능한 카테고리에서 해당 오디오 세션을 백그라운드에 활성화하면 앱 오디오가 중단됩니다.
    • 이 카테고리는 백그라운드에 실행되고 있는 다른 오디오 앱과 혼합되지 않아야하는 오디오를 지닌 게임에 적합합니다. 예를 들어, 사용자가 음악 앱으로 음악을 듣고 있다가 개발 앱으로 되돌아가 앱이 재개되면 음악이 음소거됩니다.
  • AkAudioSessionCategoryPlayAndRecord: iOS 오디오 세션 AVAudioSessionCategoryPlayAndRecord 카테고리와 같습니다.
    • 오디오 재생과 녹음에 사용됩니다.
    • 벨소리/무음 코드 전환이 활성화되어도 앱 오디오가 음소거되지 않습니다 ('잠금'을 누른 경우).
    • 다른 오디오 앱이 해당 오디오 세션을 포그라운드에 활성화하면 앱 오디오가 중단됩니다.
    • By default, this category does not use the overridden AkAudioSessionCategoryOptionMixWithOthers option (see below) and other app's audio such as the music from the Music app will not be mixed with your app audio when it plays.
    • AkAudioSessionCategoryOptionMixWithOthers 카테고리 옵션(아래 참고)을 사용하면, 다른 오디오 앱이 해당 오디오 세션를 백그라운드에 활성화시켰을 때 개발 앱 오디오가 다른 음원과 혼합됩니다. 예를 들어, 사용자가 음악 앱으로 음악을 듣고 있다가 개발 앱으로 전환하면 그 오디오와 음악이 혼합되어 들립니다. 그러나 AkAudioSessionCategoryAmbient 처럼, Wwise에서 음소거 설정된 개발 앱에서 나오는 BGM은 ( 사용자 음악 (BGM)과 DVR 처리 for details 참고) 이 옵션으로 출력되지 않습니다.
    • 이 카테고리는 적절히 구성된 앱 plist와 함께 사용해 앱이 백그라운드로 전환된 동안 오디오를 재생/녹음할 수 있도록 합니다. 만약 개발 앱이 음성 녹음 앱이나 음악 재생 앱과 같은 백그라운드 오디오 처리를 지원해야 할 경우, 이 모드가 이를 가능케 하는 Wwise에서 지원하는 유일한 모드입니다. 그러나 이를 위해서는, 'App plays audio or streams audio/video using Airplay' 영역에 필요한 백그라운드 모드 키를 1로 설정해서 추가하도록 해당 앱 옵션의 plist가 수정돼야 합니다.
    • This category should only be used for applications that require microphone input.
  • AkAudioSessionCategoryPlayback: Equivalent to the iOS audio session AVAudioSessionCategoryPlayback category
    • Used for audio playback only.
    • App audio is not silenced when the Ring/Silent switch is activated (that is, when 'Lock' is pressed).
    • 다른 오디오 앱이 해당 오디오 세션을 포그라운드에 활성화하면 앱 오디오가 중단됩니다.
    • By default, this category does not use the overridden AkAudioSessionCategoryOptionMixWithOthers option (see below) and other app's audio such as the music from the Music app will not be mixed with your app audio when it plays.
    • 이 카테고리는 적절히 구성된 앱 plist와 함께 사용해 앱이 백그라운드로 전환된 동안 오디오를 재생/녹음할 수 있도록 합니다. If your app needs to support background audio processing, such as in a voice recording app or a music player app, this mode is the only Wwise-supported mode that allows it. 그러나 이를 위해서는, 'App plays audio or streams audio/video using Airplay' 영역에 필요한 백그라운드 모드 키를 1로 설정해서 추가하도록 해당 앱 옵션의 plist가 수정돼야 합니다.
    • This category should only be used for applications that require audio to be played while in the background and do not need microphone input.

위에 언급한 오디오 세션 카테고리들 외에, 일부 카테고리의 기본 설정 동작은 카테고리 옵션을 사용해 오버라이드할 수 있습니다.

오디오 세션 카테고리 옵션은 enum AkAudioSessionCategoryOptions로 설정할 수 있습니다.

  • AkAudioSessionCategoryOptionMixWithOthers: iOS 오디오 세션 AVAudioSessionCategoryOptionMixWithOthers 카테고리 옵션과 같습니다.
    • Use only with the AkAudioSessionCategoryPlayAndRecord and AkAudioSessionCategoryPlayback categories.
    • 기본 설정 카테고리 동작을 오버라이드해 다른 혼합 가능한 오디오 앱과 개발 앱의 오디오를 혼합합니다.
  • AkAudioSessionCategoryOptionDuckOthers: iOS 오디오 세션 AVAudioSessionCategoryOptionDuckOthers 카테고리 옵션과 같습니다.
    • Use only with the AkAudioSessionCategoryPlayAndRecord and AkAudioSessionCategoryPlayback categories.
    • 실행 중인 앱의 오디오 세션이 활성화됐을 때 다른 앱의 오디오를 '덕킹'할 수 있게 합니다.
  • AkAudioSessionCategoryOptionAllowBluetooth: iOS 오디오 세션 AVAudioSessionCategoryOptionAllowBluetooth 카테고리 옵션과 같습니다.
    • 오직 AkAudioSessionCategoryPlayAndRecord 카테고리만 함께 사용됩니다.
    • 녹음할 때, 블루투스 기기를 입력 경로로 사용할 수 있게 합니다.
  • AkAudioSessionCategoryOptionAllowBluetoothA2DP: Equivalent to the iOS audio session AVAudioSessionCategoryOptionAllowBluetoothA2DP category option
    • 오직 AkAudioSessionCategoryPlayAndRecord 카테고리만 함께 사용됩니다.
    • Allows paired Bluetooth A2DP devices to be available input routes when recording.
  • AkAudioSessionCategoryOptionDefaultToSpeaker : iOS 오디오 세션 AVAudioSessionCategoryOptionDefaultToSpeaker 카테고리 옵션과 같습니다.
    • 오직 AkAudioSessionCategoryPlayAndRecord 카테고리만 함께 사용됩니다.
    • 이 옵션을 사용하고 다른 사용 가능한 오디오 경로가 없을 경우, 해당 앱 오디오가 기기의 내장 스피커를 통해 재생됩니다. 이 옵션을 사용하지 않고 다른 사용 가능한 오디오 경로가 없을 경우, 해당 앱 오디오가 이어스피커(receiver)를 통해 재생됩니다.
    • 이 옵션은 이어스피커가 있는 iPhone에만 해당됩니다. iPad와 iPod에는 사용할 수 없습니다.

Wwise로 iOS 오디오 이벤트 사용하기

iOS 기기에서는 앱이 해당 장치의 오디오 하드웨어를 사용하는 동안 특정 개수의 사용자 동작이나 시스템 이벤트가 일어날 수 있습니다. 예를 들어 수신 전화가 오거나, 사용자가 개발 앱을 다른 앱으로 전환하거나, 타이머가 다 됐을 때 소리가 나거나, 사용자가 잭을 통해 헤드폰을 연결/분리하거나, 벨소리/음소거 전환을 누르거나 하는 경우가 개발 앱의 오디오 동작에 영향을 줄 수 있습니다. 여기서는 이러한 경우 iOS의 다양한 작동 원리와, Wwise를 통해 개발 앱과 어떻게 소통하는지에 대해 설명합니다.

Three main families of events relevant to audio exist in iOS: foreground/background transitions, interruptions, and route changes.

Foreground/Background Transitions

The behavior of the sound engine when the application is sent to background by the OS depends on the Audio Session category.

In Ambient and Solo Ambient categories, the audio session is deactivated while in the background, therefore the Sound Engine suspends itself. This means no audio is processed and no API calls are serviced. Applie의 가이드라인에 따라, 배터리 사용량을 줄이기 위해서입니다. Therefore, your game should suspend processing as well and avoid calling any of the AK::SoundEngine calls. When the application comes back to the foreground, the sound engine is resumed and any queued API calls are processed. All these operations happen automatically.

In PlayAndRecord and Playback categories, going to the background does not interrupt audio. The audio continues to be processed and API calls are serviced as usual. This behavior can be changed by setting the AkAudioSessionBehaviorSuspendInBackground flag in the eAudioSessionBehavior parameter of the platform initialization settings. When this flag is set, the sound engine suspends itself when the app goes to the background, the same as the Ambient and Solo Ambient categories above.

Interruptions

Different system events or user actions can lead to the deactivation of the app's audio session, even when it is in the foreground. This is referred to as an audio session interruption. Such interruptions occur, for example, when receiving an incoming phone call or when Siri is activated.

No matter which audio session category is chosen, the sound engine automatically suspends audio rendering during the interruption. However, API calls are still processed, so this mode effectively acts as a global mute. When the interruption ends, audio rendering resumes automatically.

If your application must be aware of these interruptions, and your game engine does not expose them, you can set a callback function in AkPlatformInitSettings.audioCallbacks.interruptionCallback. 이 경우를 제외하면 사운드 엔진 단에서 이런 이벤트에 대해 특별히 처리해야 할 것은 없습니다.

Wwise는 이러한 중단이 발생했을 때 사운드 엔진 요소의 중지/재개를 관리해, 사용자는 오디오 세션을 활성화/비활성화하기 위해 별다른 작업을 하지 않아도 됩니다. If specific processing is required in the SDK client app when the audio session is either interrupted or resumed (for example, to update UI elements or give visual feedback for the interruption), the code must be added to the application callback described above.

경고: '시작' 오디오 중단 콜백은 사운드 엔진이 내부적으로 중지되기 직전에 호출되기 때문에, 결과가 불안정할 수 있어 아무리 짧은 소리라도 오디오를 재생하는데 사용돼서는 안 됩니다.
경고: 사용자 오디오 중단 콜백은 UI나 오브젝트 속성 업데이트와 같이 간단한 과제를 수행하는 데만 사용해야 합니다. CPU를 많이 사용하는 계산이나 많은 시간이 필요한 작업에 사용돼서는 안 됩니다. 사용에 따른 결과는 보장할 수 없습니다.

Route Change

오디오 경로는, 기기 내 다양한 오디오 하드웨어 요소를 통해 오디오가 나오는 길이라고 할 수 있습니다. 예를 들어 사용자가 헤드셋을 꽂거나 뺄 때 오디오 경로가 변경됩니다. 사운드 출력이 장치 스피커로 나오는 대신 중지되거나 헤드셋으로 전송되기 때문입니다. iOS는 앱에게 경로 변경을 알려 AVAudioSessionRouteChangeNotification 을 등록합니다.

Apple 오디오 세션은, 헤드폰 연결/연결 해제 이벤트 같은 기본적인 경로 변경이 발생하면 실행 중인 앱의 오디오 세션의 활성화/비활성화를 자동으로 관리합니다. The Wwise SDK does not offer any callback mechanism other than the interruption case described above. 사용자 앱이 그 안의 특수한 요소를 반영하기 위해 이러한 경로 변경을 감지해야 하는 경우, Integration Demo를 참고해 이를 쉽게 처리하는 방법을 확인하세요.


이 페이지가 도움이 되었나요?

지원이 필요하신가요?

질문이 있으신가요? 문제를 겪고 계신가요? 더 많은 정보가 필요하신가요? 저희에게 문의해주시면 도와드리겠습니다!

지원 페이지를 방문해 주세요

작업하는 프로젝트에 대해 알려주세요. 언제든지 도와드릴 준비가 되어 있습니다.

프로젝트를 등록하세요. 아무런 조건이나 의무 사항 없이 빠른 시작을 도와드리겠습니다.

Wwise를 시작해 보세요