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 định tuyến, âm lượng và tiêu điểm cho nguồn được chỉ định. Ứng dụng có thể đính kèm các thuộc tính vào quá trình phát lại âm thanh (chẳng hạn như nhạc được phát bởi dịch vụ phát trực tuyến hoặc thông báo cho email mới), sau đó chuyển các thuộc tính nguồn âm thanh vào khung, trong đó hệ thống âm thanh sử dụng các thuộc tính để đưa ra quyết định trộn và thông báo cho ứng dụng về trạng thái của hệ thống.
Trong Android 4.4 trở về trước, khung đưa ra quyết định trộn chỉ bằng cách sử dụng loại luồng âm thanh. Tuy nhiên, việc đưa ra các quyết định như vậy về 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 (ví dụ: Google Maps) phát chỉ đường lái xe trên loại luồng STREAM_MUSIC; tuy nhiên, trên thiết bị di động ở chế độ trình chiếu (tức là Android Auto), các ứng dụng không thể kết hợp chỉ đường lái xe với các luồng phương tiện khác.
Bằng cách sử dụng API thuộc tính âm thanh , các ứng dụng 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ách sử dụng (lý do nguồn đang phát), loại nội dung (nguồn đang phát), cờ (cách phát nguồn), và bối cảnh (mới trong Android 9). Cú pháp:
AudioAttributes { mUsage mContentType mSource mFlags mTags / mFormattedTags / mBundle (key value pairs) }
- Cách sử dụng . Chỉ định lý do nguồn đang phát và kiểm soát các quyết định định tuyến, tiêu điểm và âm lượng.
- Loại nội dung . Chỉ định nguồn đang phát nội dung gì (âm nhạc, phim, lời nói, âm thanh, không xác định).
- Bối cảnh . Các giá trị sử dụng được trừu tượng hóa thành Audio HAL.
- Cờ . Chỉ định cách phát nguồn. Bao gồm hỗ trợ thực thi khả năng nghe (bắt buộc phải có âm thanh màn trập camera ở một số quốc gia) và đồng bộ hóa âm thanh/video phần cứng.
Để xử lý động, các ứng dụng phải phân biệt giữa nội dung phim, nhạc và giọng nói. Thông tin về bản thân dữ liệu cũng có thể quan trọng, chẳng hạn như độ ồn và giá trị mẫu cao nhất.
Sử dụng thuộc tính
Cách sử dụng chỉ định bối cảnh trong đó luồng được sử dụng, cung cấp thông tin về lý do âm thanh được phát và âm thanh đó được sử dụng để làm gì. Thông tin sử dụng có tính biểu cảm cao hơn 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 các quyết định về khối lượng hoặc định tuyến.
Cung cấp một trong các giá trị sử dụng sau cho mọi phiên bản:
- 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 sẽ loại trừ lẫn nhau. Để biết ví dụ, hãy tham khảo định nghĩa 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 AudioAttributes.Builder
.
Loại nội dung
Loại nội dung xác định âm thanh là gì và thể hiện danh mục chung của nội dung như phim, lời nói hoặc tiếng bíp/nhạc chuông. Khung âm thanh sử dụng thông tin loại nội dung để định cấu hình có chọn lọc các khối xử lý hậu kỳ âm thanh. Mặc dù việc cung cấp loại nội dung là tùy chọn nhưng bạn nên bao gồm thông tin loại bất cứ khi nào loại nội dung được xác định, chẳng hạn như sử dụng CONTENT_TYPE_MOVIE
cho dịch vụ phát trực tuyến phim hoặc CONTENT_TYPE_MUSIC
cho ứng dụng phát lại nhạc.
Cung cấp một trong các giá trị loại nội dung sau cho mọi phiên bản:
-
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 thuộc tính âm thanh loại trừ lẫn nhau. Để biết chi tiết về các loại nội dung, hãy tham khảo API thuộc tính âm thanh .
Bối cảnh
Mỗi âm thanh trong Android được xác định bởi ứng dụng chịu trách nhiệm và lý do tạo ra âm thanh đó; và thiết bị Android sử dụng thông tin này để xác định cách trình bày âm thanh. Trong Android 8.x trở xuống, ứng dụng có thể báo cáo lý do tạo âm thanh bằng cách sử dụ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 hóa ở cấp HAL dưới dạng Contexts .
Bối cảnh âm thanh HAL | Cách sử dụng thuộc tính âm thanh |
---|---|
ÂM NHẠC | PHƯƠNG TIỆN TRUYỀN THÔNG |
RA LỆNH BẰNG GIỌNG NÓI | USAGE_ASSISTANT |
DẪN ĐƯỜNG | ASSISTANCE_NAVIGATION_GUIDANCE |
GỌI | ÂM THANH GIAO TIẾP |
NHẠC CHUÔNG | CHUÔNG BÁO HIỆU |
THÔNG BÁO | THÔNG BÁO |
BÁO THỨC | BÁO THỨC |
HỆ THỐNG_ÂM THANH | HỖ TRỢ_SONIFICATION |
KHÔNG XÁC ĐỊNH | KHÔNG XÁC ĐỊNH |
Bạn có thể cung cấp một trong các giá trị CONTEXT_NUMBER
sau cho mọi phiên bản:
- MUSIC_CONTEXT // Phát nhạc
- NAVIGATION_CONTEXT // Chỉ đường điều hướng
- VOICE_COMMAND_CONTEXT // Phiên lệnh bằng giọng nói
- CALL_RING_CONTEXT // Cuộc gọi thoại đổ chuông
- CALL_CONTEXT // Cuộc gọi thoại
- ALARM_CONTEXT // Âm thanh báo động từ Android
- NOTIFICATION_CONTEXT // Thông báo
- SYSTEM_SOUND_CONTEXT // Âm thanh tương tác của người dùng (nhấp 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 lại âm thanh. Cung cấp một hoặc nhiều cờ sau cho một phiên bản:
-
FLAG_AUDIBILITY_ENFORCED
. Yêu cầu hệ thống đảm bảo khả năng nghe được âm thanh. Sử dụng để giải quyết các nhu cầu củaSTREAM_SYSTEM_ENFORCED
cũ (chẳng hạn như buộc âm thanh màn trập máy ảnh). -
HW_AV_SYNC
. Yêu cầu hệ thống chọn luồng đầu ra hỗ trợ đồng bộ hóa A/V phần cứng.
Cờ thuộc tính âm thanh không độc quyền và có thể được kết hợp. Để biết 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 sử dụng bởi phiên bản AudioTrack
mới:
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 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 biết về các thuộc tính (tức là một trình phát đa phương tiện chung không biết gì về nội dung mà nó đang phát).
Trong những trường hợp như vậy, khung duy trì khả năng tương thích ngược với các thiết bị cũ hơn và các bản phát hành Android bằng cách tự động dịch các loại luồng âm thanh cũ sang thuộc tính âm thanh. Tuy nhiên, khung này không thực thi hoặc đảm bảo việc ánh xạ này trên các thiết bị, nhà sản xuất hoặc bản phát hành Android.
Ánh xạ tương thích:
Android 5.0 trở lên | Android 4.4 trở về trước |
---|---|
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 được dùng nữa
Android 9 không còn dùng các loại luồng sau để sử dụng trong ô tô:
- STREAM_DEFAULT
- STREAM_VOICE_CALL
- STREAM_SYSTEM
- STREAM_RING
- NHẠC LUỒNG
- STREAM_ALARM
- STREAM_NOTIFICATION
- STREAM_BLUETOOTH_SCO
- STREAM_SYSTEM_ENFORCED
- STREAM_DTMF
- STREAM_TTS
- STREAM_ACCESSIBILITY
Để biết thêm chi tiết, xem Âm thanh ô tô .