Google มุ่งมั่นที่จะพัฒนาความเท่าเทียมทางเชื้อชาติสำหรับชุมชนคนผิวดำ มาดูกันว่า
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

รูปแบบข้อมูล

Android ใช้ รูปแบบข้อมูล เสียง ที่หลากหลาย ภายในและแสดงชุดย่อยของสิ่งเหล่านี้ใน API สาธารณะ รูปแบบไฟล์ และ Hardware Abstraction Layer (HAL)

คุณสมบัติ

รูปแบบข้อมูลเสียงถูกจัดประเภทตามคุณสมบัติ:

การอัด
ไม่ บีบอัดบีบอัด สูญหาย หรือ บีบอัดสูญหาย PCM เป็นรูปแบบเสียงที่ไม่มีการบีบอัดที่ใช้กันทั่วไป FLAC เป็นรูปแบบที่บีบอัดแบบไม่สูญเสียในขณะที่ MP3 และ AAC เป็นรูปแบบที่บีบอัดแบบสูญเสีย
ความลึกบิต
จำนวนบิตที่สำคัญต่อตัวอย่างเสียง
ขนาดภาชนะ
จำนวนบิตที่ใช้เพื่อเก็บหรือส่งตัวอย่าง โดยทั่วไปแล้วสิ่งนี้จะเหมือนกับความลึกของบิต แต่บางครั้งบิตการเติมเพิ่มเติมจะถูกจัดสรรเพื่อการจัดตำแหน่ง ตัวอย่างเช่นตัวอย่าง 24 บิตอาจมีอยู่ในคำที่ 32 บิต
การวางแนว
ถ้าขนาดของคอนเทนเนอร์เท่ากับความลึกของบิตการแทนค่าจะถูกเรียกว่า แพค มิฉะนั้นตัวแทนจะถูก แยกออก โดยทั่วไปบิตที่มีนัยสำคัญของตัวอย่างจะถูกจัดชิดกับบิตซ้ายสุด (สำคัญที่สุด) หรือขวาสุด (สำคัญน้อยที่สุด) ของคอนเทนเนอร์ มันเป็นเรื่องธรรมดาที่จะใช้คำที่ บรรจุ และ แกะออก เมื่อความลึกของบิตไม่ใช่ พลังของทั้งสอง
signedness
ไม่ว่าจะเป็นตัวอย่างลงชื่อหรือไม่ได้ลงนาม
การแสดง
ทั้งจุดคงที่หรือจุดลอย ดูด้านล่าง

การเป็นตัวแทนจุดคงที่

จุดคงที่ เป็นการนำเสนอที่พบมากที่สุดสำหรับข้อมูลเสียง PCM ที่ไม่บีบอัดโดยเฉพาะที่อินเตอร์เฟสฮาร์ดแวร์

หมายเลขจุดคงที่มีจำนวนหลักคงที่ (คงที่) ก่อนและหลัง จุดฐาน การเป็นตัวแทนของเราทั้งหมดใช้ ฐาน 2 ดังนั้นเราจึงแทนที่ บิต สำหรับ หลัก และ จุดฐานสอง หรือเพียงแค่ ชี้ไปที่จุด ฐาน บิตทางด้านซ้ายของจุดคือส่วนจำนวนเต็มและบิตทางด้านขวาของจุดเป็น ส่วนที่เป็นเศษส่วน

เราพูดถึง จำนวนเต็ม PCM เพราะค่าจุดคงที่มักจะถูกจัดเก็บและจัดการเป็นค่าจำนวนเต็ม การตีความแบบจุดคงที่นั้นเป็นนัย

เราใช้ ส่วนประกอบ สองอย่างสำหรับการเป็นตัวแทนจุดคงที่ที่มีการลงชื่อดังนั้นการเก็บต่อไปนี้จะเก็บค่าทั้งหมดไว้ในหน่วยของ LSB หนึ่งรายการ:

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

สัญกรณ์ Q และ U

มี สัญลักษณ์ ต่าง ๆ สำหรับการนำเสนอจุดคงที่ในจำนวนเต็ม เราใช้ สัญกรณ์ Q: Q m n หมายถึง m บิตจำนวนเต็มและบิต n เศษส่วน "Q" นับเป็นหนึ่งบิตแม้ว่าค่าจะแสดงในส่วนเติมเต็มของสอง จำนวนบิตทั้งหมดคือ m + n + 1

. n เป็นตัวเลขไม่ได้ลงนาม: บิตเมตรจำนวนเต็มและบิต n เศษส่วนและ "U" นับเป็นศูนย์บิต จำนวนบิตทั้งหมดคือ m + n

ส่วนจำนวนเต็มอาจใช้ในผลลัพธ์สุดท้ายหรือเป็นชั่วคราว ในกรณีหลังบิตที่ประกอบขึ้นเป็นส่วนจำนวนเต็มเรียกว่า บิตยาม บิตยามอนุญาตให้มีการคำนวณระดับกลางในการโอเวอร์โฟลว์ได้ตราบใดที่ค่าสุดท้ายอยู่ในช่วงหรือสามารถถูกบีบให้อยู่ในช่วง โปรดทราบว่าบิตการ์ดจุดคงที่อยู่ทางด้านซ้ายในขณะที่ตัวเลขหน่วย ความปลอดภัย แบบลอยใช้เพื่อลดข้อผิดพลาดของการปัดเศษและอยู่ทางขวา

การแสดงจุดลอยตัว

จุดลอยตัว เป็นอีกทางเลือกหนึ่งของจุดคงที่ซึ่งตำแหน่งของจุดสามารถเปลี่ยนแปลงได้ ข้อดีหลักของ floating-point ได้แก่ :

  • มหานคร headroom และ ช่วงไดนามิก ; การคำนวณเลขทศนิยมจะยอมให้เกินช่วงที่กำหนดระหว่างการคำนวณระดับกลางและยึดเฉพาะค่าในตอนท้าย
  • รองรับค่าพิเศษเช่น infinities และ NaN
  • ง่ายต่อการใช้งานในหลายกรณี

ในอดีตเลขคณิตจุดลอยตัวนั้นช้ากว่าเลขจำนวนเต็มหรือจุดคงที่ แต่ตอนนี้มันเป็นเรื่องธรรมดาสำหรับจุดลอยตัวที่จะเร็วขึ้นหากการตัดสินใจควบคุมกระแสไม่ได้ขึ้นอยู่กับค่าของการคำนวณ

รูปแบบ Android สำหรับเสียง

รูปแบบ Android ที่สำคัญสำหรับเสียงอยู่ในตารางด้านล่าง:

เอกสาร
คุณสมบัติ Q0.15 Q0.7 1 Q0.23 Q0.31 ลอย
ภาชนะ
เกร็ด
16 8 24 หรือ 32 2 32 32
บิตที่สำคัญ
รวมถึงป้าย
16 8 24 24 หรือ 32 2 25 3
headroom
ใน dB
0 0 0 0 126 4
ช่วงไดนามิก
ใน dB
90 42 138 138 ถึง 186 900 5

รูปแบบจุดคงที่ด้านบนทั้งหมดมีช่วงเล็กน้อยระหว่าง -1.0 ถึง +1.0 ลบหนึ่ง LSB มีค่าลบมากกว่าค่าบวกเนื่องจากการเป็นตัวแทนของทั้งสองนั้น

เชิงอรรถ:

  1. รูปแบบทั้งหมดข้างต้นแสดงค่าตัวอย่างที่ลงชื่อ รูปแบบ 8 บิตโดยทั่วไปเรียกว่า "ไม่ได้ลงนาม" แต่จริง ๆ แล้วมันเป็นค่าที่ลงนามด้วยอคติของ 0.10000000
  2. Q0.23 อาจบรรจุใน 24 บิต (สามไบต์ 8 บิต) หรือแยกใน 32 บิต หากไม่มีการบรรจุบิตที่สำคัญจะถูกจัดชิดขอบขวาของ LSB พร้อมกับส่วนขยายของเครื่องหมายเสริมที่มีต่อ MSB (Q8.23) หรือปรับชิดซ้ายไปสู่ ​​MSB โดยเติมที่ศูนย์ไปยัง LSB (Q0.31) Q0.31 ในทางทฤษฎีอนุญาตให้มีได้ถึง 32 บิตที่สำคัญ แต่อินเตอร์เฟสฮาร์ดแวร์ที่ยอมรับ Q0.31 ไม่ค่อยใช้บิตทั้งหมด
  3. จุดลอยตัวที่มีความแม่นยำเดียวมีบิตชัดเจน 23 บิตบวกหนึ่งบิตที่ซ่อนอยู่และบิตสัญญาณทำให้เกิดผลรวม 25 บิตที่สำคัญ ตัวเลข Denormal มีบิตที่สำคัญน้อยกว่า
  4. จุดลอยตัวที่มีความแม่นยำเดียวสามารถแสดงค่าสูงสุดถึง± 1.7e + 38 ซึ่งอธิบายถึงส่วนขยายที่มีขนาดใหญ่
  5. ช่วงไดนามิกที่แสดงนั้นใช้สำหรับ denormals จนถึงค่าสูงสุดที่กำหนด± 1.0 โปรดทราบว่าการใช้งานจุดลอยตัวเฉพาะสถาปัตยกรรมเช่น NEON ไม่สนับสนุน denormals

การแปลง

ส่วนนี้อธิบาย การแปลงข้อมูล ระหว่างการนำเสนอที่หลากหลาย

การแปลงจุดลอย

ในการแปลงค่าจาก Q m n ฟอร์แมตเป็นทศนิยม:

  1. แปลงค่าเป็นทศนิยมเช่นเดียวกับมันเป็นจำนวนเต็ม (โดยไม่สนใจจุด)
  2. คูณด้วย 2 - n

ตัวอย่างเช่นหากต้องการแปลงค่าภายใน Q4.27 เป็นทศนิยมให้ใช้:

float = integer * (2 ^ -27)

การแปลงจากเลขทศนิยมไปยังจุดคงที่ปฏิบัติตามกฎเหล่านี้

  • จุดลอยตัวที่มีความเที่ยงตรงเดียวมีช่วงที่กำหนด± 1.0 แต่ช่วงเต็มสำหรับค่ากลางคือ± 1.7e + 38 การแปลงระหว่างจุดลอยตัวและจุดคงที่สำหรับการเป็นตัวแทนภายนอก (เช่นเอาท์พุทเป็นอุปกรณ์เสียง) จะพิจารณาเฉพาะช่วงเล็กน้อยด้วยการจับยึดสำหรับค่าที่เกินช่วงนั้น โดยเฉพาะอย่างยิ่งเมื่อ +1.0 ถูกแปลงเป็นรูปแบบจุดคงที่จะถูกยึดเป็น +1.0 ลบหนึ่ง LSB
  • Denormals (subnormals) และทั้งคู่ +/- 0.0 ได้รับอนุญาตในการเป็นตัวแทน แต่อาจถูกแปลงเป็น 0.0 ในระหว่างการประมวลผล
  • อินฟินิตี้จะผ่านการปฏิบัติการหรือจะถูก จำกัด อย่างเงียบ ๆ จนถึง +/- 1.0 โดยทั่วไปหลังสำหรับแปลงเป็นรูปแบบจุดคงที่
  • พฤติกรรมของ NaN นั้นไม่ได้ถูกกำหนด: NaN อาจแพร่กระจายเป็น NaN ที่เหมือนกันหรืออาจถูกแปลงเป็น NaN ที่เป็นค่าเริ่มต้นซึ่งอาจถูก จำกัด อย่างเงียบ ๆ ที่ +/- 1.0 หรือถูกแปลงเป็น 0.0 หรือส่งผลให้เกิดข้อผิดพลาด

การแปลงจุดคงที่

การแปลงที่แตกต่างกันระหว่าง Q เมตร รูปแบบ n ปฏิบัติตามกฎเหล่านี้:

  • เมื่อ m เพิ่มขึ้นให้ทำเครื่องหมายขยายส่วนจำนวนเต็มทางซ้าย
  • เมื่อ m ลดลงให้ยึดส่วนจำนวนเต็ม
  • เมื่อ n เพิ่มขึ้นศูนย์จะขยายส่วนที่เป็นเศษส่วนทางขวา
  • เมื่อ n ลดลงทั้ง dither ปัดเศษหรือตัดส่วนเศษส่วนส่วนเกินทางขวา

ตัวอย่างเช่นหากต้องการแปลงค่า Q4.27 เป็น Q0.15 (โดยไม่มีการปัดเศษหรือปัดเศษ) ให้เลื่อนค่า Q4.27 ไปเป็น 12 บิตและยึดผลลัพธ์ใด ๆ ที่เกินช่วงเซ็น 16 บิต สิ่งนี้จัดตำแหน่งของการแทน Q

ในการแปลง Q7.24 เป็น Q7.23 ให้ทำเครื่องหมายหารด้วย 2 หรือเพิ่มเครื่องหมายบิตลงในปริมาณ Q7.24 จำนวนเต็มที่เท่ากันจากนั้นเซ็นการเลื่อนขวาโดย 1 โปรดทราบว่าการเลื่อนขวาที่ลงลายมือชื่ออย่างง่าย ไม่ เท่ากับ หารด้วย 2

การสูญเสียและการสูญเสียการแปลง

การแปลงจะ ไม่สูญเสีย ถ้ามัน สามารถย้อนกลับได้ : การแปลงจาก A B ถึง C จะทำให้เกิด A = C มิฉะนั้นการแปลงจะ สูญเสีย

การแปลงแบบไม่สูญเสียอนุญาตให้ มีการแปลงรูปแบบไป - กลับ

การแปลงจากการเป็นตัวแทนจุดคงที่ที่มี 25 บิตที่มีนัยสำคัญหรือน้อยกว่าไปยังจุดลอยตัวนั้นไม่มีความสูญเสีย การแปลงจากจุดลอยตัวไปเป็นตัวแทนจุดคงที่ทั่วไปจะสูญเสีย