تأثيرات "الظرف الخطي المتغيّر على أجزاء" (PWLE) هي تسلسلات من النقاط تحدّد معدّل الاهتزاز وتسارعه بمرور الوقت. توفّر تأثيرات PWLE تجاوبًا حسّيًا أكثر تفصيلاً وديناميكية.
يوفّر Android 16 والإصدارات الأحدث واجهتَي برمجة تطبيقات لمطوّري التطبيقات لمساعدتهم في إنشاء تأثيرات PWLE:
- واجهة برمجة التطبيقات Basic PWLE API: بسيطة، ولكن مع بعض القيود. تُعدّ هذه الواجهة خيارًا جيدًا للبدء بسرعة. وهي متاحة في
BasicEnvelopeBuilder. - واجهة برمجة التطبيقات Advanced PWLE API: تمنحك مزيدًا من التحكّم والمرونة، ولكنها تتطلّب معرفة بتقنية اللمس وبعض الإلمام بالأجهزة. وهي متاحة في
WaveformEnvelopeBuilder.
لإتاحة هاتَين الواجهتَين، يجب أن تنفّذ الأجهزة واجهات برمجة التطبيقات التالية لطبقة تجريد الأجهزة (HAL):
- التردد الرنيني: يوفّر التردد الرنيني للمشغّل.
- خريطة التردد إلى تسارع الإخراج (FOAM): توفّر خريطة لربط معدّل الاهتزاز بأقصى تسارع إخراج يمكن تحقيقه للجهاز.
- إنشاء تأثير 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 تربط معدّل الاهتزاز (بالهرتز) بأقصى تسارع إخراج يمكن تحقيقه للمشغّل (بالوحدة G peak) عند هذا التردد. تُعدّ هذه الخريطة ضرورية لفهم كيفية اختلاف إخراج الاهتزاز لنطاق التردد المتوافق، ولتحديد واجهة برمجة التطبيقات 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على التوالي. - الحد الأقصى لتسارع الإخراج: يتوفّر الحد الأقصى لتسارع الإخراج الذي يمكن تحقيقه للجهاز (بالوحدة G) من خلال
getMaxOutputAccelerationGs. - خريطة التردد إلى تسارع الإخراج:
getFrequenciesOutputAccelerationتوفّر خريطة التردد إلى تسارع الإخراج كما تم تنفيذها في إطار عمل HAL.
يمكن للمطوّرين استخدام هذه المعلومات عند إنشاء تأثيرات الظرف باستخدام واجهة برمجة التطبيقات Advanced PWLE API. على سبيل المثال، عند تحديد تسارع إخراج (بالوحدة G)، يجب عليهم تطبيعه إلى قيمة ضمن النطاق [0.0 و1.0]، مقارنةً بالحد الأقصى لتسارع الإخراج للجهاز.
باستخدام واجهة برمجة التطبيقات Advanced PWLE API، يمكن للمطوّرين استخدام نطاق التردد بالكامل، لذا من الضروري أن تكون بيانات تأثير FOAM المقدَّمة آمنة لجهاز الاهتزاز وألا تتجاوز قدراته.
الحد الأدنى لرصد الإدراك البشري
يشير الحد الأدنى لرصد الإدراك البشري إلى الحد الأدنى لتسارع الاهتزاز الذي يمكن للشخص رصده بشكل موثوق. يختلف هذا المستوى استنادًا إلى معدّل الاهتزاز.
يعرض الرسم البياني التالي الحد الأدنى لرصد الإدراك اللمسي البشري1، من حيث التسارع، كدالة للتردد الزمني:
الشكل 2: الحد الأدنى لرصد الإدراك اللمسي البشري
لكي يتمكّن المستخدمون من الشعور بالتأثيرات اللمسية باستمرار، تتحقّق اختبارات VTS من أنّ الأجهزة التي تتيح تأثيرات الظرف لديها نطاق تردد يمكن أن ينتج سعات اهتزاز تتجاوز الحد الأدنى لرصد الإدراك البشري بمقدار 10 ديسيبل.
الشدة المُدرَكة للاهتزاز مقابل سعة تسارع الاهتزاز
لا يزداد الإدراك البشري لشدة الاهتزاز (مقياس الإدراك) خطيًا مع سعة الاهتزاز (مَعلمة فيزيائية). تفترض واجهة برمجة التطبيقات PWLE API أنّه عندما يفكر المصمم أو المطوّر في تغييرات قوة الاهتزاز، فإنّه يتوقّع أن تتبع الشدة المُدرَكة تأثير 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 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. يحدّد كل إدخال نقطة في الخريطة، ويحدّد ترددًا (بالهرتز) والحد الأقصى لتسارع الإخراج المقابل (بالوحدة G peak).
لتحسين دقة الاستيفاء الخطي عند تحديد قيم التسارع الوسيطة، ننصحك بتحديد دقة تردد عالية حول التردد الذي يحقق الحد الأقصى لتسارع الإخراج. على سبيل المثال، استخدِم خطوات 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 من 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). يشرح هذا البرنامج التعليمي على الإنترنت التحويل بين سعة التسارع وسعة الإزاحة. ↩
-
تم تقدير البيانات من الشكل 8 في Verrillo, R. T. et al. "Sensation magnitude of vibrotactile stimuli." Perception &Psychophysics 6: 366-372 (1969). ↩