تنسيقات البيانات

يستخدم Android مجموعة متنوعة من المقاطع الصوتية تنسيقات البيانات داخليًا، ويعرض مجموعة فرعية منها في واجهات برمجة التطبيقات العامة، وتنسيقات الملفات، و طبقة تجريد الأجهزة (HAL).

الخصائص

يتم تصنيف تنسيقات البيانات الصوتية حسب خصائصها:

الضغط
غير مضغوط، مضغوطًا بدون فقدان البيانات، أو المضغوط مضغوطًا. PCM هو تنسيق الصوت غير المضغوط الأكثر شيوعًا. إنّ FLAC عبارة عن ملف مضغوط بدون فقدان البيانات MP3 وAAC تنسيقات مضغوطة مع فقدان البيانات.
عمق البت
عدد وحدات البت المهمة لكل عيّنة صوتية
حجم الحاوية
عدد وحدات البت المستخدمة لتخزين عينة أو نقلها. السعر المعتاد يشبه عمق البت، لكن أحيانًا يتم تخصيص بتات المساحة المتروكة للمحاذاة. على سبيل المثال، يمكن تضمين عينة 24 بت ضمن كلمة 32 بت.
المحاذاة
إذا كان حجم الحاوية يساوي تمامًا عمق البت، تسمى التمثيل معبأ. بخلاف ذلك، يكون التمثيل unpacked. عادة ما تكون الأجزاء المهمة من العينة تتم محاذاتها إما مع أقصى اليسار (الأكثر أهمية) أو أقصى اليمين (الأقل أهمية) للحاوية. من الشائع استخدام المصطلحين packed وunpacked استنادًا إلى العنصرَين العمق ليس القوة من اثنان.
تسجيل الدخول
ما إذا كانت النماذج موقّعة أو غير موقعة
التمثيل
إما نقطة ثابتة أو نقطة عائمة انظر أدناه.

تمثيل النقاط الثابتة

نقطة ثابتة هو التمثيل الأكثر شيوعًا لبيانات صوت PCM غير المضغوطة، خاصةً في واجهات الأجهزة.

يحتوي عدد النقاط الثابتة على عدد ثابت (ثابت) من الأرقام. قبل نقطة الجذر وبعدها. تستخدم جميع تمثيلاتنا الأساس 2، لذلك نستبدل bit بـ الرقم، ونقطة ثنائية أو ببساطة نقطة نقطة مركزية. وحدات البت على يسار النقطة هي جزء العدد الصحيح، البتات الموجودة على يمين النقطة هي الجزء الكسري.

ونتحدث عن عدد صحيح PCM، لأنّ القيم ذات النقاط الثابتة عادة ما يتم تخزينها ومعالجتها كقيم أعداد صحيحة. كما أن تفسير القيمة "نقطة ثابتة" ضمني.

نستخدم التكامل الثاني لجميع تمثيلات النقاط الثابتة الموقعة، إذًا، ينطبق ما يلي على أن تكون جميع القيم بوحدات وحدة LSB:

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

علامتا Q وU

هناك العديد من الملاحظات لتمثيل النقاط الثابتة في عدد صحيح. نستخدم علامة Q: Qm.n تعني m عدد بت صحيح ون بت كسري. The "Q" يتم حسابها وحدة بت واحدة، على الرغم من أن القيمة يتم التعبير عنها في تكملة اثنين. إجمالي عدد وحدات البت هو m + n + 1.

يُستخدَم U.n للأرقام غير الموقَّعة: m من وحدات بت صحيح وn بت كسري، و"U" يكون صفرًا. إجمالي عدد وحدات البت هو m + n.

يمكن استخدام جزء العدد الصحيح في النتيجة النهائية أو أن يكون مؤقتًا. في الحالة الثانية، تُسمى وحدات البت التي يتكون منها جزء العدد الصحيح وحدات بت حماية. تسمح بتات الحماية لعملية حسابية متوسطة بالتجاوز، طالما أن القيمة النهائية ضمن النطاق أو يمكن تثبيتها لتكون ضمن النطاق لاحظ أن وحدات بت حماية النقطة الثابتة تكون في اليسار، بينما تكون وحدة النقطة العائمة أرقام الحماية لتقليل أخطاء التجميع وتكون على اليمين.

تمثيل النقطة العائمة

النقطة العائمة بديلاً عن النقطة الثابتة، والتي يمكن أن يختلف فيها موقع النقطة. تشمل المزايا الأساسية للنقطة العائمة ما يلي:

  • ارتفاع أكبر والنطاق الديناميكي العمليات الحسابية للنقاط العائمة تتجاوز النطاقات الاسمية خلال العمليات الحسابية المتوسطة، ويتم تثبيت القيم فقط في النهاية
  • دعم القيم الخاصة مثل اللانهاية وNaN
  • أسهل في الاستخدام في كثير من الحالات

سابقًا، كانت حساب النقاط العائمة أبطأ من العدد الصحيح أو النقطة الثابتة. الحساب، ولكن من الشائع الآن أن تكون النقطة العائمة أسرع، قرارات تدفق التحكم المقدمة لا تستند إلى قيمة العملية الحسابية.

تنسيقات Android للصوت

يمكنك الاطّلاع على التنسيقات الرئيسية لأجهزة Android الصوتية في الجدول أدناه:

التدوين
الخاصية السؤال 0.15 السؤال 0.7 1 السؤال 0.23 س0.31 عائم
وحدات بت
الحاوية
16 8 24 أو 32 2 32 32
وحدات بت كبيرة
بما في ذلك علامة
16 8 24 24 أو 32 2 25 3
هامش النمو
بالديسيبل
0 0 0 0 126 4
النطاق الديناميكي
بالديسيبل
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 (السؤال 0.31). يسمح Q0.31 نظريًا بما يصل إلى 32 وحدة بت ذات أهمية، ولكن نادرًا ما تستخدم واجهات الأجهزة التي تقبل Q0.31 جميع وحدات البت.
  3. تحتوي النقطة العائمة أحادية الدقة على 23 وحدة بت واضحة بالإضافة إلى بت واحد مخفي وعلامة بت، مما ينتج عنه 25 وحدة بت كبيرة. الأرقام غير العادية تحتوي على وحدات بت ذات أهمية أقل.
  4. يمكن للنقطة العائمة ذات الدقة الواحدة التعبير عن قيم تصل إلى 1.7e+38 أو أقل، وهو ما يفسر هامش النمو الكبير.
  5. النطاق الديناميكي المعروض مخصص للقيم غير الطبيعية حتى الحد الأقصى الاسمي القيمة ≥1.0. لاحظ أن بعض عمليات تنفيذ النقطة العائمة الخاصة بالبنية، مثل نيون لا تدعم القيم غير الطبيعية.

الإحالات الناجحة

يناقش هذا القسم الإحالات الناجحة للبيانات بين التمثيلات المختلفة.

إحالات ناجحة النقاط العائمة

لتحويل قيمة من التنسيق Qm.n إلى نقطة عائمة:

  1. حوِّل القيمة إلى نقطة عائمة كما لو كانت عددًا صحيحًا (عن طريق تجاهل النقطة).
  2. اضرِب في 2-n.

على سبيل المثال، لتحويل قيمة داخلية للربع 4.27 إلى نقطة عائمة، استخدِم:

float = integer * (2 ^ -27)

تتّبع الإحالات الناجحة من النقطة العائمة إلى النقطة الثابتة القواعد التالية:

  • نطاق النقطة العائمة أحادية الدقة يزيد عن 1.0 أو أقل، لكن النطاق الكامل للقيم المتوسطة هو +1.7e+38. التحويل بين النقطة العائمة والنقطة الثابتة للتمثيل الخارجي (مثل إخراج إخراج من الأجهزة الصوتية) إلى النطاق الاسمي فقط، حيث التثبيت على القيم التي تتخطى هذا النطاق. وعلى وجه الخصوص، عند تحويل +1.0 إلى تنسيق نقطة ثابتة، يتم تثبيتها على +1.0 ناقص واحد LSB.
  • يُسمح باستخدام القيم غير الطبيعية (القيم الفرعية) وكل من +/- 0.0 في التمثيل، ولكن قد يتم تحويلها بدون تنبيه إلى 0.0 أثناء المعالجة.
  • سوف تمر اللانهاية بالعمليات أو ستكون محدودة جدًا إلى +/- 1.0. وبشكلٍ عام، يكون الخيار الأخير للتحويل إلى تنسيق نقاط ثابتة.
  • سلوك NaN غير محدد: قد يتم نشر NaN على أنها NaN متطابقة، أو يتم تحويلها إلى قيمة NaN افتراضية، أو قد يتم قصرها بشكل غير ملحوظ على +/- 1.0، أو التحويل إلى 0.0 بدون تنبيه أو ينتج عنه خطأ.

الإحالات الناجحة باستخدام نقطة ثابتة

تتّبع الإحالات الناجحة بين تنسيقات Qm.n المختلفة القواعد التالية:

  • عند زيادة قيمة m، يمكنك تمديد جزء العدد الصحيح على اليسار.
  • عند تقليل m، ثبِّت جزء العدد الصحيح.
  • عند زيادة n، يعمل الصفر على تمديد الجزء الكسري على اليمين.
  • عند تقليل n، يمكنك إما قلب النص أو تقريبه أو اقتطاع وحدات بت الكسر الزائدة على اليمين.

على سبيل المثال، لتحويل قيمة Q4.27 إلى Q0.15 (بدون علامة أو التقريب)، وتحويل قيمة Q4.27 لليمين بمقدار 12 بت، وربط أي نتائج التي تتجاوز النطاق الموقَّع 16 بت. يعمل هذا على محاذاة نقطة Q.

لتحويل س7.24 إلى س7.23، أجرِ عملية قسمة بعلامة على 2، أو ما يعادل ذلك إضافة بت الإشارة إلى كمية العدد الصحيح Q7.24، ثم التوقيع على shift الأيمن بمقدار 1. يُرجى ملاحظة أنّ التبديل الأيمن البسيط لا يساوي علامة القسمة على 2.

الإحالات الناجحة بدون فقدان البيانات أو فقدان البيانات

تكون الإحالة الناجحة غير خالية من فقدان البيانات إذا كانت العكس: إحالة ناجحة من A إلى B إلى نتيجة C في A = C. بخلاف ذلك، يكون الإحالة الناجحة غير مكتملة.

السماح بالإحالات الناجحة بدون فقدان البيانات تحويل تنسيق البيانات ذهابًا وإيابًا:

لا يتم فقدان أي فقدان للإحالات الناجحة من تمثيل النقاط الثابت الذي يتضمّن 25 وحدة بت كبيرة أو أقل إلى النقطة العائمة. مع فقدان الإحالات الناجحة من النقطة العائمة إلى أي تمثيل نقاط ثابتة شائع.