Chuyển đổi tốc độ lấy mẫu

Bài viết này mô tả việc chuyển đổi tốc độ lấy mẫu, còn gọi là lấy mẫu lại, trong Android. Để biết các thuật ngữ liên quan đến việc chuyển đổi tốc độ lấy mẫu, hãy xem phần Thuật ngữ.

Chuyển đổi tốc độ lấy mẫu là quá trình thay đổi luồng các mẫu rời rạc từ tốc độ lấy mẫu này sang luồng khác ở tốc độ lấy mẫu khác. Bộ chuyển đổi tốc độ lấy mẫu (sample rate converter) hoặc bộ lấy mẫu lại (resampler) là một mô-đun triển khai quá trình chuyển đổi tốc độ lấy mẫu. Đối với bộ lấy mẫu lại, luồng ban đầu được gọi là tín hiệu nguồn và luồng được lấy mẫu lại được gọi là tín hiệu bồn lưu trữ.

Trình lấy mẫu lại được dùng ở một số vị trí trong Android. Ví dụ: tệp MP3 có thể được mã hoá ở tốc độ lấy mẫu 44, 1 kHz nhưng cần được phát lại trên thiết bị Android hỗ trợ âm thanh 48 kHz nội bộ. Trong trường hợp đó, bộ lấy mẫu lại sẽ được dùng để lấy mẫu lên âm thanh đầu ra MP3 từ tốc độ lấy mẫu nguồn 44,1 kHz thành tốc độ lấy mẫu bồn lưu trữ 48 kHz dùng trong thiết bị Android.

Bạn có thể biểu thị các đặc điểm của bộ lấy mẫu lại bằng các chỉ số, bao gồm:

  • mức độ bảo tồn biên độ tổng thể của tín hiệu
  • mức độ bảo tồn băng thông tần số của tín hiệu, tuỳ thuộc vào các giới hạn của tốc độ lấy mẫu của bồn lưu trữ
  • độ trễ tổng thể thông qua bộ lấy mẫu lại
  • độ trễ pha và độ trễ nhóm nhất quán liên quan đến tần số
  • độ phức tạp tính toán, được biểu thị bằng chu kỳ CPU hoặc mức tiêu thụ điện năng
  • tỷ lệ được phép của tốc độ lấy mẫu nguồn và tốc độ lấy mẫu bồn lưu trữ
  • khả năng tự động thay đổi tỷ lệ tốc độ lấy mẫu
  • định dạng mẫu âm thanh kỹ thuật số được hỗ trợ

Bộ lấy mẫu lại lý tưởng sẽ giữ nguyên biên độ và băng thông tần số của tín hiệu nguồn (tuỳ thuộc vào các giới hạn của tốc độ lấy mẫu của bồn lưu trữ), có độ trễ tối thiểu và nhất quán, có độ phức tạp tính toán tối thiểu, cho phép tỷ lệ chuyển đổi tuỳ ý và động, đồng thời hỗ trợ tất cả các định dạng mẫu âm thanh kỹ thuật số phổ biến. Trong thực tế, không có bộ lấy mẫu lại lý tưởng nào vì bộ lấy mẫu lại thực tế là một sự đánh đổi giữa các đặc điểm này. Ví dụ: mục tiêu về chất lượng lý tưởng xung đột với độ trễ ngắn và độ phức tạp thấp.

Android bao gồm nhiều bộ lấy mẫu lại âm thanh để có thể đưa ra các giải pháp phù hợp tuỳ thuộc vào trường hợp sử dụng và tải của ứng dụng. Các trình lấy mẫu lại có sẵn được giải thích trong phần Triển khai trình lấy mẫu lại.

Triển khai bộ lấy mẫu lại

Các phương thức triển khai bộ lấy mẫu lại hiện có thường xuyên thay đổi và có thể được OEM tuỳ chỉnh. Các bộ lấy mẫu lại mặc định, theo thứ tự giảm dần của độ méo tín hiệu và thứ tự tăng dần của độ phức tạp tính toán, bao gồm:

  • tuyến tính
  • khối
  • sinc với hệ số ban đầu
  • sinc với hệ số sửa đổi

Nhìn chung, bộ lấy mẫu lại sinc thích hợp hơn với việc phát nhạc chất lượng cao hơn và các bộ lấy mẫu lại khác nên được dành cho các trường hợp chất lượng ít quan trọng hơn (ví dụ: "lượt nhấp phím" hoặc tương tự).

Cách triển khai bộ lấy mẫu lại cụ thể được chọn phụ thuộc vào trường hợp sử dụng, tải và giá trị của thuộc tính hệ thống af.resampler.quality. Để biết thông tin chi tiết, hãy tham khảo mã nguồn của bộ lấy mẫu lại âm thanh trong AudioFlinger.