Android 9의 다중 영역 오디오

Android 9는 다중 영역 오디오를 지원하지 않았지만 Android 오디오 팀은 다중 영역 오디오와 관련된 여러 가지 접근 방법을 모색했습니다. 이 섹션에서는 그러한 접근 방법 중 시스템 구현자가 Android 9에서 RSE(뒷좌석 엔터테인먼트) 솔루션을 구축하는 데 도움이 될 수 있는 일부 접근 방법에 관해 자세히 설명합니다.

사용 사례

  • 뒷좌석의 라디오는 앞좌석의 여러 미디어 소스와 동시에 재생됩니다.
  • 앞좌석 승객은 운전자와 다른 미디어 소스를 듣습니다. 예를 들어 운전자가 메인 화면에서 내비게이션을 보는 동안 승객은 게임을 합니다.
  • 4가지 다른 독립적인 오디오 영역: 운전자, 앞좌석 승객, 뒷좌석 1, 뒷좌석 2.

제한사항

다음과 같은 제한사항으로 인해 Android 9는 기본적으로 여러 오디오 스택(영역) 또는 우선순위를 지원하지 않습니다.

  • Android 9은 애플리케이션이 특정 영역을 타겟팅할 수 있도록 하는 API를 제공하지 않습니다. 대신 애플리케이션은 Android에서 제공하는 사전 정의된 집합에서 선택한 오디오 유형(미디어, 공지 사항 등)을 타겟팅해야 합니다. 예를 들어 Android에서는 현재 오디오 유형을 대상 영역 2미디어로 정의하도록 지원하지 않습니다.
  • (AudioFlinger/내부 믹서에서 제공하는) 물리적 스트림은 믹싱 후에 컨텍스트 정보(예: 논리적 스트림 내 태깅)를 전송하지 않습니다. 따라서 오디오 HAL이 특정 논리적 스트림을 다른 영역으로 라우팅하지 않도록 방지합니다.

시나리오: 여러 인스턴스 사용

이 시나리오에서는 Android Automotive의 여러 인스턴스를 사용하여 다중 영역 오디오에 영향을 줍니다.

  • 각 영역에는 영역 콘텐츠를 독립적으로 관리하는 자체 Android Automotive 인스턴스가 있습니다. HAL 아래의 하드웨어는 여러 인스턴스의 출력을 결합하고 조정합니다.
  • 인스턴스는 개별 하드웨어(예: 뒷좌석의 태블릿)에 있거나 하이퍼바이저를 통해 실제 하드웨어를 공유합니다.
  • 출력은 단일 기본 영역을 사용하여 자동차 스피커에 정적으로 할당되거나 HAL 아래에 동적으로 할당됩니다.
  • (모든 인스턴스에 설치된) 자사 앱은 독점 프로토콜을 통해 협업하여 사운드를 조정해 특정 영역으로 라우팅합니다. 또한 ChromeCast 기능을 사용하여 여러 인스턴스 간에 심지어는 기기 간에 통신할 수도 있습니다.

시나리오: 보조 영역 타겟팅

이 시나리오에서는 자사 애플리케이션을 사용하여 (Android에서 무시되는) 보조 영역을 명시적으로 타겟팅합니다.

  • OEM은 audio_policy_configuration.xml에서 추가 출력 오디오 기기 포트를 정의합니다.
  • 차량 구성을 암시적으로 인식하는 자사 애플리케이션은 AudioTrack.setPrefereceDevice() API를 사용하여 사용 가능한 출력 포트를 열거하고 명시적으로 타겟팅할 수 있습니다.

시나리오: 오디오 정책 규칙 사용

이 시나리오에서는 오디오 정책 규칙을 사용하여 경로별 UID를 추가 오디오 기기에 동적으로 추가합니다.

  • 오디오 라우팅 엔진은 요청하는 애플리케이션의 UID를 기반으로 라우팅 규칙을 정의합니다.
  • 시스템 수준 서비스 또는 런처는 특정 애플리케이션의 출력(UID)을 보조 영역과 연결된 특정 기기로 보내는 규칙을 추가합니다.
  • 사전 정의된 오디오 컨텍스트를 라우팅하기 위해 제공되는 기기 이외에 이러한 특정 기기가 정의됩니다.