Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

Định dạng dữ liệu

Sử dụng Android một loạt các âm thanh định dạng dữ liệu trong nội bộ, và cho thấy một bộ phận các trường ở các API công cộng, các định dạng tập tin , và Hardware Abstraction Layer (HAL).

Tính chất

Các định dạng dữ liệu âm thanh được phân loại theo thuộc tính của chúng:

Nén
Không nén , lossless nén , hoặc mất dữ liệu nén . PCM là định dạng âm thanh không nén phổ biến nhất. FLAC là định dạng nén không mất dữ liệu, trong khi MP3 và AAC là định dạng nén mất dữ liệu.
Độ sâu bit
Số lượng bit đáng kể trên mỗi mẫu âm thanh.
Kích cỡ thùng
Số bit được sử dụng để lưu trữ hoặc truyền một mẫu. Thông thường điều này giống với độ sâu bit, nhưng đôi khi các bit đệm bổ sung được phân bổ để căn chỉnh. Ví dụ, một mẫu 24 bit có thể được chứa trong một từ 32 bit.
Căn chỉnh
Nếu kích thước container là chính xác bằng độ sâu bit, các đại diện được gọi là đóng gói. Nếu không, đại diện là giải nén. Các bit quan trọng của mẫu thường được căn chỉnh với bit ngoài cùng bên trái (quan trọng nhất) hoặc ngoài cùng bên phải (ít quan trọng nhất) của vật chứa. Đó là thông thường để sử dụng các từ ngữ đóng góigiải nén chỉ khi độ sâu bit không phải là một sức mạnh của hai .
Cho dù các mẫu có chữ ký hay không dấu.
Đại diện
Dấu chấm cố định hoặc dấu phẩy động; xem bên dưới.

Biểu diễn điểm cố định

Cố định điểm là đại diện phổ biến nhất cho dữ liệu âm thanh PCM không nén, đặc biệt là tại các giao diện phần cứng.

Một số điểm cố định có một (không đổi) số cố định của các chữ số trước và sau khi chấm cơ số . Tất cả các cơ quan đại diện của chúng tôi sử dụng cơ sở 2 , vì vậy chúng tôi thay thế bit cho chữ số,điểm nhị phân hoặc đơn giản là chỉ cho điểm radix. Các bit bên trái của điểm là phần số nguyên, và các bit bên phải của điểm là phần phân đoạn .

Chúng tôi nói về số nguyên PCM, bởi vì giá trị điểm cố định thường được lưu trữ và thao tác như các giá trị số nguyên. Việc giải thích như điểm cố định là ngầm định.

Chúng tôi sử dụng bổ sung hai nhân cho tất cả các cơ quan đại diện điểm cố định đã ký, vì vậy sau đây giữ nơi mà tất cả các giá trị theo đơn vị một LSB :

|largest negative value| = |largest positive value| + 1

Kí hiệu Q và U

Có nhiều ký hiệu cho đại diện điểm cố định trong một số nguyên. Chúng tôi sử dụng Q ký hiệu : Q m. n phương tiện m bit số nguyên và n bit phân đoạn. "Q" được tính là một bit, mặc dù giá trị được biểu thị bằng phần bù của hai. Tổng số bit là m + n + 1.

U m. n là các số unsigned: bit m số nguyên và n bit phân đoạn, và "U" đếm như zero bit. Tổng số bit là m + n.

Phần số nguyên có thể được sử dụng trong kết quả cuối cùng hoặc chỉ là tạm thời. Trong trường hợp sau, các bit tạo nên một phần số nguyên được gọi là bit bảo vệ. Các bit bảo vệ cho phép tính toán trung gian tràn, miễn là giá trị cuối cùng nằm trong phạm vi hoặc có thể được kẹp trong phạm vi. Lưu ý rằng điểm cố định bit bảo vệ đang ở bên trái, trong khi dấu chấm động đơn vị chữ số bảo vệ được sử dụng để giảm lỗi roundoff và ở bên phải.

Biểu diễn dấu chấm động

Floating point là một thay thế cho điểm cố định, trong đó vị trí của điểm có thể khác nhau. Những ưu điểm chính của dấu phẩy động bao gồm:

  • Greater khoảng khôngphạm vi hoạt động ; số học dấu phẩy động dung sai vượt quá phạm vi danh định trong quá trình tính toán trung gian và chỉ kẹp các giá trị ở cuối
  • Hỗ trợ các giá trị đặc biệt như số nguyên và NaN
  • Dễ sử dụng hơn trong nhiều trường hợp

Trước đây, số học dấu phẩy động chậm hơn số học số nguyên hoặc số học dấu phẩy cố định, nhưng hiện nay dấu phẩy động thường nhanh hơn, miễn là các quyết định về luồng điều khiển không dựa trên giá trị của một phép tính.

Định dạng Android cho âm thanh

Các định dạng âm thanh chính của Android được liệt kê trong bảng dưới đây:

Ký hiệu
Bất động sản Q0.15 Q0.7 1 Q0.23 Q0.31 Phao nổi
Thùng đựng hàng
chút ít
16 số 8 24 hoặc 32 2 32 32
Bit quan trọng
bao gồm cả dấu hiệu
16 số 8 24 24 hoặc 32 2 25 3
Phòng đầu
tính bằng dB
0 0 0 0 126 4
Dải động
tính bằng dB
90 42 138 138 đến 186 900 5

Tất cả các định dạng điểm cố định ở trên có phạm vi danh nghĩa từ -1.0 đến +1.0 trừ đi một LSB. Có một giá trị âm hơn giá trị dương do biểu diễn phần bù của hai giá trị đó.

Chú thích:

  1. Tất cả các định dạng ở trên giá trị mẫu có chữ ký rõ ràng. Định dạng 8-bit thường được gọi là "unsigned", nhưng nó thực sự là một giá trị ký kết với thiên vị của 0.10000000 .
  2. Q0.23 có thể được đóng gói thành 24 bit (ba byte 8 bit, little-endian) hoặc được giải nén thành 32 bit. Nếu được giải nén, các bit quan trọng hoặc được căn phải về phía LSB với phần đệm mở rộng dấu hiệu về phía MSB (Q8.23) hoặc căn trái về phía MSB với không điền vào LSB (Q0.31). Về mặt lý thuyết, Q0.31 cho phép tối đa 32 bit quan trọng, nhưng các giao diện phần cứng chấp nhận Q0.31 hiếm khi sử dụng tất cả các bit.
  3. Dấu phẩy động chính xác đơn có 23 bit rõ ràng cộng với một bit ẩn và bit dấu, dẫn đến tổng cộng 25 bit quan trọng. Số Denormal có ít bit có ý nghĩa.
  4. Dấu chấm động chính xác đơn có thể biểu thị giá trị lên đến ± 1,7e + 38, điều này giải thích cho khoảng không lớn.
  5. Phạm vi động được hiển thị dành cho các giá trị lên đến giá trị lớn nhất danh nghĩa ± 1,0. Lưu ý rằng một số kiến trúc cụ thể triển khai điểm nổi như NEON không hỗ trợ denormals.

Chuyển đổi

Phần này bàn chuyển đổi dữ liệu giữa các cơ quan đại diện khác nhau.

Chuyển đổi dấu chấm động

Để chuyển đổi một giá trị từ Q m. n định dạng để dấu chấm động:

  1. Chuyển đổi giá trị thành dấu phẩy động như thể nó là một số nguyên (bằng cách bỏ qua dấu chấm).
  2. Multiply bằng 2 - n.

Ví dụ: để chuyển đổi giá trị nội bộ Q4,27 thành dấu phẩy động, hãy sử dụng:

float = integer * (2 ^ -27)

Chuyển đổi từ dấu phẩy động sang dấu chấm cố định tuân theo các quy tắc sau:

  • Dấu phẩy động chính xác đơn có phạm vi danh định là ± 1.0, nhưng phạm vi đầy đủ cho các giá trị trung gian là ± 1.7e + 38. Việc chuyển đổi giữa dấu phẩy động và điểm cố định cho biểu diễn bên ngoài (chẳng hạn như đầu ra cho thiết bị âm thanh) sẽ chỉ xem xét phạm vi danh định, với kẹp cho các giá trị vượt quá phạm vi đó. Đặc biệt, khi +1.0 được chuyển đổi sang định dạng điểm cố định, nó sẽ được gắn vào +1.0 trừ đi một LSB.
  • Denormals (subnormals) và cả +/- 0.0 đều được phép trong biểu diễn, nhưng có thể được chuyển đổi âm thầm thành 0.0 trong quá trình xử lý.
  • Các số vô hạn sẽ chuyển qua các phép toán hoặc sẽ được giới hạn âm thầm ở mức +/- 1.0. Nói chung, cái sau là để chuyển đổi sang định dạng điểm cố định.
  • Hành vi của NaN là không xác định: một NaN có thể lan truyền như một NaN giống hệt nhau hoặc có thể được chuyển đổi thành NaN mặc định, có thể bị giới hạn âm thầm ở mức +/- 1,0 hoặc được chuyển đổi âm thầm thành 0,0 hoặc dẫn đến lỗi.

Chuyển đổi điểm cố định

Chuyển đổi giữa khác nhau Q m. n định dạng theo các quy tắc:

  • Khi m được tăng lên, dấu hiệu mở rộng phần nguyên ở bên trái.
  • Khi m được giảm, kẹp phần số nguyên.
  • Khi n được tăng lên, không mở rộng phần phân đoạn ở bên phải.
  • Khi n được giảm, hoặc run, tròn, hoặc cắt xén các bit phân đoạn dư thừa ở bên phải.

Ví dụ: để chuyển đổi giá trị Q4.27 thành Q0.15 (không hòa sắc hoặc làm tròn), hãy dịch sang phải giá trị Q4.27 bằng 12 bit và kẹp bất kỳ kết quả nào vượt quá phạm vi có dấu 16 bit. Điều này sắp xếp điểm của biểu diễn Q.

Để chuyển đổi Q7.24 để Q7.23, làm một phân chia có chữ ký của 2, hoặc tương đương thêm chút dấu hiệu để số lượng Q7.24 số nguyên, và sau đó đã ký dịch phải bằng 1. Lưu ý rằng một đơn giản dịch phải có chữ ký là không tương đương với một phép chia có dấu cho 2.

Chuyển đổi mất dữ liệu và không mất dữ liệu

Chuyển đổi là lossless nếu nó là khả nghịch : một sự chuyển đổi từ A đến B với C kết quả trong A = C . Nếu không chuyển đổi là lossy .

Chuyển đổi lossless phép khứ hồi chuyển đổi định dạng .

Các chuyển đổi từ biểu diễn điểm cố định có 25 bit quan trọng trở xuống thành dấu phẩy động là không mất dữ liệu. Chuyển đổi từ dấu phẩy động sang bất kỳ biểu diễn điểm cố định thông thường nào là mất mát.