Tính năng quản lý âm lượng có trong CarAudioService
, sử dụng các số lượng cố định
với kỳ vọng rằng âm lượng được phần cứng áp dụng dưới HAL
bộ khuếch đại thay vì vào phần mềm. CarAudioService
sắp xếp các thiết bị đầu ra
vào các nhóm âm lượng để áp dụng cùng một mức tăng cho tất cả các thiết bị được liên kết với một
nhóm âm lượng.
Âm lượng cố định
Các quá trình triển khai AAOS sử dụng bộ khuếch đại phần cứng để điều khiển âm lượng thay vì
phần mềm trộn. Để tránh tác dụng phụ, hãy đặt cờ config_useFixedVolume
thành
true
(lớp phủ khi cần):
<resources>
<!-- Car uses hardware amplifier for volume. -->
<bool name="config_useFixedVolume">true</bool>
</resources>
Khi cờ config_useFixedVolume
không được đặt (hoặc được đặt thành false
),
các ứng dụng có thể gọi AudioManager.setStreamVolume()
để thay đổi âm lượng theo luồng
nhập vào bộ trộn phần mềm. Điều này không phải lúc nào cũng như mong muốn do tiềm năng
ảnh hưởng đến các ứng dụng khác và trên thực tế là việc giảm âm lượng trong bộ trộn phần mềm
có thể làm giảm số bit quan trọng có sẵn trong tín hiệu khi nhận được bởi
bộ khuếch đại phần cứng.
Nhóm âm lượng
Nhóm âm lượng quản lý âm lượng của một tập hợp thiết bị trong một bản âm thanh vùng. Đối với mỗi nhóm âm lượng, bạn có thể kiểm soát âm lượng một cách độc lập. Chiến lược phát hành đĩa đơn mức tăng thu được được định cấu hình trên các thiết bị liên kết sẽ được áp dụng bởi bộ khuếch đại âm thanh của xe. Các chế độ cài đặt âm lượng sẽ được duy trì cho người dùng và sẽ được tải khi người dùng đăng nhập.
Xác định nhóm âm lượng
CarAudioService sử dụng các nhóm âm lượng được xác định trong 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>
Mỗi nhóm âm lượng phải chứa một hoặc nhiều thiết bị đầu ra có liên kết
của bạn. Địa chỉ phải tương ứng với các thiết bị đầu ra được xác định trong
audio_policy_configuration.xml
.
Thiết lập mức tăng nhóm số lượng
Mỗi nhóm âm lượng có các giá trị mức tăng tối thiểu, tối đa và mặc định cũng như
kích thước bước dựa trên các giá trị được định cấu hình trong audio_policy_configuration.xml
cho thuộc tính
thiết bị được liên kết với nhóm âm lượng.
<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>
Trong quá trình khởi chạy, nhóm âm lượng sẽ kiểm tra giá trị mức tăng của giá trị liên kết thiết bị và định cấu hình nhóm như sau:
- Kích thước bước. Phải giống nhau đối với tất cả các thiết bị do nhóm âm lượng kiểm soát.
- Mức tăng tối thiểu. Mức tăng tối thiểu nhỏ nhất trong số các thiết bị trong nhóm.
- Mức tăng tối đa. Mức tăng tối đa cao nhất trong số các thiết bị trong nhóm.
- Mức tăng mặc định. Mức tăng mặc định cao nhất trong số các thiết bị trong nhóm.
Do cách những giá trị này được định cấu hình, bạn có thể đặt mức tăng nhóm âm lượng nằm ngoài phạm vi được hỗ trợ của một thiết bị liên kết với âm lượng đó nhóm. Trong trường hợp này, đối với thiết bị đó, mức tăng âm được đặt thành giá trị nhỏ nhất của thiết bị hoặc giá trị tăng tối đa dựa trên giá trị của nhóm âm lượng thấp hơn hay cao hơn dải ô.
Mã nhận dạng nhóm tập
Các nhóm ổ đĩa được xác định trong thời gian chạy theo thứ tự đã xác định trong tệp XML.
Các mã nhận dạng dao động từ 0
đến N-1
trong một vùng âm thanh, trong đó N
là số lượng
trong vùng đó. Bằng cách này, mã nhóm âm lượng không phải là riêng biệt
trên các vùng. Các giá trị nhận dạng này dùng cho các API CarAudioManager
được liên kết
với các nhóm âm lượng. Bất kỳ API nào nhận groupId
mà không có zoneId
đặt mặc định thành vùng âm thanh chính.
Quản lý âm lượng trên nhiều vùng
Mỗi vùng âm thanh dự kiến sẽ có một hoặc nhiều nhóm âm lượng và mỗi nhóm âm lượng
nhóm chỉ được liên kết với một vùng âm thanh. Mối quan hệ này được định nghĩa
trong car_audio_configuration.xml
. Để tìm hiểu thêm, hãy xem ví dụ ở trên
trong mục Xác định nhóm âm lượng.
Người dùng liên kết với từng vùng sẽ duy trì mức âm lượng hiện tại vùng đó. Các cài đặt này theo vùng cụ thể, có nghĩa là nếu người dùng đăng nhập trên màn hình được liên kết với vùng chính rồi sau đó là các đăng nhập vào vùng liên kết với vùng âm thanh cấp hai, mức âm lượng được tải và duy trì trong vùng đầu tiên khác với vùng phụ.
Xử lý các sự kiện chính về âm lượng
Android xác định một số mã phím để điều khiển âm lượng, bao gồm:
KEYCODE_VOLUME_UP
KEYCODE_VOLUME_DOWN
KEYCODE_VOLUME_MUTE
Theo mặc định, Android định tuyến các sự kiện chính về âm lượng đến các ứng dụng. Ô tô
Quá trình triển khai phải buộc các sự kiện chính này được xử lý bởi
CarAudioService
, sau đó sẽ gọi setGroupVolume
hoặc setMasterMute
dưới dạng
phù hợp. Để buộc thực hiện hành vi này, hãy đặt
config_handleVolumeKeysInWindowManager
gắn cờ thành true
:
<resources>
<bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>
Các sự kiện chính âm lượng hiện không có cách nào phân biệt vùng nào
chúng dành cho và được giả định là tất cả được liên kết với
vùng âm thanh. Khi nhận được một sự kiện chính âm lượng, CarAudioService
sẽ xác định
cần điều chỉnh nhóm âm lượng nào bằng cách tìm nạp ngữ cảnh âm thanh cho
trình phát rồi điều chỉnh nhóm âm lượng chứa thiết bị đầu ra
được liên kết với bối cảnh âm thanh có mức độ ưu tiên cao nhất. Mức độ ưu tiên là
được xác định dựa trên một thứ tự cố định được xác định trong
CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY
.
Làm mờ và cân bằng
Cả hai phiên bản AudioControl HAL đều có các API để thiết lập độ mờ và độ cân bằng
trong xe. API hệ thống tương ứng cho các giá trị chuyển CarAudioManager
vào HAL AudioControl. Các API này yêu cầu
android.car.permission.CAR_CONTROL_AUDIO_VOLUME
. Các API AudioControl bao gồm:
setBalanceTowardRight(float value)
chuyển âm lượng loa về phía bên phải (+) hoặc bên trái (-) của xe.- 0.0 được căn giữa
- +1.0 là hoàn toàn chính xác
- Còn lại hoàn toàn -1.0
- Giá trị nằm ngoài phạm vi từ -1 đến 1 là lỗi
setFadeTowardFront(float value)
chuyển âm lượng loa về phía phía trước (+) hoặc phía sau (-) của ô tô.- 0.0 được căn giữa
- +1,0 là chuyển tiếp hoàn toàn
- -1.0 hoàn toàn ở phía sau
- Giá trị nằm ngoài phạm vi từ -1 đến 1 là lỗi
Bạn quyết định cách áp dụng các giá trị này và cách hiển thị các giá trị này người dùng. Các đề xuất có thể được áp dụng hoàn toàn cho phương tiện truyền thông hoặc trên bảng cho tất cả Âm thanh Android. Android 11 cũng ra mắt tính năng hỗ trợ để áp dụng hiệu ứng âm thanh cho các thiết bị đầu ra. Với giải pháp này, bạn có thể ngoài ra, hãy quản lý độ mờ và độ cân bằng thông qua hiệu ứng âm thanh trên trang đầu ra thay vì thông qua các API này.
Giảm âm thanh
Giảm âm thanh xảy ra khi xe giảm khuếch đại âm thanh cho một luồng để người dùng có thể nghe thấy rõ hơn một luồng khác đang phát cùng lúc. Trong AAOS, tính năng giảm âm thanh được HAL triển khai. Android không kiểm soát được âm thanh ngoài hệ điều hành. Trong Android 11, thông tin chính có sẵn cho HAL để đưa ra quyết định tránh né là liệu có hai đầu ra hay không cả hai thiết bị đều có luồng đang hoạt động.
Thời điểm nên giảm bớt
Mặc dù OEM riêng lẻ xác định cách xử lý tính năng giảm độ phân giải HAL, chúng tôi đề xuất các nguyên tắc sau.
Nhiều luồng phát trong Android thường xảy ra khi hai ứng dụng hoặc dịch vụ đồng thời giữ quyền phát âm thanh. Để tìm hiểu thời điểm Android có thể cấp quyền đồng thời xem ma trận tương tác trong phần Các loại hạn chế. Với sự ra mắt của trình bổ trợ âm thanh cho ô tô, điều này cũng phụ thuộc vào Quản lý AudioFocus.
Mọi luồng dữ liệu do Android kết hợp với nhau đều được thực hiện trước khi có lợi ích áp dụng. Do đó, bất kỳ sự kiện phát trực tiếp nào cần được tắt khi phát đồng thời với một thiết bị khác nên được định tuyến đến các thiết bị đầu ra riêng biệt để HAL có thể hãy giảm hiệu suất trước khi kết hợp.
Hành vi giảm kích thước được đề xuất
Sau đây là một số loại tương tác có thể đồng thời được giảm bớt.
Tương tác | Hành động |
---|---|
EMERGENCY
| Giảm âm thanh hoặc tắt tiếng mọi thứ trừ SAFETY
|
SAFETY |
Vịt mọi thứ trừ EMERGENCY |
NAVIGATION |
Giảm mọi thứ ngoại trừ SAFETY và EMERGENCY |
CALL |
Vịt mọi thứ ngoại trừ SAFETY , EMERGENCY ,
và NAVIGATION |
VOICE |
Vịt CALL_RING |
VEHICLE_SOUNDS |
Bạn sẽ quyết định tầm quan trọng của âm thanh chủ động và liệu âm thanh đó có hay không loại bỏ các âm thanh khác. |
MUSIC và ANNOUNCEMENT |
Tôi bị thu hút bởi mọi thứ. Trường hợp ngoại lệ là âm tương tác chạm được phát như
SYSTEM_SOUND .
|
Những điều cần cân nhắc khi giảm số lượt chuyển đổi
Một số ứng dụng và dịch vụ, chẳng hạn như điều hướng hoặc trợ lý, có thể sử dụng nhiều người chơi để thực hiện hành động. Tránh tắt tiếng linh hoạt khi luồng dữ liệu ngừng truyền qua các thiết bị đầu ra để đảm bảo nội dung nghe nhìn không trở về mức đầy trước khi giảm âm lượng trước3 lần phát tiếp theo từ thanh điều hướng hoặc ứng dụng Trợ lý khởi động.
Đối với những xe có nhiều giai đoạn âm thanh với độ cách ly đủ tốt, bạn có thể định tuyến âm thanh đến các khu vực khác nhau trong xe thay vì giảm âm lượng. Ví dụ: có thể chuyển hướng dẫn đi theo chỉ dẫn đến loa tựa đầu của người lái trong khi tiếp tục phát nhạc trong suốt cabin ở mức âm lượng bình thường.
Âm thanh cảnh báo an toàn
Ra mắt Android 11
API tập trung âm thanh HAL. HAL đảm bảo
âm thanh cần đảm bảo độ an toàn được ưu tiên hơn các âm thanh khác. Nếu HAL giữ âm thanh
tập trung vào USAGE_EMERGENCY
, nên chúng tôi không thể đảm bảo rằng các ứng dụng và dịch vụ từ
Android sẽ không phát âm thanh. HAL xác định những luồng từ Android
được kết hợp hoặc tắt tiếng để phát các âm thanh cần đảm bảo an toàn.
Định cấu hình giao diện người dùng cài đặt âm lượng
AAOS tách giao diện người dùng của chế độ cài đặt âm lượng khỏi cấu hình nhóm âm lượng. Các mục này có thể được phủ lên trên như được mô tả trong Định cấu hình mức tăng nhóm số lượng. Việc phân tách này đảm bảo bạn không cần thay đổi gì nếu cấu hình của các nhóm âm lượng thay đổi.
Trong giao diện người dùng cài đặt trên ô tô, packages/apps/Car/Settings/res/xml/car_volume_items.xml
chứa các thành phần giao diện người dùng (tài nguyên tiêu đề và biểu tượng) liên kết với mỗi thành phần
AudioAttributes.USAGE
xác định. Tệp này cung cấp khả năng kết xuất hợp lý
trong VolumeGroups
được xác định bằng cách sử dụng tài nguyên được liên kết với phần tử đầu tiên
thông tin sử dụng được ghi nhận có trong mỗi VolumeGroup
.
Ví dụ: ví dụ sau đây định nghĩa VolumeGroup
bao gồm
voice_communication
và voice_communication_signalling
. Mặc định
phương thức triển khai giao diện người dùng cài đặt ô tô sẽ kết xuất VolumeGroup
bằng cách sử dụng
tài nguyên liên kết với voice_communication
vì đó là matc đầu tiên
trong tệp.
<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>
Các thuộc tính và giá trị dùng trong cấu hình ở trên được khai báo trong
packages/apps/Car/Settings/res/values/attrs.xml
. Giao diện người dùng cài đặt âm lượng sử dụng
các API CarAudioManager dựa trên VolumeGroup
sau đây:
getVolumeGroupCount()
để tìm hiểu số lượng thành phần điều khiển sẽ được vẽ.getGroupMinVolume()
vàgetGroupMaxVolume()
để sử dụng giới hạn dưới và giới hạn trên.getGroupVolume()
để lấy âm lượng hiện tại.registerVolumeChangeObserver()
để được thông báo về thay đổi âm lượng.
Sự kiện về nhóm âm lượng ô tô
Các trường hợp sử dụng của nút bật/tắt tiếng và cập nhật âm lượng trên Automotive sẽ có bối cảnh nền tảng có thể xác định hành động của một số ứng dụng, chẳng hạn như âm lượng phần cài đặt. Lệnh gọi lại tắt tiếng và âm lượng hiện tại từ ngăn xếp âm thanh trên ô tô cung cấp thông tin theo ngữ cảnh hạn chế. Để phục vụ tốt hơn cho các trường hợp sử dụng ô tô và trong tương lai khả năng mở rộng, CarVolumeGroupEvent được thêm vào Android 14. Mỗi sự kiện chứa ba loại thông tin quan trọng:
- Danh sách
CarVolumeGroupInfo
EventTypes
(được liên kết bit)- Danh sách
ExtraInfos
Thông tin nhóm ô tô
Trình nhận lệnh gọi lại sự kiện đã có quyền truy cập vào danh sách ô tô bị ảnh hưởng
thông tin về nhóm âm lượng. Điều này có nghĩa là ứng dụng không cần thực hiện bất kỳ
các lệnh gọi bổ sung đến khung Âm thanh cho ô tô để nhận trạng thái mới nhất. Chiến dịch này có thể
chỉ cần sử dụng CarVolumeGroupInfos
đã nhận để cập nhật giao diện người dùng hoặc
các trạng thái. Để giúp các ứng dụng dễ dàng sử dụng hơn, các khía cạnh đã thay đổi trong âm lượng của ô tô
Nhóm cũng được cung cấp như một phần của EventTypes
, như được giải thích dưới đây.
Loại sự kiện
Xác định khía cạnh nào của CarVolumeGroupInfo
đã thay đổi. Các ứng dụng có thể dùng thông tin này để
xác định các thay đổi và thực hiện hành động bắt buộc. Ví dụ:
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED
cho biết rằng các đường liên kết
Chỉ mục tăng âm lượng tối đa CarVolumeGroups
đã thay đổi và có thể được truy vấn bằng
CarVolumeGroupInfo.getMaxVolumeGainIndex()
.
Bảng sau đây trình bày mối quan hệ giữa EventType
và
CarVolumeGroupInfo
.
Loại sự kiện | Thông tin nhóm ô tô |
---|---|
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED | CarvolumeGroupInfo.getVolumeGainIndex() |
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED | CarvolumeGroupInfo.getMinVolume7Index() |
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED | CarVolumeGroupInfo.getMaxVolumeGainIndex() |
EVENT_TYPE_MUTE_CHANGED | CarVolumeGroupInfo.isDisable() |
EVENT_TYPE_VOLUME_BLOCKED_CHANGED | CarVolumeGroupInfo.isBlocked() |
EVENT_TYPE_ATTENUATION_CHANGED | CarvolumeGroupInfo.isAttenuated() |
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED | CarVolumeGroupInfo.getAudioAttributes() |
Thông tin bổ sung
Cung cấp thêm thông tin về lý do CarVolumeGroup
thay đổi. Chiến dịch Quảng cáo ứng dụng
có thể sử dụng thông tin này để cung cấp thêm ngữ cảnh nhằm cảnh báo cho người dùng
để hành động hoặc thông báo. Ví dụ: EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL
cho biết hiện tượng suy giảm tạm thời chủ động do quá tải nhiệt. Ứng dụng
có thể thông báo cho người dùng nếu họ cố tăng âm lượng.
Chúng tôi không thực thi bất kỳ quy trình nào đối với ExtraInfos
. Tuỳ thuộc vào quyết định của bạn
để xác định quy trình dựa trên ExtraInfos
. Ví dụ: nếu sự suy giảm
hoạt động do EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED
, bạn cũng có thể chọn
làm mờ giao diện người dùng thanh âm lượng ban đầu để ngăn người dùng thay đổi âm lượng.
Những người khác có thể chọn hiển thị một thông báo ngắn cho biết chế độ tránh đang hoạt động và cho phép người dùng
để thay đổi âm lượng.
Khung âm thanh của ô tô phụ thuộc vào AudioControl HAL IAudioGainCallback
để
hãy cung cấp ExtraInfos
được đề xuất. Để tìm hiểu thêm, hãy xem
Lệnh gọi lại mức nhận âm thanh.
CarVolumeGroupEvent
điều chỉnh để đáp ứng nhu cầu trong tương lai của khung âm thanh ô tô. T4
chúng tôi dự định chỉ hỗ trợ các tính năng mới thông qua CarVolumeGroupEvent
. T4
nhà phát triển ứng dụng nên sử dụng CarVolumeGroupEvent
để xử lý
những thay đổi về âm lượng nhóm và tắt tiếng.
Lệnh gọi lại sự kiện nhóm số lượng ô tô
Android 14, cung cấp lệnh gọi lại mới cho đặc quyền và
để đăng ký và nhận thông báo về CarVolumeGroupEvents
.
Để đăng ký gọi lại, hãy sử dụng
CarAudioManager#registerCarVolumeGroupEventCallback()
Để huỷ đăng ký lệnh gọi lại, hãy sử dụng
CarAudioManager#unregisterCarVolumeGroupEventCallback()
Nếu một ứng dụng đăng ký bằng CarVolumeGroupEventCallback
mới và cũ
CarVolumeCallback
, sự kiện CarVolumeGroupEventCallbacks
được ưu tiên.
Ngăn xếp âm thanh của ô tô không còn kích hoạt CarVolumeCallback
. Điều này giúp ngăn chặn
các trình kích hoạt trùng lặp vào cùng một ứng dụng cho cùng một sự kiện.
Bạn nên sử dụng CarVolumeGroupEventCallback
để quản lý
những thay đổi về âm lượng nhóm và tắt tiếng.
Lệnh gọi lại mức tăng âm thanh
Kể từ Android 13, HAL AudioControl có thể kích hoạt lệnh gọi lại không đồng bộ để quản lý thông tin cập nhật mức âm lượng do những thay đổi đối với hệ thống âm thanh xe hơi.
API HAL
AudioControl @2.0 AIDL
Phiên bản 2.0 của AudioControl AIDL HAL sẽ thêm API sau:
API | Mục đích |
---|---|
IAudioControl#registerGainCallback |
Đăng ký một thực thể của IAudioGainCallback bằng HAL AudioControl. |
IAudioGainCallback#onAudioDeviceGainsChanged |
Lệnh gọi lại không đồng bộ để thông báo về các thay đổi đối với cấu hình mức tăng âm thanh. |
Lệnh gọi lại AudioControl HAL bao gồm danh sách nguyên nhân và các lỗi tương ứng
AudioGainConfigInfo
, bao gồm:
- Mã vùng
- Địa chỉ cổng thiết bị
- Chỉ mục âm lượng > chỉ mục có thể là chỉ mục bị hạn chế hoặc chỉ mục cập nhật.
Các lý do có thể phân loại chung như sau:
- Lý do hạn chế. Thay đổi tạm thời về âm lượng và hành vi tắt tiếng.
- Lý do cập nhật. Thay đổi vĩnh viễn đối với hành vi của ổ đĩa.
Loại quy định hạn chế
Kể từ AudioControl
HAL AIDL
V3
, sau đây là các loại tệp được hỗ trợ
hạn chế:
- Tắt tiếng
- Chặn
- Giới hạn
- Suy giảm
Chế độ hạn chế đang hoạt động | Thay đổi âm lượng do người dùng kích hoạt | Bật/tắt chế độ tắt tiếng do người dùng kích hoạt |
---|---|---|
Tắt tiếng | ❌ | ❌ (bật tiếng) ✔ (tắt tiếng) |
Chặn | ❌ | ✔ |
Giới hạn | ❌ (vượt quá giới hạn) ✔ (dưới giới hạn) |
✔ |
Suy giảm | ✔ | ✔ |
Mức độ ưu tiên giữa các hạn chế là Tắt tiếng > Chặn > Giới hạn > Mức độ suy giảm.
Hạn chế tắt tiếng
Các hạn chế tắt tiếng:
Reasons.TCU_MUTE
Reasons.REMOTE_MUTE
Khung âm thanh trên ô tô duy trì nội bộ 2 trạng thái tắt tiếng sau:
Tắt tiếng người dùng. Được bật dựa trên yêu cầu của người dùng, thông qua
CarAudioManager
hoặc sự kiện chính.Tắt tiếng HAL. Được chuyển đổi dựa trên hạn chế tắt tiếng nhận được qua
AudioGain
.
Đối với những người nghe như ứng dụng Cài đặt, tính năng tắt tiếng tổng thể của nhóm âm lượng
(CarVolumeGroupInfo.isMuted()
) sẽ dựa trên việc một trong hai
các nút tắt tiếng ở trên đã được bật.
Khi chế độ tắt tiếng HAL được bật, tất cả sự thay đổi về âm lượng đến và bật tiếng nhóm sẽ bị bỏ qua trong khoảng thời gian hạn chế.
Trường hợp tương tác: Tắt tiếng HAL đang hoạt động và Người dùng yêu cầu bật/tắt tiếng
Khi tính năng tắt tiếng HAL được bật và chế độ Tắt tiếng người dùng bị tắt:
- Trạng thái tắt tiếng tổng thể của nhóm âm lượng sẽ được thay đổi thành
true
. - Yêu cầu bật tiếng của Người dùng sẽ được xử lý.
- Lý do: Bạn phải luôn tuân thủ các yêu cầu ẩn của người dùng để bảo vệ quyền riêng tư của người dùng.
Khi tính năng tắt tiếng HAL được bật và chế độ Tắt tiếng người dùng được bật:
Trạng thái tắt tiếng tổng thể của nhóm âm lượng sẽ được thay đổi thành
true
.Yêu cầu tắt tiếng của Người dùng sẽ
NOT
được xử lý. Người dùng được lưu vào bộ nhớ đệm trạng thái tắt tiếng vẫn đang bật.Lý do: Yêu cầu bật tiếng của người dùng sẽ chỉ được thực hiện nếu không có quy tắc hạn chế nào đang hoạt động.
Lý do: Việc bật tiếng tiếng người dùng được lưu vào bộ nhớ đệm có thể gây ra tiếng nổ ngoài ý muốn và gây nguy hiểm cho sự an toàn của người dùng. Điều này đặc biệt đúng nếu trạng thái tắt tiếng được bật trong các chu kỳ đánh lửa giúp giảm mức độ nhận biết về mức âm thanh nhận thức.
Trường hợp tương tác: Bật và tắt tiếng HAL cho đến khi người dùng tắt tiếng không có thay đổi nào
Thao tác bật/tắt tiếng HAL sẽ thay đổi trạng thái tắt tiếng tổng thể của nhóm âm lượng. Tuy nhiên, việc này không trực tiếp cập nhật trạng thái tắt tiếng của người dùng. Khi tắt tiếng người dùng và tắt tiếng HAL đã nhận được lệnh gọi lại để bật:
- Trạng thái tắt tiếng tổng thể của nhóm âm lượng sẽ được thay đổi thành
true
. Yêu cầu thay đổi âm lượng của Người dùng
NOT
sẽ được xử lý trong khi tắt tiếng HAL đã được bật.Lý do: Người dùng không thể cảm nhận được âm thanh khi chế độ tắt tiếng đang bật. Cho phép thay đổi âm lượng có thể dẫn đến tiếng nổ phát ra âm thanh và gây nguy hiểm cho sự an toàn của người dùng.
Lý do: Các ứng dụng âm lượng có thể đăng ký lệnh gọi lại và kích hoạt bật tiếng (CarAudioManager.setVolumeGroupmute(...,/* mute=*/ true,..)) tự động mà không có sự can thiệp của người dùng, nếu đây là hành vi dự kiến bởi OEM (Nhà sản xuất thiết bị gốc).
Khi tắt tiếng HAL (Lớp trừu tượng phần cứng) đang tắt khi tính năng Tắt tiếng người dùng đang tắt:
Trạng thái tắt tiếng của nhóm âm lượng đã được thay đổi thành
false
.Lý do: Làm cho trạng thái tắt tiếng cố định và yêu cầu Người dùng bật tiếng có thể làm gián đoạn Người dùng một cách không cần thiết khi trạng thái tắt tiếng chuyển đổi thường xuyên.
Yêu cầu của người dùng về việc thay đổi số lượng sẽ được xử lý bình thường.
Chặn
Các quy tắc hạn chế áp dụng cho việc chặn:
Reasons.FORCED_MASTER_MUTE
Reasons.REMOTE_MUTE
Reasons.TCU_MUTE
.
Khi chế độ Hạn chế chặn đang có hiệu lực, người dùng sẽ yêu cầu:
- Âm lượng thay đổi không được xử lý.
- Đã xử lý nút tắt tiếng.
Giới hạn
Các hạn chế theo quy định hạn chế là:
Reasons.THERMAL_LIMITATION
Reasons.SUSPEND_EXIT_VOL_LIMITATION
Khi các quy định hạn chế theo quy định hạn chế có hiệu lực, người dùng sẽ yêu cầu:
Thay đổi âm lượng:
- Trong Giới hạn được xử lý
- Vượt quá Giới hạn không được xử lý
Đã xử lý nút tắt tiếng.
Suy giảm
Các hạn chế về mức suy giảm:
Reasons.ADAS_DUCKING
Reasons.NAV_DUCKING
Reasons.PROJECTION_DUCKING
Khi chế độ hạn chế về Mức suy giảm đang hoạt động, người dùng sẽ gửi các yêu cầu sau:
Âm lượng thay đổi sẽ được xử lý. Mức âm lượng mới hiện tại được đặt thành âm lượng giảm (thay vì âm lượng trước đây). Số lượng thay đổi trong tương lai được tạo từ cấp độ này.
Đã xử lý nút tắt tiếng.
Cập nhật vào chỉ mục
Sau đây được coi là quá trình cập nhật chỉ mục âm lượng không đồng bộ:
Reasons.EXTERNAL_AMP_VOL_FEEDBACK
.
Vì lý do này, AudioControl HAL có thể cập nhật chỉ mục hiện tại của nhóm âm lượng
vào chỉ mục được chỉ định. Dữ liệu này chủ yếu được dùng làm phản hồi từ hệ thống âm thanh
cho yêu cầu thay đổi âm lượng từ khung Âm thanh cho ô tô. Cập nhật chỉ mục là
cũng giao tiếp với Apps dưới dạng một lệnh gọi lại CarVolumeGroupEvent
để đồng bộ hoá
chỉ mục.
Ví dụ
Trường hợp sử dụng: Người dùng cập nhật chỉ mục âm lượng thành 30
Người dùng sử dụng ứng dụng Âm lượng để thay đổi chỉ mục âm lượng thành 30.
Chỉ số này được chuyển đổi thành mức tăng âm lượng và gửi đến lớp trừu tượng phần cứng (HAL) cho âm thanh.
Nhà cung cấp triển khai
Audio HAL
nhận được mức tăng và cập nhật số lượng mới hệ thống âm thanh (như bộ khuếch đại bên ngoài).Hệ thống âm thanh phản hồi rằng mức âm lượng chỉ được cập nhật lên chỉ mục 15 (Android không xác định).
Cách nhà cung cấp triển khai điều kiện kích hoạt
AudioControl HAL
:IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {..., 15 /* New index */})
Dịch vụ âm thanh ô tô sử dụng chỉ mục mới từ lệnh gọi lại được dùng cho dữ liệu cố định và lệnh gọi lại đối với ứng dụng âm lượng. Chỉ mục theo yêu cầu của người dùng là 30. Tuy nhiên, phản hồi không đồng bộ của hệ thống âm thanh sẽ cập nhật chỉ mục thành 15.
Trường hợp sử dụng: Phát âm thanh lần đầu sau khi thoát khỏi chế độ tạm ngưng
Chỉ số khối lượng trước khi tạm ngưng được đặt ở mức cao 95 (phạm vi: [0-99]).
Android chuyển sang trạng thái tạm ngưng.
Sau khi Android bị tạm ngưng (ví dụ: tiếp tục):
Nhà cung cấp
Audio HAL/AudioControl HAL
áp dụng một chỉ mục an toàn là 30 cho cục bộ trong hệ thống âm thanh.Nhà cung cấp
AudioControl HAL
cũng kích hoạt lệnh gọi lại cho chỉ mục an toàn:
IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {..., 30 /* safe index */})
Dịch vụ âm thanh ô tô sử dụng chỉ mục mới từ lệnh gọi lại được dùng cho dữ liệu cố định và lệnh gọi lại riêng để ứng dụng âm lượng đồng bộ hoá chỉ mục. Chỉ mục số lượng trước khi tạm ngưng là 95. Tuy nhiên, sau khi tiếp tục, chỉ số này là trình triển khai
AudioControl HAL
đặt thành mức âm lượng an toàn là 30.
Cấu hình âm lượng động
Đối với tính năng này, chúng tôi xem xét các trường hợp sử dụng chính sau đây:
Cấu hình cuối dòng của xe (EOL).
Các nhà sản xuất ô tô muốn cập nhật cấu hình số lượng ở EOL dựa trên xe cài đặt hệ thống âm thanh. Thông thường, đây là một hoạt động tải không qua cửa hàng ứng dụng mà không cập nhật Hình ảnh Android SW.
Nhà sản xuất ô tô có thể cần cập nhật cấu hình âm lượng trong lịch dịch vụ.
Cấu hình thời gian chạy. Hệ thống âm thanh trên ô tô hỗ trợ bên ngoài cấu hình bộ khuếch đại và các ECU này có thể lưu trữ phạm vi âm lượng các cấu hình được truy vấn trong thời gian khởi động.
Cấu hình theo yêu cầu. Được cung cấp để đáp ứng nhu cầu ngày càng tăng về các tính năng âm thanh dựa trên nhu cầu, trong đó người dùng đăng ký nhận tín hiệu nâng cao xử lý trong một khoảng thời gian. Các cấu hình phạm vi âm lượng mới là có hiệu lực trong thời gian thuê bao.
Thiết kế
Quá trình định cấu hình âm lượng động được thực hiện qua 3 giai đoạn:
Khám phá. Việc triển khai HAL AudioControl của nhà cung cấp khám phá âm lượng mới phạm vi các bản cập nhật thông qua cơ chế IPC tuỳ chỉnh do nhà cung cấp sở hữu.
Sau khi phát hiện, một lệnh gọi lại được tạo thông qua
AudioControl::IModuleChangeCallback
.Cập nhật. Ngăn xếp âm thanh trên ô tô sẽ cập nhật trạng thái của nhóm âm lượng bằng phạm vi âm lượng.
Chúng tôi đã nỗ lực để duy trì cùng mức âm lượng sau khi cập nhật phạm vi âm lượng sau khi cập nhật. Tuy nhiên, nếu chỉ mục nằm ngoài giới hạn, chỉ mục âm lượng hiện tại sẽ được đặt thành một giá trị an toàn. Ví dụ: cấp mặc định do nhà cung cấp cung cấp trong khoảng thời gian lệnh gọi lại.
Gọi lại.
Sau khi cập nhật phạm vi của nhóm âm lượng, ngăn xếp âm thanh trên ô tô sẽ kích hoạt lệnh gọi lại đến ứng dụng được đăng ký qua
CarVolumeGroupEventCallback
.CarVolumeGroupEvent
mangCarVolumeGroupInfo
đã cập nhật, Loại sự kiện (điều gì đã thay đổi) và Thông tin bổ sung (lý do thay đổi).
Hình 1. Cấu hình âm lượng động.
API HAL
AudioControl @ 3.0 AIDL
Phiên bản 3.0 của AudioControl AIDL HAL ra mắt các API sau đây:
API | |
---|---|
IAudioControl#setModuleChangeCallback | Đặt một thực thể của IModuleChangeCallback bằng AudioControl HAL. |
IAudioControl#clearModuleChangeCallback | Xoá thực thể của IModuleChangeCallback đã đặt trước đó bằng Lớp trừu tượng phần cứng (HAL) cho AudioControl. |
IModuleChangeCallback#onAudioPortsChanged | Lệnh gọi lại để thông báo các thay đổi đối với AudioPorts |
Trình tự
Sơ đồ trình tự của cấu hình âm lượng động được hiển thị bên dưới.
Hình 2. Sơ đồ trình tự cho cấu hình ổ đĩa động.
Các khía cạnh chính
Để tối ưu hoá tính năng này, hãy cân nhắc những điều sau.
AudioPorts được cung cấp trong lệnh gọi lại phải khớp với Automotive Định nghĩa về xe buýt (BUS):
- Cổng thiết bị.
OUT_DEVICE
,IN_DEVICE
- Kết nối.
BUS
- Địa chỉ. Được xác định trong định nghĩa HAL âm thanh
- Chế độ khuếch đại.
JOINT
- Cổng thiết bị.
Nhà cung cấp phải xác định tập mẹ gồm các định nghĩa về phạm vi âm lượng trong tệp Âm thanh Chính sách HAL (Lớp trừu tượng phần cứng) và sử dụng lệnh gọi lại để tuỳ chỉnh chính sách này cho các biến thể xe. Xem
IModuleChangeCallbac
Định nghĩa AIDL để biết thêm thông tin.Khi có nhiều BUS âm thanh thuộc cùng một nhóm âm lượng, thì mỗi nhóm phải có định nghĩa phạm vi khoảng âm lượng giống nhau. Nếu không làm được điều này, xe của bạn sẽ bị ngã khung âm thanh từ chối định nghĩa phạm vi âm lượng mới.