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

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

ملكيات

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

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

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

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

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

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

نحن نستخدم تكملة two لجميع تمثيلات النقاط الثابتة الموقعة، وبالتالي فإن ما يلي ينطبق حيث تكون جميع القيم بوحدات 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 الرئيسية للصوت في الجدول أدناه:

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

التحويلات

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

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

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

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

على سبيل المثال، لتحويل قيمة داخلية Q4.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، أو يؤدي إلى خطأ.

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

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

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

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

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

التحويلات الخاسرة وغير المفقودة

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

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

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