서라운드 오디오 및 머리 추적

Android 13에서는 OEM에서 공급업체별 맞춤설정이나 SDK를 사용하지 않고도 서라운드 오디오 및 머리 추적을 지원하는 표준 방법이 도입되었습니다.

서라운드 오디오는 리스너 주변의 사운드 필드를 만드는 데 사용되는 기술입니다. 서라운드 오디오를 통해 사용자는 재생에 사용되는 오디오 기기 트랜스듀서의 물리적 위치와는 다른 위치에서 채널과 개별 사운드를 인식할 수 있습니다. 예를 들어 서라운드 오디오는 헤드폰을 통해 멀티채널 사운드트랙을 들을 수 있는 기능을 사용자에게 제공합니다. 헤드폰 사용자에게는 재생용 트랜스듀서가 두 개뿐이지만 서라운드 오디오가 제공되면 앞쪽에서 재생되는 대화와 그 뒤의 배경 효과를 인식할 수 있습니다.

머리 추적은 사용자가 자신의 머리 주위에 시뮬레이션되고 공간화된 사운드 스테이지의 특성을 이해하는 데 도움이 됩니다. 이 경험은 지연 시간이 짧을 때만 효과적입니다. 지연 시간은 사용자가 머리를 움직이는 시점과 사용자가 머리의 움직임에 따라 이동하는 가상 스피커에서 들려오는 소리를 듣는 시점 사이의 시간으로 측정됩니다.

Android 13은 서라운드 오디오 및 머리 추적에 최적화하고 지연 시간을 최소화하기 위해 오디오 파이프라인에서 가능한 가장 낮은 수준에서 서라운드 오디오를 처리합니다.

아키텍처

Android 13의 수정된 Android 오디오 프레임워크 및 API는 생태계 전반에 걸쳐 서라운드 오디오 기술을 채택하는 데 도움이 됩니다.

다음 그림은 Android 13의 오디오 파이프라인 아키텍처에서 서라운드 오디오와 관련해 어떤 점이 변경되었는지 보여줍니다.

spatial-audio

그림 1. 스페이셜라이저가 있는 오디오 파이프라인 아키텍처

새 모델에서 사용되는 스페이셜라이저는 오디오 프레임워크의 일부이며 디코더에서 분리됩니다. 스페이셜라이저는 혼합 오디오 콘텐츠를 받아서 스테레오 스트림을 오디오 HAL에 전달합니다. 디코더에서 스페이셜라이저가 분리되었기 때문에 OEM은 서로 다른 공급업체에서 제공되는 디코더와 스페이셜라이저를 선택하고 머리 추적에서 원하는 왕복 지연 시간을 달성할 수 있습니다. 이 새로운 모델에는 머리 추적을 위한 센서 프레임워크 후크도 포함되어 있습니다.

다음 그림은 스페이셜라이저 및 머리 추적 효과를 위한 오디오 프레임워크의 시스템 아키텍처를 보여줍니다.

spatial-sys-arch

그림 2. 스페이셜라이저 및 머리 추적 기능을 갖춘 시스템 아키텍처

모든 서라운드 오디오 API는 앱 수준의 공개 Spatializer 클래스에 그룹화됩니다. 오디오 서비스의 SpatializerHelper 클래스는 시스템 UI 구성요소와 상호작용하여 플랫폼 및 연결된 기기의 기능에 따라 스페이셜라이저 관련 기능을 관리합니다. 오디오 정책 서비스에 새롭게 도입된 Spatializer 클래스는 OEM에서 표현한 기능, 연결된 기기, 활성 사용 사례에 따라 다중 채널 믹싱과 공간화에 필요한 서라운드 오디오 그래프를 만들고 제어합니다. 새 믹서 클래스 SpatializerThread는 다중 채널 트랙을 믹싱하며, 스테레오 출력을 오디오 HAL에 전달하는 후처리 FX 엔진에 믹싱으로 도출된 믹스를 제공합니다. 머리 추적의 경우, SpatializerPoseController 클래스가 머리 추적과 관련된 함수를 그룹화하여 센서 스택과 상호작용하며 효과 엔진에 제공되는 센서 신호를 병합하고 필터링합니다. 머리 추적 센서 데이터는 블루투스 드라이버의 HID 프로토콜을 통해 전달됩니다.

Android 13 오디오 파이프라인 아키텍처의 변경사항은 다음을 개선합니다

  • 스페이셜라이저와 헤드폰 간의 지연 시간 감소
  • 앱 개발자에게 서비스를 제공하기 위한 통합 API 제공
  • 시스템 API를 통해 머리 추적 상태 제어
  • 머리 추적 센서 발견 및 추적 센서를 활성 오디오 기기와 연결
  • 다양한 센서의 신호를 병합하고 스페이셜라이저 효과 엔진에서 사용할 수 있는 머리 포즈 계산

편향 보상, 정지 감지, 속도 제한과 같은 함수는 머리 추적 유틸리티 라이브러리를 사용하여 구현할 수 있습니다.

서라운드 오디오 API

Android 13은 서라운드 오디오 시스템 및 개발자 API를 제공합니다.

OEM은 기능의 사용 가능 여부 및 사용 설정 상태에 기반하여 앱 동작을 조정할 수 있으며, 사용 설정 상태는 시스템 API에서 설정합니다. 앱에서는 미적 이유로 서라운드 오디오를 사용 중지하거나 오디오 스트림이 서라운드 오디오용으로 이미 처리되었음을 알리도록 오디오 속성을 구성할 수도 있습니다.

개발자 대상 API는 Spatializer를 참고하세요.

OEM에서는 시스템 API를 사용하여 사운드 및 블루투스 설정 UI를 구현할 수 있으며, 이 UI를 통해 사용자는 기기의 서라운드 오디오 상태와 머리 추적 기능을 제어할 수 있습니다. 사용자는 사운드 설정 UI에서 스피커 및 유선 헤드폰의 서라운드 오디오를 사용 설정하거나 사용 중지할 수 있습니다. 스피커의 서라운드 오디오 설정은 스페이셜라이저 효과 구현 시 transaural 모드를 지원하는 경우에만 사용할 수 있습니다.

사용자는 각 기기의 블루투스 기기 설정에서 서라운드 오디오 및 머리 추적을 사용 설정하거나 사용 중지할 수도 있습니다. 머리 추적 설정은 블루투스 헤드셋에 머리 추적 센서가 노출되어 있는 경우에만 사용할 수 있습니다.

서라운드 오디오 기능이 지원되는 경우의 기본 설정은 '항상 사용'입니다. 시스템 API의 전체 목록은 Spatializer.java를 참고하세요.

새로운 머리 추적 센서 유형인 Sensor.TYPE_HEAD_TRACKER가 센서 프레임워크에 추가되며 센서 HAL에 의해 블루투스 또는 USB를 사용하는 동적 센서로 노출됩니다.

서라운드 오디오 통합

OEM에서는 스페이셜라이저 효과 엔진을 구현하는 것 외에도 서라운드 오디오를 지원할 수 있도록 플랫폼을 구성해야 합니다.

요구사항

서라운드 오디오를 통합하려면 다음 요구사항을 충족해야 합니다.

  • 오디오 HAL 및 오디오 DSP가 서라운드 오디오 전용 출력 경로를 지원해야 합니다.
  • 머리 추적 기능을 갖춘 서라운드 오디오의 경우 헤드폰에 머리 추적기 센서가 내장되어 있어야 합니다.
  • 구현은 블루투스 헤드셋 - 휴대전화 간의 HID 프로토콜을 통한 머리 추적에 관해 제안된 표준을 준수해야 합니다.
  • 서라운드 오디오를 지원하려면 오디오 HAL v7.1이 필요합니다.

다음 단계에 따라 서라운드 오디오를 통합하세요.

  1. 다음과 같이 device.mk 파일에서 서라운드 오디오 지원을 선언합니다.

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    이렇게 하면 AudioService에서 스페이셜라이저 지원 기능을 초기화합니다.

  2. 다음과 같이 audio_policy_configuration.xml에서 서라운드 오디오 믹스 전용 출력을 선언합니다.

    <audioPolicyConfiguration>
      <modules>
       <module>
         <mixPorts>
         <mixPort name="spatializer" role="source"   flags="AUDIO_OUTPUT_FLAG_SPATIALIZER">
           <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT"
             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
    
  3. 다음과 같이 audio_effects.xml에서 스페이셜라이저 효과 라이브러리를 선언합니다.

    <audio_effects_conf>
          <libraries>
             <library name="spatializer_lib" path="libMySpatializer.so"/>
              …
             </libraries>
          <effects>
           <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
    
  4. 스페이셜라이저 효과를 구현하는 공급업체는 다음을 준수해야 합니다.

    • 기본 구성 및 컨트롤은 효과 HAL의 다른 효과와 동일합니다.
    • 프레임워크에서 지원되는 기능 및 구성을 탐색하는 데 필요한 매개변수는 다음과 같습니다.

      • SPATIALIZER_PARAM_SUPPORTED_LEVELS
      • SPATIALIZER_PARAM_LEVEL
      • SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
      • SPATIALIZER_PARAM_HEADTRACKING_MODE
      • SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
      • SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
      • SPATIALIZER_PARAM_HEAD_TO_STAGE

    자세한 내용은 effect_spatializer.h를 참고하세요.

권장사항

OEM에서는 서라운드 사운드와 머리 추적을 구현할 때 다음 가이드라인을 따르는 것이 좋습니다.

  • 가능한 경우 LE 오디오를 사용하여 상호 운용성을 높이고 지연 시간 목표를 달성합니다.
  • 센서 이동 감지에서 헤드폰 오디오 수신까지의 왕복 지연 시간은 양호한 상태의 UX에서 150ms 미만이어야 합니다.
  • 고급 오디오 배포 프로필(A2DP)을 갖춘 블루투스(BT) 클래식의 경우:
    • Opus와 같이 지연 시간이 짧은 코덱을 사용합니다.
    • 오디오 HAL에 지연 시간 제어 함수를 구현합니다. 이렇게 하면 머리 추적이 꺼져 있을 때 전력 및 성능이 최적화되며 최적화되지 않은 조건에서는 머리 추적이 사용 중지됩니다.

유효성 검사

서라운드 오디오 기능의 기능을 확인하려면 SpatializerTest.java에서 제공되는 CTS 테스트를 사용하세요.

공간화 또는 머리 추적 알고리즘을 잘못 구현하면 권장사항에 명시된 왕복 지연 시간 권장사항을 충족할 수 없습니다.