تنفيذ تأثيرات المغلّفات ذات الأجزاء الخطية

تأثيرات الغلاف الخطي المتعدّد الأجزاء (PWLE) هي تسلسلات من النقاط التي تحدّد معدّل التكرار والتسارع الخاصين بالاهتزاز بمرور الوقت. توفّر PWLEs ملاحظات لمسية أكثر تفصيلاً وديناميكية.

يوفر نظام التشغيل Android 16 والإصدارات الأحدث واجهتَي برمجة تطبيقات لمطوّري التطبيقات للمساعدة في إنشاء تأثيرات PWLE:

  • واجهة برمجة تطبيقات بسيطة للغة الإنجليزية المحدودة: بسيطة، ولكن مع بعض القيود مناسبة للبدء بسرعة تتوفّر هذه الميزة على BasicEnvelopeBuilder.
  • واجهة برمجة التطبيقات المتقدّمة لتأثيرات اللمس: توفّر المزيد من التحكّم والمرونة، وتتطلّب معرفة بتأثيرات اللمس وبعض الإلمام بالأجهزة. متوفّر على الرابط WaveformEnvelopeBuilder.

ولإتاحة استخدام واجهات برمجة التطبيقات هذه، يجب أن تنفِّذ الأجهزة واجهات برمجة التطبيقات التالية في طبقة تجريد الأجهزة (HAL):

  • مخطط تسارع الإخراج مقابل التردد (FOAM): يوفّر مخططًا لتردد الاهتزاز مقابل الحد الأقصى لتسارع الإخراج الذي يمكن أن يحقّقه الجهاز.
  • إنشاء اهتزاز PWLE: تشغيل اهتزاز محدّد بواسطة PWLE لشكل موجة الاهتزاز

Basic PWLE API

للحصول على طريقة سريعة لإنشاء تأثيرات PWLE بدون الحاجة إلى التعرّف على الأجهزة أو التفاصيل الدقيقة المتعلقة بالإدراك البشري، يمكن للمطوّرين استخدام واجهة برمجة التطبيقات الأساسية PWLE، التي يتم تحديدها باستخدام المَعلمات التالية:

  • تمثّل قيمة الشدة في النطاق [0, 1] قوة الاهتزاز المحسوسة. على سبيل المثال، يتم اعتبار القيمة 0.5 نصف الحد الأقصى العالمي للشدة التي يمكن أن يحققها الجهاز.
  • تمثّل قيمة الحدة في النطاق [0, 1] حدة الاهتزاز. تشير القيم المنخفضة إلى اهتزازات أكثر سلاسة، بينما تشير القيم الأعلى إلى إحساس أكثر حدة.
  • المدة هي الوقت المستغرَق للانتقال من آخر نقطة PWLE (أي زوج الشدة والحدة) إلى النقطة الجديدة، وذلك بالمللي ثانية.

في ما يلي مثال على شكل موجي يزيد من شدة الاهتزاز من مستوى منخفض إلى مستوى مرتفع خلال 500 مللي ثانية، ثم ينخفض إلى 0 مللي ثانية (إيقاف) خلال 100 مللي ثانية:

VibrationEffect effect = new VibrationEffect.BasicEnvelopeBuilder()
          .setInitialSharpness(0.0f)
          .addControlPoint(1.0f, 1.0f, 500)
          .addControlPoint(0.0f, 1.0f, 100)
          .build();

القيود

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

لضمان عرض تأثيرات PWLE بشكل متسق في جميع أنحاء نظام Android الأساسي، يتطلّب إطار العمل أن تتمكّن الأجهزة المتوافقة مع هذه الميزة من التعامل مع مدة لا تقل عن 10 مللي ثانية بين نقاط PWLE و16 نقطة على الأقل لتأثيرات PWLE. يتم فرض هذه المتطلبات من خلال اختبارات VTS، ما يساعد في ضمان توفّر تأثيرات PWLE موثوقة على جميع أجهزة Android.

Advanced PWLE API

يمكن للمطوّرين الذين لديهم معرفة متقدّمة في مجال اللمس تحديد تأثيرات PWLE باستخدام المعايير التالية:

  • تمثّل قيمة السعة في النطاق [0, 1] القوة التي يمكن تحقيقها عند تردد معيّن، كما يحدّدها FOAM للجهاز. على سبيل المثال، تؤدي القيمة 0.5 إلى توليد نصف الحد الأقصى للتسارع الناتج الذي يمكن تحقيقه عند التردد المحدّد.
  • يتم تحديد التردد مباشرةً بالهرتز.
  • المدة هي الوقت المستغرَق للانتقال من آخر نقطة PWLE إلى النقطة الجديدة، بالمللي ثانية.

في ما يلي مثال على شكل موجي يرفع مستوى اهتزاز الجهاز من إيقاف التشغيل إلى السعة الكاملة عند 120 هرتز على مدار 100 مللي ثانية، ويحافظ على هذه الحالة لمدة 200 مللي ثانية، ثم يعود إلى مستوى أقل على مدار 100 مللي ثانية:

VibrationEffect effect = new VibrationEffect.WaveformEnvelopeBuilder()
          .addControlPoint(1.0f, 120f, 100)
          .addControlPoint(1.0f, 120f, 200)
          .addControlPoint(0.0f, 120f, 100)
          .build();

القيود

لا يعدّل إطار العمل قيمتَي التردد والسعة المطلوبتَين اللتين يقدّمهما المطوّر، بل يضيف نقطة بداية بسعة 0 لضمان انتقال سلس.

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

Frequency to output acceleration mapping (FOAM)

من الضروري توفير تمثيل دقيق لقدرات الجهاز على إخراج تسارع التردد من أجل إتاحة استخدام واجهات برمجة التطبيقات PWLE. يوضّح هذا القسم أهمية هذه البيانات وكيفية استخدامها من خلال واجهات برمجة التطبيقات الخاصة بـ PWLE وعملية إنشائها.

فهم عملية الربط

يجب أن توفّر الأجهزة المتوافقة مع تأثيرات PWLE خريطة تسارع ذات تردد منخفض (FOAM). FOAM هي بنية بيانات يتم إنشاؤها بواسطة طبقة تجريد الأجهزة (HAL) التي تربط تردد الاهتزاز (بالهرتز) بالحد الأقصى لتسارع الإخراج الذي يمكن أن يحققه المشغّل (بوحدة G peak) عند هذا التردد. هذه الخريطة ضرورية لفهم كيفية اختلاف ناتج الاهتزاز حسب نطاق التردد المتوافق، ولتحديد واجهة برمجة التطبيقات الأساسية PWLE.

يعرض الرسم البياني التالي مثالاً على FOAM لمشغّل رنان نموذجي، مع حصر جهد الإدخال حول التردد الرنان لحماية المحرك:

مثال
FOAM

الشكل 1. مثال على FOAM لمشغّل رنان نموذجي

يخدم نموذج FOAM ثلاثة أغراض رئيسية:

  • تحديد نطاق التردد الكامل: يحدّد FOAM نطاق التردد الكامل للجهاز من خلال تحديد الحد الأدنى والحد الأقصى لترددات الاهتزاز المتوافقة.
  • تحديد قيمتَي الشدّة والحدة: تعمل واجهة برمجة التطبيقات الأساسية PWLE على مقياس الإدراك البشري للشدة والحدة، ثم يتم ربطها بمعلَمات التردد والسعة للأجهزة باستخدام قيم التسارع الناتج في FOAM. تساعد عملية الربط هذه في ضمان عرض التأثيرات الحسية وفقًا لإمكانات الأجهزة. يتم تحديد نطاق الحدة من خلال الحد الأدنى الملحوظ ويتوافق مع الترددات التي يمكن للجهاز أن ينتج تأثيرات لمسية يشعر بها المستخدمون. يحدد إطار العمل قيم "الشدة" وفقًا للسعة استنادًا إلى تسارع الإخراج المستهدَف عند التردد المحدّد. يساعد ذلك في ضمان تحقيق مستوى الشدة المحدّد مع البقاء ضمن إمكانات الجهاز.
  • عرض إمكانات الأجهزة: يتم عرض FOAM للمطوّرين في VibratorFrequencyProfile، ما يوفّر التردد الكامل لإخراج مجموعة بيانات التسارع التي توضّح بعض إمكانات اللمس في الجهاز. تتيح هذه البيانات للمطوّرين الذين يستخدمون واجهة برمجة التطبيقات المتقدّمة لتأثيرات الاهتزاز ذات الموجة الجيبية إنشاء تأثيرات اهتزاز مخصّصة تتجاوز نطاقات الشدّة والحدة الأساسية التي يحدّدها إطار العمل.

FOAM وواجهة برمجة التطبيقات الأساسية PWLE

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

بالإضافة إلى ذلك، يستخدم إطار العمل بيانات FOAM لربط قيم الشدة والحدة المستخدَمة في واجهة برمجة التطبيقات الأساسية PWLE بقيم السعة والتردد المقابلة لها. يساعد هذا الربط في إنتاج ملاحظات لمسية يمكن إدراكها على مستوى الأجهزة المختلفة.

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

واجهة برمجة التطبيقات المتقدّمة لـ FOAM وPWLE

يتم عرض FOAM للمطوّرين من خلال VibratorFrequencyProfile مع توفير المعلومات التالية:

  • نطاق التردد: يمكن للمطوّرين استرداد الحد الأدنى والحد الأقصى للترددات المتوافقة مع الجهاز، بوحدة هرتز، باستخدام getMinFrequencyHz وgetMaxFrequencyHz على التوالي.
  • الحد الأقصى لتسارع الإخراج: يتوفّر الحد الأقصى لتسارع الإخراج الذي يمكن أن يحقّقه الجهاز (بوحدة G) من خلال getMaxOutputAccelerationGs.
  • معدّل تكرار عملية ربط تسارع الإخراج: يوفّر getFrequenciesOutputAcceleration معدّل تكرار عملية ربط تسارع الإخراج كما هو موضّح في طبقة HAL.

يمكن للمطوّرين استخدام هذه المعلومات عند إنشاء تأثيرات مغلفات باستخدام واجهة برمجة التطبيقات المتقدّمة PWLE API. على سبيل المثال، عند تحديد تسارع الإخراج (بالوحدة G)، يجب أن يتم تحويله إلى قيمة ضمن النطاق [0.0, 1.0]، وذلك بالنسبة إلى الحد الأقصى لتسارع الإخراج في الجهاز.

باستخدام واجهة برمجة التطبيقات المتقدّمة PWLE، يمكن للمطوّرين استخدام نطاق التردد الكامل، لذا من المهم أن تكون بيانات FOAM المقدَّمة آمنة للمهتز وألا تتجاوز إمكاناته.

حدّ رصد الإدراك البشري

يشير حدّ رصد الإدراك البشري إلى الحد الأدنى لتسارع الاهتزاز الذي يمكن للشخص رصده بشكل موثوق. يختلف هذا المستوى حسب تردد الاهتزاز.

يوضّح الرسم البياني التالي الحد الأدنى لرصد الإدراك الحسي اللمسي لدى الإنسان1، من حيث التسارع، كدالة للتردد الزمني:

Human haptic perception detection
threshold

الشكل 2. الحدّ الأدنى لرصد الإدراك الحسي اللمسي لدى الإنسان

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

مستوى الاهتزاز المُدرَك مقارنةً بسعة تسارع الاهتزاز

لا يزداد إدراك الإنسان لشدة الاهتزاز (مقياس الإدراك) بشكل خطي مع سعة الاهتزاز (مَعلمة فيزيائية). تفترض واجهة برمجة التطبيقات PWLE أنّه عندما يفكّر مصمّم أو مطوّر في تغييرات في قوة الاهتزاز، يتوقّع أن تتبع الشدة المحسوسة قانون PWLE. تتميز الشدة المدرَكة بمستوى الإحساس (SL)، الذي يتم تعريفه على أنّه ديسيبل فوق عتبة الاكتشاف عند التردد نفسه. وبالتالي، يمكن حساب سعة تسارع الاهتزاز (بوحدة G peak) على النحو التالي:

\(Amplitude(G) =10^\frac{Amplitude(db)}{20}\)

حيث إنّ مستوى الصوت بالديسيبل هو مجموع مستوى الصوت وحدّ الاكتشاف (القيمة على المحور الصادي في الرسم البياني التالي) عند تردد معيّن.

بهذه الطريقة، تضمن واجهة برمجة التطبيقات PWLE API أن تتغيّر الشدّة المدرَكة بشكل خطي بين أزواج نقاط التحكّم المتتالية.

يعرض الرسم البياني التالي مستويات تسارع الاهتزاز2 عند 10 و20 و30 و40 و50 ديسيبل من مستوى الصوت، بالإضافة إلى عتبة اكتشاف الإدراك الحسي البشري (0 ديسيبل من مستوى الصوت)، كدالة للتردد الزمني.

مستويات تسارع الاهتزاز

الشكل 3. مستويات تسارع الاهتزاز

تحديد معدّل تكرار منحنى التسارع الناتج الأقصى

يقدّم هذا القسم إرشادات عامة حول كيفية الحصول على منحنى تسارع الإخراج الأقصى حسب التردد من الجهاز، والذي يمكنك استخدامه لإنشاء بيانات FOAM.

الحصول على منحنى الجهد الأقصى (V)

V هو الحد الأقصى للجهد الذي يمكن تطبيقه بأمان على جهاز الاهتزاز ضمن نطاق تردد التشغيل. ويضمن ذلك عمل المحرّك ضمن حدود آمنة، ما يمنع حدوث تلف ويزيد من قوة الاهتزاز.

إذا كان الجهاز يتضمّن ميزة تحديد الجهد الكهربائي، استخدِمها لقياس الحد الأقصى للجهد الكهربائي الذي يمكن تحقيقه مباشرةً في نطاق التردد المتوافق.

احتساب الحد الأقصى للتسارع (M)

M هي الحد الأقصى للتسارع، ويمكنك حسابها باستخدام منهجيات مختلفة. يوضّح هذا القسم إحدى طرق استخدام المحركات الخطية الرنانة (LRA).

تحوّل هذه الطريقة الحد الأقصى للجهد المطبّق عند تردد معيّن إلى الحد الأقصى لقيمة التسارع المقابلة، ويتم التعبير عنها بوحدة G peak.

المعادلة الأساسية المستخدَمة لهذه الإحالة الناجحة هي:

\(\text{Accel}(w)= (\text{Vsys}\times\text{BLsys}\times\text{Loc_coeff}/\text{Rsys}/\text{MPhone})\times{w^2}/\text{Psys_abs}/{9.81}\)

المكان:

Vsys: مستوى الجهد الفعلي المطبَّق على المحرّك اللمسي

BLsys: ناتج قوة المجال المغناطيسي (B) وطول الموصل (L) في محرك الاهتزاز

Loc_coeff: معامل الموقع الجغرافي لتحويل تسارع الوحدة إلى تسارع على مستوى الهاتف

Rsys: المقاومة الكهربائية لملف محرّك الاهتزاز

MPhone: كتلة الجهاز (على سبيل المثال، الهاتف)

w: التردد الزاوي (راديان في الثانية) لإشارة القيادة، ويتم حسابه على النحو التالي:

\(w = 2 \pi f\)

Psys_abs: استجابة السعة لنظام من الدرجة الثانية يتضمّن كتلة ومخمّدًا ونابضًا، ويتم احتسابها على النحو التالي:

\(\text{Psys_abs} = (\text{Wnsys}^2-w^2)^2+({w}\times(\text{Wnsys}/\text{Qsys}))^2\)

Wnsys: التردد الطبيعي لنظام الاهتزاز

Qsys: عامل الجودة لنظام الاهتزاز

Loc_coeff هي نسبة التسارع الذي يتم قياسه على مستوى الهاتف إلى التسارع الذي يتم قياسه على مستوى الوحدة. يتم استخدام هذه النسبة لتحويل قراءات التسارع على مستوى الوحدة إلى قراءات التسارع المكافئة على مستوى الهاتف. على مستوى الهاتف، وبسبب التسارع الزاوي لحركة الوحدة، يتم تضخيم التسارع، ويشرح هذا المعامل هذا النوع من التأثير. ويتم احتسابها من خلال المعادلة التالية:

\(\text{Loc_coeff} = \text{phone_acceleration} / \text{module_acceleration}\)

على سبيل المثال، إذا كان تسارع الوحدة 1 غرام وتسارع الهاتف 2.5 غرام، فإنّ Loc_coeff = 2.5. يشير ذلك إلى تضخيم بمقدار 2.5 مرة.

يستخدم إطار عمل Android وحدة الهرتز للتردد، لذا يجب أن يحوّل HAL وحدة التردد من راديان في الثانية إلى هرتز عند إنشاء بيانات FOAM.

إنشاء منحنى FOAM

اجمع بين منحنى الحد الأقصى للجهد (V) واحتساب التسارع (M) لتحديد منحنى FOAM:

  • لكل تردد (f) في النطاق المطلوب، ابحث عن الحد الأقصى للجهد V(f) المقابل من منحنى الحد الأقصى للجهد.
  • احسب الحد الأقصى للتسارع عند هذا التردد باستخدام المعادلة أعلاه، مع استبدال V(f) بـ Vsys وf بـ w. يمنحك ذلك M(V(f), f).
  • التسارع المحسوب هذا هو قيمة FOAM(f).

عرض بيانات FOAM

بعد إنشاء منحنى FOAM، يمثّل HAL المنحنى كقائمة من عناصر FrequencyAccelerationMapEntry. يحدّد كل إدخال نقطة في عملية الربط، ويشير إلى التردد (بالهرتز) وما يقابله من الحد الأقصى لتسارع الإخراج (بوحدة G peak).

مع أنّه ما مِن متطلبات صارمة بشأن دقة FOAM، ننصحك بتحديد منحنيات تتضمّن قمة واحدة كحدّ أقصى. يتم استخدام الذروة الأولى فقط في واجهة برمجة التطبيقات الأساسية الخاصة بالمنحنى لتحديد تأثيرات الاهتزاز. لتحسين دقة الاستيفاء الخطي عند تحديد قيم التسارع الوسيطة، ننصح بتحديد دقة عالية التردد حول الذروة. على سبيل المثال، استخدِم خطوات 1 هرتز ضمن نطاق +/- 10 هرتز من التردد الأقصى.

إمكانات الجهاز وقيوده

في نظام التشغيل Android 16 والإصدارات الأحدث، وللمساعدة في تحسين تأثيرات PWLE وضمان التوافق مع جميع الأجهزة، يتضمّن Android واجهات برمجة تطبيقات HAL للاستعلام عن إمكانات PWLE في الجهاز. توفّر هذه الطرق معلومات حول قيود الجهاز، مثل الحد الأدنى أو الأقصى لمدة عنصر PWLE وعدد العناصر المسموح بها في تركيبة PWLE.

تشمل واجهات برمجة التطبيقات HAL ما يلي:

  • CAP_COMPOSE_PWLE_EFFECTS_V2: يتم عرضها من خلال IVibrator.getCapabilities عندما يتيح الجهاز استخدام هذه الميزة.
  • getFrequencyToOutputAccelerationMap: تسترد هذه السمة بيانات FOAM.
  • getPwleV2PrimitiveDurationMinMillis: يسترد هذا الإجراء الحد الأدنى لمدة أي عنصر PWLE أساسي بوحدة الملّي ثانية.
  • getPwleV2PrimitiveDurationMaxMillis: تسترد هذه السمة الحد الأقصى لمدة أي عنصر PWLE أساسي، وذلك بالملّي ثانية.
  • getPwleV2CompositionSizeMax: يسترد هذا الحقل الحد الأقصى لعدد عناصر PWLE الأساسية التي يتيحها IVibrator.composePwleV2.

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

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


  1. يتم تحويل بيانات الحد الأدنى من إزاحة الحد الأدنى في الشكل 1 من Bolanowski Jr.، S. ‫J., et al.. "تتوسّط أربع قنوات الجوانب الميكانيكية للمس". Journal of the Acoustical Society of America 84(5): 1680-1694 (1988). يشرح هذا البرنامج التعليمي على الإنترنت عملية التحويل بين سعة التسارع وسعة الإزاحة. 

  2. يتم تقدير البيانات من الشكل 8 في Verrillo، R. T., et al.. "مقدار الإحساس بالمؤثرات الحسية الاهتزازية" Perception & Psychophysics 6: 366-372 (1969).