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

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

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

الخصائص

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

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

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

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

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

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

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

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

تدوين Q و U

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

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

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

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

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

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

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

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

يتم سرد تنسيقات Android الرئيسية للصوت في الجدول أدناه:

الرموز
ملكية س 0.15 Q0.7 1 س 0.23 Q0.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 (Q0.31). يسمح Q0.31 نظريًا بما يصل إلى 32 بتًا كبيرًا ، لكن واجهات الأجهزة التي تقبل Q0.31 نادرًا ما تستخدم كل البتات.
  3. تحتوي النقطة العائمة أحادية الدقة على 23 بتًا صريحًا بالإضافة إلى بت مخفي واحد وبت تسجيل ، مما ينتج عنه إجمالي 25 بتًا مهمًا. الأعداد العمودية لها عدد أقل من البتات المهمة.
  4. يمكن أن تعبر النقطة العائمة أحادية الدقة عن قيم تصل إلى ± 1.7e + 38 ، وهو ما يفسر مساحة الرأس الكبيرة.
  5. النطاق الديناميكي الموضح هو للقائم حتى القيمة القصوى الاسمية ± 1.0. لاحظ أن بعض تطبيقات الفاصلة العائمة الخاصة بالهندسة المعمارية مثل NEON لا تدعم الأعداد العائمة.

التحويلات

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

تحويلات النقطة العائمة

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

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

على سبيل المثال ، لتحويل قيمة داخلية Q4.27 إلى نقطة عائمة ، استخدم:

float = integer * (2 ^ -27)

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

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

تحويلات النقطة الثابتة

التحويلات بين مختلف Q م . تتبع تنسيقات n هذه القواعد:

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

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

لتحويل Q7.24 إلى Q7.23 ، قم بإجراء قسمة موقعة على 2 ، أو قم بإضافة بت الإشارة بشكل مكافئ إلى كمية العدد الصحيح Q7.24 ، ثم إزاحة لليمين موقعة بمقدار 1. لاحظ أن الإزاحة البسيطة الموقعة لليمين لا تعادل قسمة موقعة على 2.

تحويلات ضياع وضياع

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

تسمح التحويلات غير المفقودة بتحويل تنسيق ذهابًا وإيابًا .

التحويلات من تمثيل النقطة الثابتة مع 25 بت أو أقل إلى النقطة العائمة تكون بلا خسارة. التحويلات من النقطة العائمة إلى أي تمثيل مشترك للنقطة الثابتة تكون ضائعة.