Trình phát âm thanh hỗ trợ các thuộc tính xác định cách hệ thống âm thanh xử lý các quyết định về định tuyến, âm lượng và tiêu điểm cho nguồn đã chỉ định. Các ứng dụng có thể đính kèm thuộc tính vào một bản phát âm thanh (chẳng hạn như nhạc do dịch vụ phát trực tuyến phát hoặc thông báo về email mới), sau đó truyền các thuộc tính nguồn âm thanh đến khung, trong đó hệ thống âm thanh sử dụng các thuộc tính này để đưa ra quyết định kết hợp và thông báo cho các ứng dụng về trạng thái của hệ thống.
Trong Android 4.4 trở xuống, khung này chỉ đưa ra quyết định kết hợp bằng cách sử dụng loại luồng âm thanh. Tuy nhiên, việc dựa trên các quyết định như vậy theo loại luồng quá hạn chế để tạo ra đầu ra chất lượng trên nhiều ứng dụng và thiết bị. Ví dụ: trên thiết bị di động, một số ứng dụng (tức là Google Maps) phát thông tin chỉ đường lái xe trên loại luồng STREAM_MUSIC; tuy nhiên, trên thiết bị di động ở chế độ chiếu (tức là Android Auto), các ứng dụng không thể kết hợp thông tin chỉ đường lái xe với các luồng nội dung nghe nhìn khác.
Khi sử dụng Audio Attribute API (API thuộc tính âm thanh), ứng dụng sẽ cung cấp cho hệ thống âm thanh thông tin chi tiết về một nguồn âm thanh cụ thể, bao gồm cả mức sử dụng (lý do nguồn đang phát), loại nội dung (nội dung nguồn đang phát), cờ (cách phát nguồn) và ngữ cảnh (mới trong Android 9). Cú pháp:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- Mục đích sử dụng. Chỉ định lý do nguồn đang phát và kiểm soát các quyết định về định tuyến, tiêu điểm và âm lượng.
- Loại nội dung. Chỉ định nội dung nguồn đang phát (nhạc, phim, lời nói, âm thanh, không xác định).
- Ngữ cảnh. Các giá trị sử dụng được tóm tắt thành Audio HAL.
- Cờ. Chỉ định cách phát nguồn. Bao gồm tính năng hỗ trợ thực thi khả năng nghe (bắt buộc phải có âm thanh chụp của máy ảnh ở một số quốc gia) và đồng bộ hoá âm thanh/video phần cứng.
Để xử lý âm thanh động, các ứng dụng phải phân biệt giữa nội dung phim, nhạc và lời nói. Thông tin về chính dữ liệu cũng có thể quan trọng, chẳng hạn như độ to và giá trị mẫu đỉnh.
Sử dụng thuộc tính
Mục đích sử dụng chỉ định ngữ cảnh sử dụng luồng, cung cấp thông tin về lý do phát âm thanh và mục đích sử dụng âm thanh. Thông tin về mức sử dụng rõ ràng hơn so với loại luồng và cho phép các nền tảng hoặc chính sách định tuyến tinh chỉnh quyết định về mức sử dụng hoặc định tuyến.
Cung cấp một trong các giá trị sử dụng sau cho mọi thực thể:
- USAGE_UNKNOWN
- USAGE_MEDIA
- USAGE_VOICE_COMMUNICATION
- USAGE_VOICE_COMMUNICATION_SIGNALLING
- USAGE_ALARM
- USAGE_NOTIFICATION
- USAGE_NOTIFICATION_TELEPHONY_RINGTONE
- USAGE_NOTIFICATION_COMMUNICATION_REQUEST
- USAGE_NOTIFICATION_COMMUNICATION_INSTANT
- USAGE_NOTIFICATION_COMMUNICATION_DELAYED
- USAGE_NOTIFICATION_EVENT
- USAGE_ASSISTANCE_ACCESSIBILITY
- USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
- USAGE_ASSISTANCE_SONIFICATION
- USAGE_GAME
- USAGE_VIRTUAL_SOURCE
- USAGE_ASSISTANT
Các giá trị sử dụng thuộc tính âm thanh không được giống nhau. Để biết ví dụ, hãy tham khảo định nghĩa về USAGE_MEDIA
và USAGE_ALARM
; đối với các trường hợp ngoại lệ, hãy tham khảo định nghĩa về AudioAttributes.Builder
.
Loại nội dung
Loại nội dung xác định âm thanh và thể hiện danh mục chung của nội dung đó, chẳng hạn như phim, lời nói hoặc tiếng bíp/đổ chuông. Khung âm thanh sử dụng thông tin về loại nội dung để định cấu hình các khối xử lý hậu kỳ âm thanh một cách có chọn lọc. Mặc dù không bắt buộc phải cung cấp loại nội dung, nhưng bạn nên đưa thông tin về loại nội dung vào bất cứ khi nào biết được loại nội dung, chẳng hạn như sử dụng CONTENT_TYPE_MOVIE
cho dịch vụ truyền trực tuyến phim hoặc CONTENT_TYPE_MUSIC
cho ứng dụng phát nhạc.
Cung cấp một trong các giá trị loại nội dung sau cho bất kỳ thực thể nào:
CONTENT_TYPE_UNKNOWN
(mặc định)CONTENT_TYPE_MOVIE
CONTENT_TYPE_MUSIC
CONTENT_TYPE_SONIFICATION
CONTENT_TYPE_SPEECH
Các giá trị loại nội dung của thuộc tính âm thanh không được giống nhau. Để biết thông tin chi tiết về các loại nội dung, hãy tham khảo API thuộc tính âm thanh.
Ngữ cảnh
Mỗi âm thanh trong Android được xác định bằng ứng dụng chịu trách nhiệm và lý do tạo âm thanh; đồng thời, thiết bị Android sử dụng thông tin này để xác định cách trình bày âm thanh. Trên Android 8.x trở xuống, các ứng dụng có thể báo cáo lý do tạo âm thanh bằng các loại luồng cũ (ví dụ: AudioSystem.STREAM_MUSIC
) hoặc AudioAttributes
. Trong Android 9, các giá trị AudioAttributes.usage
được trừu tượng ở cấp HAL dưới dạng Bối cảnh.
Ngữ cảnh âm thanh HAL | Cách sử dụng AudioAttributes |
---|---|
ÂM NHẠC | NỘI DUNG NGHE NHÌN |
VOICE_COMMAND | USAGE_ASSISTANT |
ĐIỀU HƯỚNG | ASSISTANCE_NAVIGATION_GUIDANCE |
GỌI | VOICE_COMMUNICATION |
RINGTONE | NOTIFICATION_RINGTONE |
THÔNG BÁO | THÔNG BÁO |
BÁO THỨC | BÁO THỨC |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
UNKNOWN (KHÔNG XÁC ĐỊNH) | UNKNOWN (KHÔNG XÁC ĐỊNH) |
Bạn có thể cung cấp một trong các giá trị CONTEXT_NUMBER
sau đây cho bất kỳ bản sao nào:
- MUSIC_CONTEXT // Phát nhạc
- NAVIGATION_CONTEXT // Chỉ đường
- VOICE_COMMAND_CONTEXT // Phiên lệnh thoại
- CALL_RING_CONTEXT // Chuông cuộc gọi thoại
- CALL_CONTEXT // Cuộc gọi thoại
- ALARM_CONTEXT // Âm thanh chuông báo từ Android
- NOTIFICATION_CONTEXT // Thông báo
- SYSTEM_SOUND_CONTEXT // Âm thanh tương tác của người dùng (lượt nhấp vào nút, v.v.)
Cờ
Cờ chỉ định cách khung âm thanh áp dụng hiệu ứng cho quá trình phát âm thanh. Cung cấp một hoặc nhiều cờ sau đây cho một thực thể:
FLAG_AUDIBILITY_ENFORCED
. Yêu cầu hệ thống đảm bảo âm thanh có thể nghe được. Sử dụng để giải quyết nhu cầu củaSTREAM_SYSTEM_ENFORCED
cũ (chẳng hạn như buộc âm thanh chụp của máy ảnh).HW_AV_SYNC
. Yêu cầu hệ thống chọn một luồng đầu ra hỗ trợ tính năng đồng bộ hoá A/V phần cứng.
Cờ thuộc tính âm thanh không độc quyền và có thể kết hợp. Để biết thông tin chi tiết về các cờ này, hãy tham khảo API thuộc tính âm thanh.
Ví dụ
Trong ví dụ này, AudioAttributes.Builder
xác định AudioAttributes
sẽ được thực thể AudioTrack
mới sử dụng:
AudioTrack myTrack = new AudioTrack( new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_MEDIA) .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) .build(), myFormat, myBuffSize, AudioTrack.MODE_STREAM, mySession);
Khả năng tương thích
Nhà phát triển ứng dụng nên sử dụng các thuộc tính âm thanh khi tạo hoặc cập nhật ứng dụng cho Android 5.0 trở lên. Tuy nhiên, các ứng dụng không bắt buộc phải tận dụng các thuộc tính; chúng chỉ có thể xử lý các loại luồng cũ hoặc không nhận biết được các thuộc tính (tức là trình phát nội dung đa phương tiện chung không biết gì về nội dung đang phát).
Trong những trường hợp như vậy, khung này duy trì khả năng tương thích ngược với các thiết bị cũ và bản phát hành Android bằng cách tự động dịch các loại luồng âm thanh cũ thành thuộc tính âm thanh. Tuy nhiên, khung này không thực thi hoặc đảm bảo việc liên kết này trên các thiết bị, nhà sản xuất hoặc bản phát hành Android.
Bản đồ ánh xạ khả năng tương thích:
Android 5.0 trở lên | Android 4.4 trở xuống |
---|---|
CONTENT_TYPE_SPEECH USAGE_VOICE_COMMUNICATION
|
STREAM_VOICE_CALL
|
CONTENT_TYPE_SONIFICATION USAGE_ASSISTANCE_SONIFICATION
|
STREAM_SYSTEM
|
CONTENT_TYPE_SONIFICATION USAGE_NOTIFICATION_RINGTONE
|
STREAM_RING
|
CONTENT_TYPE_MUSIC USAGE_UNKNOWN USAGE_MEDIA USAGE_GAME USAGE_ASSISTANCE_ACCESSIBILITY USAGE_ASSISTANCE_NAVIGATION_GUIDANCE
|
STREAM_MUSIC
|
CONTENT_TYPE_SONIFICATION USAGE_ALARM
|
STREAM_ALARM
|
CONTENT_TYPE_SONIFICATION USAGE_NOTIFICATION USAGE_NOTIFICATION_COMMUNICATION_REQUEST USAGE_NOTIFICATION_COMMUNICATION_INSTANT USAGE_NOTIFICATION_COMMUNICATION_DELAYED USAGE_NOTIFICATION_EVENT
|
STREAM_NOTIFICATION
|
CONTENT_TYPE_SPEECH
|
(@hide) STREAM_BLUETOOTH_SCO
|
FLAG_AUDIBILITY_ENFORCED
|
(@hide) STREAM_SYSTEM_ENFORCED
|
CONTENT_TYPE_SONIFICATION USAGE_VOICE_COMMUNICATION_SIGNALLING
|
(@hide) STREAM_DTMF
|
Các loại luồng không dùng nữa
Android 9 ngừng sử dụng các loại luồng sau đây cho mục đích sử dụng trong ô tô:
- STREAM_DEFAULT
- STREAM_VOICE_CALL
- STREAM_SYSTEM
- STREAM_RING
- STREAM_MUSIC
- STREAM_ALARM
- STREAM_NOTIFICATION
- STREAM_BLUETOOTH_SCO
- STREAM_SYSTEM_ENFORCED
- STREAM_DTMF
- STREAM_TTS
- STREAM_ACCESSIBILITY
Để biết thêm thông tin, hãy xem phần Âm thanh trên ô tô.