볼륨 관리

볼륨 관리는 고정 볼륨을 사용하는 CarAudioService에 포함되어 있습니다. 하드웨어에 의해 HAL 아래에 볼륨이 적용된다는 가정하에 앰프를 사용하는 것입니다. CarAudioService는 출력 장치를 구성합니다. 같은 게인을 볼륨 그룹에 적용하여 볼륨 그룹

고정 볼륨

AAOS 구현은 볼륨을 제어하는 데 하드웨어 앰프를 사용하는 대신 소프트웨어 믹서입니다. 부작용을 방지하려면 config_useFixedVolume 플래그를 다음과 같이 설정하세요. true (필요에 따라 오버레이):

<resources>
    <!-- Car uses hardware amplifier for volume. -->
    <bool name="config_useFixedVolume">true</bool>
</resources>

config_useFixedVolume 플래그가 설정되지 않은 경우 (또는 false로 설정된 경우) 앱은 AudioManager.setStreamVolume()를 호출하여 스트림별로 볼륨을 변경할 수 있음 소프트웨어 믹서에 입력합니다. 잠재적인 위험 요인으로 인해 항상 바람직한 것은 아닙니다. 소프트웨어 믹서의 볼륨 감쇠가 더 적은 수의 중요 비트가 수신될 때 신호에서 더 적은 수의 중요 비트가 하드웨어 앰프입니다.

볼륨 그룹

볼륨 그룹은 오디오 내 기기 모음의 볼륨을 관리합니다. 사용할 수 있습니다 각 볼륨 그룹의 볼륨을 독립적으로 제어할 수 있습니다. 이 결과 게인은 연결된 장치에 구성되어 차량의 앰프입니다. 볼륨 설정이 사용자에게 유지되고 로드됨 사용자가 로그인할 때

볼륨 그룹 정의

CarAudioService는 car_audio_configuration.xml에 정의된 볼륨 그룹을 사용합니다.

<audioZoneConfiguration version="2.0">
    <zones>
        <zone name="primary zone" isPrimary="true">
            <volumeGroups>
                <group>
                    <device address="bus0_media_out">
                        <context context="music"/>
                    </device>
                </group>
                <group>
                    <device address="bus1_navigation_out">
                        <context context="navigation"/>
                    </device>
                    <device address="bus2_voice_command_out">
                        <context context="voice_command"/>
                    </device>
                </group>
                ...
            </volumeGroups>
        </zone>
     </zones>
</audioZoneConfiguration>

각 볼륨 그룹에는 연결된 볼륨과 연결된 출력 장치가 있습니다. 주소는 다음에 정의된 출력 장치와 일치해야 합니다. audio_policy_configuration.xml

볼륨 그룹 게인 구성

각 볼륨 그룹에는 최소, 최대 및 기본 게인 값과 audio_policy_configuration.xml에 구성된 값에 따른 보폭 볼륨 그룹과 연결된 기기

<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
  <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
  <gains>
    <gain name="" mode="AUDIO_GAIN_MODE_JOINT"
      minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
  </gains>
</devicePort>

초기화 중에 볼륨 그룹은 연결된 볼륨의 게인 값을 기기를 설정하고 다음과 같이 그룹을 구성합니다.

  • 단계 크기. 볼륨 그룹으로 제어되는 모든 기기에서 동일해야 합니다.
  • 최소 게인. 그룹의 기기 중 가장 작은 최소 게인입니다.
  • 최대 게인. 그룹의 기기 중 가장 높은 최대 게인입니다.
  • 기본 게인. 그룹의 기기 중 가장 높은 기본 게인입니다.

이러한 값이 구성되는 방식을 고려할 때 볼륨 그룹이 볼륨과 연결된 기기에서 지원되는 범위를 벗어남 그룹 이 경우 해당 장치의 게인은 장치의 최소값 또는 최대 게인 값(볼륨 그룹 값 이하 또는 초과) 확인할 수 있습니다

볼륨 그룹 식별자

볼륨 그룹은 런타임 시 XML 파일에 정의된 순서대로 식별됩니다. ID의 범위는 오디오 영역 내에서 0부터 N-1까지이며, 여기서 N는 해당 영역의 볼륨 그룹이 있습니다 이렇게 하면 볼륨 그룹 ID가 구성할 수 있습니다 이러한 식별자는 연결된 CarAudioManager API에 사용됩니다. 살펴보겠습니다 zoneId 없이 groupId를 사용하는 모든 API 기본 오디오 영역으로 설정됩니다.

다중 영역 볼륨 관리

각 오디오 영역에는 하나 이상의 볼륨 그룹과 각 볼륨이 있어야 합니다. 하나의 오디오 영역과만 연결됩니다. 이 관계는 car_audio_configuration.xml에 포함되어 있습니다. 자세한 내용은 위의 예를 참고하세요. 볼륨 그룹 정의를 참고하세요.

각 영역의 현재 볼륨 수준은 지정할 수 있습니다 이 설정은 영역별로 다릅니다. 즉, 사용자가 기본 영역과 연결된 화면을 표시하고 나중에 영역에 로그인할 때 보조 오디오 영역과 연결된 볼륨 레벨을 첫 번째 영역이 보조 영역의 영역과 다릅니다.

볼륨 키 이벤트 처리

Android에서는 볼륨 제어를 위해 다음을 비롯한 여러 키 코드를 정의합니다.

  • KEYCODE_VOLUME_UP
  • KEYCODE_VOLUME_DOWN
  • KEYCODE_VOLUME_MUTE

기본적으로 Android는 볼륨 키 이벤트를 앱으로 라우팅합니다. 자동차 구현은 이러한 주요 이벤트가 CarAudioService는 다음과 같이 setGroupVolume 또는 setMasterMute를 호출합니다. 있습니다. 이 동작을 강제하려면 config_handleVolumeKeysInWindowManager 플래그를 true로 설정합니다.

<resources>
    <bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>

현재 볼륨 키 이벤트는 어떤 영역을 구별할 수 있는 방법이 없습니다. 모두 기본 클러스터와 연결된 것으로 가정하고 오디오 영역 볼륨 키 이벤트가 수신되면 CarAudioService가 결정합니다. 활성 오디오 컨텍스트를 가져와서 조정할 볼륨 그룹을 출력 장치가 포함된 볼륨 그룹을 조정하여 가장 높은 우선순위의 오디오 컨텍스트와 연결됩니다. 우선순위는 에 정의된 고정 순서에 따라 결정됨 CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY

페이드 및 밸런스

두 버전의 AudioControl HAL에는 페이드 및 밸런스 설정을 위한 API가 포함되어 있습니다. 실행합니다. CarAudioManager 패스 값의 해당 시스템 API AudioControl HAL에 전달합니다. 이 API에는 android.car.permission.CAR_CONTROL_AUDIO_VOLUME이 필요합니다. AudioControl API는 다음과 같습니다.

  • setBalanceTowardRight(float value)에서 스피커 볼륨을 오른쪽 (+) 또는 왼쪽 (-)에서 빼세요.

    • 0.0을 가운데 맞춤
    • +1.0이 완전히 맞음
    • -1.0 남음
    • -1과 1의 범위를 벗어난 값은 오류입니다.
  • setFadeTowardFront(float value)에서 스피커 볼륨을 차량의 전면 (+) 또는 후면 (-)에서 작동합니다.

    • 0.0을 가운데 맞춤
    • +1.0이 완전히 앞으로 옴
    • -1.0은 완전히 뒤쪽에 있음
    • -1과 1의 범위를 벗어난 값은 오류입니다.

이러한 값이 적용되는 방식과 있습니다. 미디어에만 적용하거나 전반적으로 모든 광고주에게 적용할 수 있음 Android 사운드 Android 11에는 출력 장치에 오디오 효과를 적용하는 데 사용됩니다. 이를 통해 또는 적절한 오디오 효과를 통해 페이드와 밸런스를 관리할 수 있습니다. 출력 장치를 사용할 수 있습니다.

오디오 볼륨 낮추기

오디오 볼륨 낮추기는 차량이 스트림 1개의 게인을 낮추면 다른 스트림이 더 선명하게 들립니다. AAOS에서는 오디오 볼륨 낮추기는 HAL에서 구현합니다. Android에서 소리를 제어할 수 없음 할 수 있습니다. Android 11의 기본 정보 볼륨 낮추기를 위해 HAL이 사용할 수 있는 두 개의 출력이 두 기기에 모두 활성 스트림이 있습니다.

볼륨 낮추기가 필요한 경우

볼륨 낮추기의 처리 방식을 결정하는 것은 개별 OEM에 달려 있지만 다음 가이드라인을 따르는 것이 좋습니다.

  • Android에서는 일반적으로 두 개의 앱 또는 서비스가 있을 때 여러 스트림이 재생됩니다. 오디오 포커스를 동시에 보유할 수 있습니다. Android에서 동시 실행 권한을 부여할 수 있는 경우 알아보기 제한 유형에서 상호작용 매트릭스를 참고하세요. 자동차 오디오 플러그인이 도입되면서 AudioFocus 관리

  • Android에서 믹싱하는 모든 스트림은 적용됩니다. 따라서 동시에 재생될 때 볼륨을 낮춰야 하는 모든 스트림은 다른 출력 장치와는 별도의 출력 장치로 라우팅되어야 볼륨 낮추기를 적용할 수도 있습니다

다음은 잠재적인 동시 상호작용 볼륨 낮추기를 권장합니다.

상호작용 작업
EMERGENCY SAFETY을(를) 제외한 모든 항목을 덕킹 또는 음소거합니다.
SAFETY EMERGENCY을(를) 제외한 모든 항목을 덕킹합니다.
NAVIGATION SAFETYEMERGENCY를 제외한 모든 항목을 덕킹합니다.
CALL SAFETY, EMERGENCY, 및 NAVIGATION
VOICE 오리 CALL_RING
VEHICLE_SOUNDS 능동 사운드의 중요성과 소리의 중요도를 사용자가 결정합니다. 다른 소리를 낮춥니다.
MUSICANNOUNCEMENT 모두 볼륨을 낮춥니다. 단, 터치 상호작용 알림음은 예외적으로 SYSTEM_SOUND

볼륨 낮추기 시 고려사항

내비게이션이나 어시스턴트와 같은 일부 앱과 서비스에서는 플레이어가 작업을 수행할 수 있습니다. 데이터 스트림 시 공격적인 추출 취소 피하기 미디어가 완전한 상태로 돌아가지 않도록 출력 장치를 통과하는 것을 멈춥니다. 내비게이션에서 다음 재생 전에 볼륨이 낮아지기 전에 어시스턴트 앱이 시작됩니다.

충분히 격리되는 여러 사운드 스테이지가 있는 차량의 경우 볼륨을 낮추는 대신 자동차의 다른 영역으로 오디오를 라우팅합니다. 예를 들어 내비게이션 지침을 운전자의 머리 받침대 스피커로 전달할 수 있으며 실내 전체에서 정상 볼륨으로 음악을 계속 재생합니다.

안전에 중요한 사운드

Android 11 출시 HAL 오디오 포커스 API. HAL은 안전에 중요한 사운드는 다른 사운드보다 우선합니다. HAL이 오디오를 보유한 경우 USAGE_EMERGENCY에 포커스를 두는 경우 Android에서 소리가 나지 않습니다. HAL은 Android의 어떤 스트림이 믹싱 또는 음소거하여 안전에 중요한 사운드를 재생합니다.

볼륨 설정 UI 구성

AAOS는 볼륨 그룹 구성에서 볼륨 설정 UI를 분리합니다. 이는 다음 문서에 설명된 대로 오버레이될 수 있습니다. 볼륨 그룹 게인을 구성합니다. 이렇게 분리하면 볼륨 그룹의 구성이 변경되어도 변경이 필요하지 않습니다.

자동차 설정 UI에서 packages/apps/Car/Settings/res/xml/car_volume_items.xml 에는 각 요소와 연결된 UI 요소 (제목 및 아이콘 리소스)가 포함됩니다. AudioAttributes.USAGE로 정의되었습니다. 이 파일은 적절한 렌더링을 위해 첫 번째 포드와 연결된 리소스를 사용하여 정의된 VolumeGroups의 각 VolumeGroup에 포함된 인식된 사용입니다.

예를 들어 다음 예에서는 VolumeGroupvoice_communicationvoice_communication_signalling. 기본값 자동차 설정 UI의 구현은 다음을 사용하여 VolumeGroup를 렌더링합니다. voice_communication와 연결된 리소스 있습니다.

<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
    <item car:usage="voice_communication"
          car:title="@*android:string/volume_call"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="voice_communication_signalling"
          car:title="@*android:string/volume_call"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="media"
          car:title="@*android:string/volume_music"
          car:icon="@*android:drawable/ic_audio_media"/>
    <item car:usage="game"
          car:title="@*android:string/volume_music"
          car:icon="@*android:drawable/ic_audio_media"/>
    <item car:usage="alarm"
          car:title="@*android:string/volume_alarm"
          car:icon="@*android:drawable/ic_audio_alarm"/>
    <item car:usage="assistance_navigation_guidance"
          car:title="@string/navi_volume_title"
          car:icon="@drawable/ic_audio_navi"/>
    <item car:usage="notification_ringtone"
          car:title="@*android:string/volume_ringtone"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistant"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
    <item car:usage="notification"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_request"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_instant"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_communication_delayed"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="notification_event"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistance_accessibility"
          car:title="@*android:string/volume_notification"
          car:icon="@*android:drawable/ic_audio_ring_notif"/>
    <item car:usage="assistance_sonification"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
    <item car:usage="unknown"
          car:title="@*android:string/volume_unknown"
          car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>

위의 구성에 사용된 속성과 값은 packages/apps/Car/Settings/res/values/attrs.xml에 선언됩니다. 볼륨 설정 UI는 다음 VolumeGroup 기반 CarAudioManager API를 사용합니다.

  • getVolumeGroupCount(): 그려야 하는 컨트롤 수를 알아봅니다.
  • getGroupMinVolume()getGroupMaxVolume(): 하한 및 상한을 가져옵니다.
  • getGroupVolume(): 현재 볼륨을 가져옵니다.
  • 볼륨 변경 알림을 받으려면 registerVolumeChangeObserver()하세요.

자동차 볼륨 그룹 이벤트

볼륨 업데이트 및 음소거 전환의 Automotive 사용 사례에는 컨텍스트가 있음 볼륨 등 특정 앱의 작업을 정의할 수 있는 설정을 변경할 수 있습니다. 자동차 오디오 스택의 현재 볼륨과 음소거 콜백은 제한된 문맥 정보를 사용할 수 있습니다. 자동차 사용 사례와 미래에 더 나은 서비스를 제공하기 위해 CarVolumeGroupEvent가 Android 14에 추가되었습니다. 각 이벤트는 세 가지 중요한 유형의 정보를 전달합니다.

  • CarVolumeGroupInfo의 목록
  • EventTypes (비트 매핑됨)
  • ExtraInfos의 목록

자동차 볼륨 그룹 정보

이벤트 콜백 수신자가 영향을 받은 자동차 목록에 액세스할 준비가 됨 볼륨 그룹 정보입니다. 즉, 앱에서 최신 상태를 가져오기 위한 자동차 오디오 프레임워크 추가 호출 가능 수신된 CarVolumeGroupInfos를 사용하여 UI 또는 내부 있습니다. 앱을 더 쉽게 사용할 수 있도록 차량 볼륨에서 변경된 측면 그룹은 아래에 설명된 대로 EventTypes의 일부로도 제공됩니다.

이벤트 유형

CarVolumeGroupInfo의 어떤 측면이 변경되었는지 정의합니다. 앱은 이 기능을 사용하여 다음 작업을 할 수 있습니다. 변경사항을 식별하고 필요한 조치를 취할 수 있습니다. 예를 들어 EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED는 각 CarVolumeGroups 최대 볼륨 게인 색인이 변경되었으며 다음을 통해 쿼리할 수 있습니다. CarVolumeGroupInfo.getMaxVolumeGainIndex()입니다.

다음 표는 EventType와(과) CarVolumeGroupInfo

이벤트 유형 자동차 볼륨 그룹 정보
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED CarVolumeGroupInfo.getVolumeGainIndex()
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED CarVolumeGroupInfo.getMinVolumeGainIndex()
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED CarVolumeGroupInfo.getMaxVolumeGainIndex()
EVENT_TYPE_MUTE_CHANGED CarVolumeGroupInfo.isMuted()
EVENT_TYPE_VOLUME_BLOCKED_CHANGED개 CarVolumeGroupInfo.isBlocked()
EVENT_TYPE_ATTENUATION_CHANGED됨 CarVolumeGroupInfo.isAttenuated()
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED(이벤트 유형 변경) CarVolumeGroupInfo.getAudioAttributes()

추가 정보

CarVolumeGroup가 변경된 이유에 관한 추가 정보를 제공합니다. 앱 이 정보를 사용하여 사용자에게 알림을 전송하거나 조치를 취하거나 알리는 데 필요합니다. 예: EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL 열 과부하로 인한 일시적인 활성 감쇠를 나타냅니다. 앱 사용자가 볼륨을 높이려고 할 때 이를 알릴 수 있습니다.

Google에서는 ExtraInfos에 대한 프로세스를 강제하지 않습니다. 이는 사용자의 재량에 달려 있습니다. ExtraInfos에 기반하여 프로세스를 결정합니다. 예를 들어 감쇠가 EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED(으)로 인해 활성 상태가 아닌 경우 다음 옵션을 선택할 수도 있습니다. 사용자가 볼륨을 변경하지 못하도록 처음에 볼륨 바 UI를 페이드 아웃합니다. 다른 사용자는 볼륨 낮추기가 활성 상태라는 토스트 메시지를 표시하고 사용자가 을 누릅니다.

자동차 오디오 프레임워크는 AudioControl HAL IAudioGainCallback에 따라 제안된 ExtraInfos를 제공합니다. 자세한 내용은 오디오 게인 콜백.

CarVolumeGroupEvent는 자동차 오디오 프레임워크의 향후 요구사항에 맞게 확장됩니다. CarVolumeGroupEvent 를 통해서만 새로운 기능을 지원할 계획입니다. 앱 개발자는 CarVolumeGroupEvent를 사용하여 그룹 볼륨 및 음소거 변경

자동차 볼륨 그룹 이벤트 콜백

Android 14는 권한 및 플랫폼 앱을 등록하고 CarVolumeGroupEvents의 알림을 받아야 합니다.

  • 콜백에 등록하려면 다음을 사용합니다. CarAudioManager#registerCarVolumeGroupEventCallback()

  • 콜백을 등록 취소하려면 다음을 사용하세요. CarAudioManager#unregisterCarVolumeGroupEventCallback()

앱이 새 CarVolumeGroupEventCallback 및 레거시에 등록하는 경우 CarVolumeCallback인 경우 CarVolumeGroupEventCallbacks 이벤트에 우선순위가 지정됩니다. 자동차 오디오 스택이 더 이상 CarVolumeCallback를 트리거하지 않습니다. 이렇게 하면 중복 트리거를 사용하는 것이 좋습니다.

CarVolumeGroupEventCallback를 사용하여 그룹 볼륨 및 음소거 변경

오디오 게인 콜백

Android 13부터 AudioControl HAL은 컨트롤의 변경으로 인한 볼륨 수준 업데이트를 관리하는 차량용 오디오 시스템입니다.

HAL API

AudioControl @2.0 AIDL

AudioControl AIDL HAL 버전 2.0에는 다음 API가 추가됩니다.

API 목적
IAudioControl#registerGainCallback IAudioGainCallback의 인스턴스를 AudioControl HAL에 등록합니다.
IAudioGainCallback#onAudioDeviceGainsChanged 오디오 게인 구성의 변경사항을 알리는 비동기식 콜백입니다.

AudioControl HAL 콜백에는 이유 목록과 각각의 AudioGainConfigInfo: 다음으로 구성됩니다.

  • 영역 ID
  • 기기 포트 주소
  • 볼륨 지수 > 색인은 제한된 색인 또는 업데이트 색인일 수 있습니다.

그 이유는 크게 다음과 같이 분류할 수 있습니다.

  • 제한 사유. 볼륨 및 음소거 동작이 일시적으로 변경됨
  • 업데이트 이유. 볼륨 동작이 영구적으로 변경됩니다.

제한사항 유형

AudioControl HAL AIDL V3부터 지원되는 유형은 다음과 같습니다. 제한:

  • 음소거
  • 차단
  • 제한사항
  • 감쇠
활성 제한 사용자가 트리거한 볼륨 변경 사용자 트리거 숨기기 전환
음소거 ❌ (음소거 해제)

✔ (음소거)
차단
제한사항 ❌ (한도 초과)

✔ (한도 미만)
감쇠

두 제한사항 사이의 우선순위는 음소거 > 차단 > 제한사항 > 감쇠.

숨기기 제한

숨기기 제한은 다음과 같습니다.

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

자동차 오디오 프레임워크는 내부적으로 다음 두 가지 음소거 상태를 유지합니다.

  • 사용자 숨기기. 다음을 통해 또는 사용자의 요청에 따라 전환됨 CarAudioManager 또는 키 이벤트

  • HAL 음소거. AudioGain을 통해 수신된 음소거 제한에 따라 전환됨 있습니다.

설정 앱과 같은 리스너의 경우 볼륨 그룹 전체 음소거가 (CarVolumeGroupInfo.isMuted()) 상태는 다음 중 하나가 충족되지 않는지에 따라 결정됩니다. 위의 음소거가 사용 설정됩니다.

HAL 음소거가 사용 설정되면 수신되는 모든 볼륨이 변경되고 그룹 음소거가 해제됩니다. 요청은 제한 기간 동안 무시됩니다.

상호작용 사례: HAL 음소거가 활성 상태이며 사용자의 음소거 전환 요청

HAL 음소거가 사용 설정되고 사용자 음소거가 사용 중지된 경우:

  • 볼륨 그룹의 전체 음소거 상태가 true(으)로 변경됩니다.
  • 사용자의 숨기기 사용 설정 요청이 처리됩니다.
    • 이유: 사용자 개인 정보 보호를 위해 사용자 숨기기 요청은 항상 이루어져야 합니다.

HAL 음소거가 사용 설정되고 사용자 음소거가 사용 설정된 경우:

  • 볼륨 그룹의 전체 음소거 상태가 true(으)로 변경됩니다.

  • 음소거를 사용 중지해 달라는 사용자의 요청은 NOT 처리됩니다. 캐시된 사용자 음소거 상태가 사용 설정된 상태로 유지됩니다.

    • 이유: 사용자의 숨기기 취소 요청은 활성 제한이 없는 경우에만 인정됩니다.

    • 원인: 캐시된 사용자 음소거를 음소거 해제하면 의도하지 않은 사운드 폭발이 발생할 수 있고 사용자 안전을 위협할 수 있습니다. 음소거 상태가 사용 설정된 경우 특히 그렇습니다. 사용자의 인터넷 접속 속도가 느려지는 소리 수준 인식 있습니다.

상호작용 사례: 사용자 음소거에 변경사항이 없는 동안 HAL 음소거가 사용 설정 및 사용 중지됨

HAL 음소거를 전환하면 볼륨 그룹 전체 음소거 상태가 변경됩니다. 그러나 사용자 음소거 상태를 직접 업데이트하지는 않습니다. 사용자 음소거가 사용 중지되고 HAL 음소거가 설정된 경우 사용 설정할 콜백이 수신됩니다.

  • 볼륨 그룹의 전체 음소거 상태가 true(으)로 변경됩니다.
  • HAL 음소거 중에 사용자의 볼륨 변경 요청은 NOT 처리됩니다. 사용 설정되어 있는지 확인합니다.

    • 이유: 음소거가 사용 설정되어 있는 동안 사용자가 소리를 인식할 수 없습니다. 허용 소리가 폭발하여 사용자의 안전을 위협할 수 있습니다.

    • 이유: 볼륨 앱이 콜백을 등록하고 음소거 해제를 트리거할 수 있음 (CarAudioManager.setVolumeGroupMute(...,/* mute=*/ true,..)) 사용자의 개입 없이 자동으로, 이것이 예상된 동작인 경우 생성합니다.

사용자 음소거가 사용 중지된 상태에서 HAL 음소거가 사용 중지되는 경우:

  • 볼륨 그룹 음소거 상태가 false(으)로 변경되었습니다.

    이유: 음소거 상태를 고정시키고 사용자에게 음소거 해제를 요청하면 음소거 상태가 자주 전환되면 사용자를 불필요하게 방해하는 요소가 됩니다.

  • 사용자의 볼륨 변경 요청은 정상적으로 처리됩니다.

차단

차단 제한은 다음과 같습니다.

  • Reasons.FORCED_MASTER_MUTE
  • Reasons.REMOTE_MUTE
  • Reasons.TCU_MUTE.

차단 제한이 활성화되면 사용자로부터 다음을 요청할 수 있습니다.

  • 볼륨 변경은 처리되지 않습니다.
  • 음소거 전환 버튼이 처리됩니다.

제한사항

제한사항은 다음과 같습니다.

  • Reasons.THERMAL_LIMITATION
  • Reasons.SUSPEND_EXIT_VOL_LIMITATION

제한사항 제한이 활성화되면 다음과 같은 사용자의 요청이 전송됩니다.

  • 볼륨 변경:

    • 제한 내에서 처리됨
    • 위의 제한사항은 처리되지 않습니다.
  • 음소거 전환 버튼이 처리됩니다.

감쇠

감쇠 제한사항은 다음과 같습니다.

  • Reasons.ADAS_DUCKING
  • Reasons.NAV_DUCKING
  • Reasons.PROJECTION_DUCKING

감쇠 제한이 활성화되면 사용자의 다음 요청:

  • 볼륨 변경이 처리됩니다. 새로운 현재 볼륨 수준이 감쇠된 볼륨입니다. 향후 볼륨 변경 이 수준에서 이루어집니다.

  • 음소거 전환 버튼이 처리되었습니다.

색인으로 업데이트

다음은 비동기 볼륨 색인 업데이트로 간주됩니다. Reasons.EXTERNAL_AMP_VOL_FEEDBACK

따라서 AudioControl HAL은 볼륨 그룹 현재 색인을 업데이트할 수 있습니다. 지정된 색인에 추가합니다. 주로 오디오 시스템의 피드백으로 사용됩니다. 자동차 오디오 프레임워크의 볼륨 변경 요청에 사용됩니다. 색인 업데이트는 동기화하기 위해 CarVolumeGroupEvent 콜백으로 앱과도 통신됩니다. 생성합니다.

사용 사례: 사용자가 볼륨 지수를 30으로 업데이트합니다.

  • 사용자가 볼륨 앱을 사용하여 볼륨 지수를 30으로 변경합니다.

  • 이 색인은 볼륨 게인으로 변환되어 오디오 HAL로 전송됩니다.

  • Audio HAL의 공급업체 구현은 새로운 볼륨 게인 및 업데이트를 수신합니다. 오디오 시스템 (예: 외부 앰프)입니다.

  • 오디오 시스템에서 볼륨 수준이 색인 15로만 업데이트된다고 응답함 (Android에서 알 수 없는 이유로)

  • AudioControl HAL 트리거의 공급업체 구현은 다음을 충족해야 합니다.

    IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {...,  15 /* New index */})
    
  • 자동차 오디오 서비스는 다음에 사용되는 콜백의 새 색인을 소비합니다. 지속성 및 볼륨 앱에 대한 콜백입니다. 사용자 요청 색인은 30입니다. 그러나 오디오 시스템 비동기 피드백은 색인을 15로 업데이트합니다.

사용 사례: 정지를 종료한 후 첫 번째 오디오 재생

  • 정지 전 볼륨 지수가 높은 수준인 95 (범위: [0~99])로 설정됩니다.

  • Android가 정지 상태로 전환됩니다.

  • Android가 존재하면 정지 (예: 재개)는 다음과 같습니다.

    • 공급업체 Audio HAL/AudioControl HAL는 30의 안전 인덱스를 로컬 오디오 시스템입니다.

    • 공급업체 AudioControl HAL는 안전 색인의 콜백도 트리거합니다.

    IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {...,  30 /* safe index */})
    
  • 자동차 오디오 서비스는 다음에 사용되는 콜백의 새 색인을 소비합니다. 지속성 및 색인을 동기화하는 볼륨 앱에 대한 자체 콜백입니다. 정지 전 볼륨 지수는 95입니다. 그러나 재개 후 이 색인은 AudioControl HAL 구현자가 안전한 볼륨 수준을 30으로 설정합니다.

를 통해 개인정보처리방침을 정의할 수 있습니다.

동적 볼륨 구성

이 기능의 주요 사용 사례는 다음과 같습니다.

  1. 차량 라인 끝 (EOL) 구성.

    • 자동차 제조업체는 EOL에 차량을 기준으로 볼륨 구성을 업데이트하는 것을 선호함 오디오 시스템 설정입니다. 일반적으로 이는 Android SW 이미지

    • 자동차 제조업체는 일정 시간 동안 볼륨 구성을 업데이트해야 할 수 있습니다. 서비스 일정입니다

  2. 런타임 구성. Automotive 오디오 시스템은 외부 지원 앰프 구성과 이러한 ECU는 볼륨 범위를 호스팅할 수 있음 부팅 시간 동안 쿼리되는 구성을 제어합니다.

  3. 주문형 구성. IT 지원 전문가들의 필요성 증가를 지원하기 위해 사용자가 향상된 신호를 구독하는 수요 기반 오디오 기능 사용하여 데이터를 전송합니다. 새로운 볼륨 범위 구성은 구독 기간 동안 유효합니다.

디자인

동적 볼륨 구성은 다음 세 단계로 이루어집니다.

  • 탐색. 공급업체 AudioControl HAL 구현이 새 볼륨을 탐색합니다. 공급업체가 소유한 맞춤형 IPC 메커니즘을 통해 범위 업데이트를 수행합니다.

    검색된 후에는 다음을 통해 콜백이 생성됩니다. AudioControl::IModuleChangeCallback

  • 업데이트. 자동차 오디오 스택이 볼륨 그룹 상태를 새로운 확인할 수 있습니다

    볼륨 범위 업데이트 후에도 동일한 볼륨 수준을 유지하기 위해 노력하고 있습니다. 하지만 색인이 범위를 벗어나면 현재 볼륨 색인은 다음과 같이 설정됩니다. 제공합니다 예를 들어 시스템 기간 중에 공급업체가 제공하는 있습니다.

  • 콜백.

    • 볼륨 그룹 범위 업데이트 후 자동차 오디오 스택은 CarVolumeGroupEventCallback을(를) 통해 등록된 앱

    • CarVolumeGroupEvent는 업데이트된 CarVolumeGroupInfo, 이벤트 유형을 전달합니다. (변경된 내용) 및 추가 정보 (변경 이유)를 확인할 수 있습니다.

이미지

그림 1. 동적 볼륨 구성

HAL API

AudioControl @ 3.0 AIDL

AudioControl AIDL HAL 버전 3.0에는 다음 API가 도입되었습니다.

API
IAudioControl#setModuleChangeCallback AudioControl HAL을 사용하여 IModuleChangeCallback의 인스턴스를 설정합니다.
IAudioControl#clearModuleChangeCallback 이전에 다음과 같이 설정된 IModuleChangeCallback의 인스턴스를 지웁니다. AudioControl HAL
IModuleChangeCallback#onAudioPortsChanged AudioPorts 변경사항을 알리는 콜백입니다.

순서

아래에는 동적 볼륨 구성의 시퀀스 다이어그램이 있습니다.

이미지

그림 2. 동적 볼륨 구성의 시퀀스 다이어그램

주요 특징

이 기능을 최적화하려면 다음 사항을 고려하세요.

  • 콜백의 일부로 제공된 AudioPort는 Automotive에 반드시 일치해야 합니다. BUS 정의:

    • 기기 포트. IN_DEVICE, OUT_DEVICE
    • 연결. BUS
    • 주소. 오디오 HAL 정의에 정의됨
    • 게인 모드. JOINT
  • 공급업체는 오디오에서 볼륨 범위 정의의 상위 집합을 정의해야 합니다. HAL 정책을 적용하고 콜백을 사용하여 차량 옵션에 맞게 맞춤설정합니다. 자세한 내용은 IModuleChangeCallbac 자세한 내용은 AIDL 정의를 참고하세요.

  • 2개 이상의 오디오 BUS가 동일한 볼륨 그룹에 속하는 경우 각각 반드시 볼륨 범위 정의가 동일합니다. 그렇지 않으면 차량이 탑승합니다. 새 볼륨 범위 정의를 거부하는 오디오 프레임워크입니다.