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

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

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

  • واجهة برمجة التطبيقات Basic PWLE API: بسيطة، ولكن مع بعض القيود. تُعدّ هذه الواجهة مناسبة للبدء بسرعة. وهي متاحة في BasicEnvelopeBuilder.
  • واجهة برمجة التطبيقات Advanced PWLE API: توفّر هذه الواجهة مزيدًا من التحكّم والمرونة، وتتطلّب معرفة بتقنية اللمس وبعض الإلمام بالأجهزة. وهي متاحة في WaveformEnvelopeBuilder.

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

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

واجهة برمجة التطبيقات Basic PWLE API

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

  • تمثّل قيمة الشدة في النطاق [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، يتطلب إطار العمل أن تتمكّن الأجهزة التي تتوافق مع هذه الميزة من التعامل مع مدة لا تقل عن 20 ملّي ثانية بين نقاط تأثير 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 للجهاز. إذا تجاوزت القيم هذه الحدود، لن يشغّل الجهاز أي اهتزاز.

خريطة التردد إلى تسارع الإخراج (FOAM)

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

فهم الخريطة

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

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

مثال
رغوة

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

يخدم تأثير FOAM ثلاثة أغراض رئيسية:

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

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

يلعب تأثير FOAM دورًا حيويًا في تشكيل تأثيرات الاهتزاز. ويُستخدم لحساب نطاق الحدة لواجهة برمجة التطبيقات Basic Envelope API، ما يضمن أن تكون الاهتزازات قابلة للإدراك من قِبل المستخدم. يتوافق هذا النطاق مع الترددات التي يصل فيها تسارع الإخراج أولاً إلى 10 ديسيبل فوق الحد الأدنى لرصد الإدراك البشري (أي الحد الأدنى للمستوى المُدرَك)، وصولاً إلى آخر مرة يكون فيها تسارع الإخراج أعلى من هذا الحد. يجب أن يتضمّن هذا النطاق التردد الرنيني للمشغّل.

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

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

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

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

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

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

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

الحد الأدنى لرصد الإدراك البشري

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

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

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

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

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

الشدة المُدرَكة للاهتزاز مقابل سعة تسارع الاهتزاز

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

\(\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 g وتسارع الهاتف 2.5 g، فإنّ 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. يحدّد كل إدخال نقطة في الخريطة، ويحدّد ترددًا (بالهرتز) والحد الأقصى لتسارع الإخراج المقابل (بالتسارع الناتج عن الجاذبية الأرضية).

لتحسين دقة الاستيفاء الخطي عند تحديد قيم التسارع الوسيطة، ننصحك بتحديد دقة تردد عالية حول التردد الذي يحقق الحد الأقصى لتسارع الإخراج. على سبيل المثال، استخدِم خطوات 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.

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

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


  1. تم تحويل بيانات الحد الأدنى من الحد الأدنى للإزاحة في الشكل 1 من Bolanowski Jr.‎ S.‎ J.‎ et al.‎ "Four channels mediate the mechanical aspects of touch." Journal of the Acoustical Society of America 84(5): 1680-1694 (1988). يشرح هذا البرنامج التعليمي على الإنترنت التحويل بين سعة التسارع وسعة الإزاحة.

  2. تم تقدير البيانات من الشكل 8 في Verrillo, R.‎ T.‎ et al.‎ "Sensation magnitude of vibrotactile stimuli." Perception &Psychophysics 6: 366-372 (1969).