Âm thanh có độ phân giải cao

Bản phát hành Android 10 bao gồm các điểm cải tiến sau đây cho âm thanh có độ phân giải cao:

  • Float: Bộ mã hoá và giải mã WAV, FLAC và trình trích xuất được cập nhật để hỗ trợ float (độ chính xác không tổn hao từ 24 bit trở lên). Hiệu ứng Khử tạp âm và Tạo âm thanh ảo được cập nhật thành float. MediaPlayer (NuPlayer) cho phép độ chính xác được cập nhật.
  • Tần số cao: Bộ mã hoá và giải mã WAV, FLAC cũng như trình trích xuất được cập nhật để hỗ trợ 192 kHz. Các hiệu ứng mặc định do Android cung cấp được kiểm thử để hỗ trợ 192 kHz ở tần số tiêu chuẩn. Các tần số tiêu chuẩn được phép là 88,2 kHz, 96 kHz, 176,4 kHz và 192 kHz.
  • Đa kênh: Hiệu ứng phát mặc định của Android được kiểm thử để hỗ trợ đa kênh cho 8 kênh.
  • Tính năng định thời gian: Thông tin về thời gian được đưa vào toàn bộ khung âm thanh.

Kể từ Android 9, các điểm cải tiến sau đây không yêu cầu đối tác triển khai:

  • Số lượng kênh đầu ra đồng thời của ứng dụng tăng từ 14 lên 40, vì các phiên bản ứng dụng bị giới hạn của AudioTrack đã gây ra vấn đề cho các ứng dụng trong Android 8.x.
  • Bộ nhớ tối đa của máy khách/máy chủ tăng từ 4 MB lên 32 MB (tuỳ thuộc vào tổng bộ nhớ thiết bị) để cho phép nhiều kênh âm thanh độ phân giải cao đồng thời hơn.
  • Tổng số kênh kết hợp tăng từ 32 lên 256 để ngăn chặn tình trạng tranh chấp tài nguyên giữa các ứng dụng và giao diện người dùng hệ thống.

Thay đổi hiệu ứng đầu ra

Xem phần Hiệu ứng âm thanh để biết các thay đổi đối với bản phát hành Android 11.

Trước bản phát hành Android 9, quá trình xử lý chuỗi hiệu ứng được triển khai ở định dạng mẫu âm thanh nổi int16. Cách này có một số hạn chế:

  • Tất cả hiệu ứng đầu ra đều buộc chuyển đổi từ dữ liệu âm thanh dấu phẩy động sang int16, khiến độ chính xác bị giảm.
  • Các hiệu ứng đầu ra bị từ chối từ các bồn lưu trữ đầu ra có số lượng kênh lớn hơn 2.

Trong bản phát hành Android 9, quy trình xử lý chuỗi hiệu ứng được nâng cấp để hỗ trợ định dạng float nhiều kênh. Các điểm chính:

  • Các hiệu ứng phần mềm Android đã được di chuyển sang float âm thanh nổi.
  • Các hiệu ứng cũ được hỗ trợ bằng bộ chuyển đổi định dạng, giúp chuyển đổi float thành int16 nếu cần.

Triển khai hiệu ứng đầu ra

Bạn có thể tham khảo cách triển khai hiệu ứng đầu ra trong frameworks/av/media/libeffects.

Đối tác triển khai hiệu ứng đầu ra tuỳ chỉnh của riêng họ nên làm như sau đối với bản phát hành Android 10:

  • Cập nhật hiệu ứng đầu ra để hỗ trợ định dạng float nhiều kênh:
    • Không cần hỗ trợ xử lý Int16 nữa.
    • Hỗ trợ số lượng kênh đầu ra từ 2 đến 8 (để tương thích trong tương lai, hãy xem xét số lượng từ 1 đến 30).
    • Hỗ trợ số lượng kênh đầu vào khớp với số lượng kênh đầu ra cho các hiệu ứng chèn. Các hiệu ứng phụ vẫn thấy số lượng kênh đầu vào là 1 (đơn âm).
    • Hỗ trợ cả mặt nạ vị trí kênh (chính tắc) và mặt nạ chỉ mục kênh của (1 << n) - 1.
  • Nếu bạn phải tiếp tục hỗ trợ các hiệu ứng đầu ra của nhà cung cấp cũ và không thể cập nhật các hiệu ứng đó, hãy xác minh mã cũ như sau:
    • Các hiệu ứng đầu ra (chèn) cũ phải từ chối các cấu hình không được hỗ trợ trong EFFECT_CMD_SET_CONFIG.
      • Kiểm tra để đảm bảo định dạng là int16.
      • Kiểm tra để đảm bảo mặt nạ kênh đầu vào và đầu ra là âm thanh nổi.
      • Nếu một trong hai lần kiểm tra không thành công, hãy trả về -EINVAL.
    • Các hiệu ứng đầu ra (hỗ trợ) cũ được AudioFlinger định cấu hình bằng mặt nạ kênh đầu vào đơn âm và có thể là mặt nạ kênh đầu ra đa kênh, tuỳ thuộc vào việc bồn lưu trữ đầu ra có phải là đa kênh hay không. Các trình xử lý này phải từ chối các cấu hình không được hỗ trợ trong EFFECT_CMD_SET_CONFIG.
      • Kiểm tra để đảm bảo định dạng là int16.
      • Kiểm tra để đảm bảo rằng mặt nạ kênh đầu vào là đơn âm và mặt nạ kênh đầu ra là âm thanh nổi.
      • Nếu một trong hai lần kiểm tra không thành công, hãy trả về -EINVAL.
    • Xác minh mã cũ. Đừng tự động cho rằng cách này sẽ hiệu quả!