Â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 dụng đồng thời tăng từ 14 lên 40, vì các thực thể ứng dụng hạn chế của AudioTrack đã trở thành vấn đề đối với 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 Hiệu ứng âm thanh để biết những thay đổi về 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.
  • 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 độ chính xác đơn đa kênh. Các điểm chính:

  • Các hiệu ứng phần mềm Android đã được di chuyển sang stereo float.
  • Các hiệu ứng cũ được hỗ trợ bằng bộ chuyển đổi định dạng. Bộ chuyển đổi này sẽ chuyển đổi độ chính xác đơn thành int16 nếu cần.

Triển khai các 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 với bản phát hành Android 10, những đối tác triển khai các hiệu ứng đầu ra tuỳ chỉnh của riêng mình nên làm như sau:

  • 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 để chắc chắn rằng định dạng là int16.
      • Kiểm tra để đảm bảo rằng 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 ứng dụng 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 cho là ứng dụng đó hoạt động!