Thuộc tính âm thanh

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_MEDIAUSAGE_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ủa STREAM_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ô.