개요

Android Automotive OS(AAOS)는 핵심 Android 오디오 스택을 기반으로 빌드되었으며 차량의 인포테인먼트 시스템으로 작동하는 사용 사례를 지원합니다. AAOS는 미디어, 내비게이션, 통신 등의 인포테인먼트 사운드를 담당하지만 엄격한 가용성 및 타이밍 요구사항이 있는 차임벨 및 경고를 직접적으로 담당하지는 않습니다.

AAOS는 차량이 오디오를 관리하는 데 도움이 되는 신호와 메커니즘을 제공하지만, 운전자와 동승자에게 어떤 사운드를 재생해야 할지를 결정하고 안전과 관련된 중요 사운드와 규정에 의거한 사운드가 방해 없이 제대로 들리게 하는 것은 궁극적으로 차량이 담당합니다.

AAOS는 Android 오디오 스택을 활용하므로 오디오를 재생하는 서드 파티 애플리케이션은 휴대전화에서 실행하는 것과 다른 작업을 할 필요가 없습니다. 애플리케이션의 오디오 라우팅은 오디오 정책 구성에 설명된 대로 AAOS에서 자동으로 관리합니다.

Android가 차량의 미디어 환경을 관리하면 라디오 튜너 같은 외부 미디어 소스는 앱으로 표현되어야 하며 이러한 앱은 오디오 포커스와 소스의 미디어 키 이벤트를 처리할 수 있습니다.

Android 사운드 및 스트림

자동차 오디오 시스템은 다음 사운드와 스트림을 처리합니다.

이미지

그림 1. 스트림 중심 아키텍처 다이어그램

Android는 Android 앱에서 발생하는 사운드를 관리하고 이러한 앱을 제어하며 사운드 유형에 따라 HAL에서 앱의 사운드를 출력 장치로 라우팅합니다.

  • 핵심 오디오 명명법에서 소스라고 알려진 논리적 스트림에는 오디오 속성 태그가 지정됩니다.

  • 핵심 오디오 명명법에서 기기라고 하는 물리적 스트림에는 믹싱 후 컨텍스트 정보가 없습니다.

신뢰성을 위해 독립적인 소스에서 나오는 외부 사운드(예: 안전벨트 경고 차임벨)는 Android 외부, HAL 아래 또는 별도의 하드웨어에서 관리됩니다. 시스템의 구현자는 Android에서 1개 이상의 사운드 입력 스트림을 받아 차량에 필요한 외부 사운드 소스와 적절한 방법으로 결합하는 믹서를 제공해야 합니다. Android 제어 HAL은 Android 외부에서 생성된 사운드가 Android와 다시 통신할 수 있는 다른 메커니즘을 제공합니다.

  • 오디오 포커스 요청
  • 게인 또는 볼륨 제한
  • 게인 및 볼륨 변경

오디오 HAL 구현과 외부 믹서는 안전에 중요한 외부 사운드가 들리게 하고, Android에서 제공하는 스트림을 믹싱해 적절한 스피커로 라우팅하는 작업을 담당합니다.

Android 사운드

앱에는 오디오 데이터의 논리적 스트림 하나 이상을 방출하기 위해 표준 Android API를 통해 상호작용하는 플레이어가 하나 이상 있을 수 있습니다(예: 포커스 제어를 위한 AudioManager 또는 스트리밍을 위한 MediaPlayer). 이 데이터는 단일 채널 모노 또는 7.1 서라운드일 수 있지만, 라우팅되어 단일 소스로 취급됩니다. 앱 스트림은 오디오가 어떻게 표현되어야 하는지에 관한 시스템 힌트를 제공하는 AudioAttributes와 연결되어 있습니다.

논리적 스트림은 AudioService를 통해 전송된 다음, 사용 가능한 물리적 출력 스트림 중 하나에만 라우팅됩니다. 이때 각 스트림은 AudioFlinger 내의 믹서 출력입니다. 오디오 속성이 물리적 스트림으로 믹스 다운되면 더 이상 사용할 수 없습니다.

그런 다음 하드웨어에서의 렌더링을 위해 각 물리적 스트림이 오디오 HAL로 전달됩니다. 자동차 앱에서 렌더링 하드웨어는 휴대기기와 유사한 로컬 코덱 또는 차량의 실제 네트워크에 있는 원격 프로세서일 수 있습니다. 어느 쪽이든 실제 샘플 데이터를 전달해 데이터를 청취 가능하게 만드는 일은 오디오 HAL 구현에서 담당합니다.

외부 스트림

인증 또는 타이밍상의 이유로 Android를 통해 라우팅하면 안 되는 사운드 스트림은 외부 믹서로 직접 전송될 수 있습니다. Android 11부터 이제 HAL은 이러한 외부 사운드를 위한 포커스를 요청하여 미디어를 일시중지하거나 다른 앱의 포커스 획득을 방지하는 등의 적절한 조치를 취할 수 있도록 Android에 알릴 수 있습니다.

외부 스트림이 Android가 생성하는 사운드 환경과 상호작용(예: 외부 튜너가 켜질 때 MP3 재생 중지)해야 하는 미디어 소스인 경우 그러한 외부 스트림은 Android 앱으로 표현되어야 합니다. 이러한 앱은 HAL이 아닌 미디어 소스를 대신해서 오디오 포커스를 요청하고, Android 포커스 정책에 맞게 필요에 따라 외부 소스를 시작 또는 중지하여 포커스 알림에 응답합니다.

앱은 재생 및 일시중지와 같은 미디어 키 이벤트도 처리합니다. 이러한 외부 기기를 제어하기 위해 제안되는 한 가지 메커니즘이 HwAudioSource입니다. 자세한 내용은 AAOS에서 입력 장치 연결을 참고하세요.

출력 장치

오디오 HAL 수준에서 기기 유형 AUDIO_DEVICE_OUT_BUS는 차량 오디오 시스템에서 사용하기 위한 일반 출력 장치를 제공합니다. 버스 기기는 주소 지정 가능한 포트를 지원하며(여기서 각 포트는 물리적 스트림의 종료 지점임) 차량에서 유일하게 지원되는 출력 장치 유형입니다.

시스템 구현은 모든 Android 사운드에 하나의 버스 포트를 사용할 수 있는데, 이 경우 Android는 모든 사운드를 믹스하여 하나의 스트림으로 전달합니다. 또한 HAL이 각 CarAudioContext별로 버스 포트를 하나씩 제공하여 모든 사운드 유형을 동시에 전송할 수 있습니다. 이렇게 하면 HAL 구현이 여러 사운드를 원하는 대로 믹싱하거나 볼륨을 낮출 수 있습니다.

오디오 컨텍스트를 출력 장치에 할당하는 작업은 car_audio_configuration.xml 파일을 통해 이루어집니다. 자세한 내용은 오디오 정책 구성을 참고하세요.