إنّ أكثر مشغّلات الاهتزاز شيوعًا على أجهزة Android هي المشغّلات الرنانة الخطية (LRA). تحاكي المحركات الخطية الرنانة الإحساس بالنقر على زر على سطح زجاجي غير مستجيب. عادةً ما تستغرق إشارة الملاحظات الواضحة والموجزة بشأن النقر مدة تتراوح بين 10 و20 مللي ثانية. ويجعل هذا الإحساس تفاعلات المستخدمين تبدو أكثر طبيعية. بالنسبة إلى لوحات المفاتيح الافتراضية، يمكن أن تزيد هذه الملاحظات من سرعة الكتابة وتقلّل الأخطاء.
تتضمّن المحركات الرنانة الخطية بعض الترددات الرنانة الشائعة:
- كانت بعض المحركات الخطية الرنانة تتضمّن ترددات رنانة في نطاق 200 إلى 300 هرتز، وهو النطاق الذي تكون فيه بشرة الإنسان أكثر حساسية للاهتزاز. عادةً ما يتم وصف الإحساس بالاهتزازات في هذا النطاق الترددي بأنّه سلس وحاد وقوي.
- تتضمّن الطُرز الأخرى من المحركات الرنانة الخطية ترددات رنين أقل، تبلغ حوالي 150 هرتز، ويكون الإحساس الناتج عنها أكثر نعومة وامتلاءً (من حيث الأبعاد).
عند تطبيق جهد إدخال مماثل بترددَين مختلفَين، يمكن أن تختلف سعات اهتزاز الإخراج. وكلما كان التردد الصوتي أبعد عن التردد الرنيني للمشغّل الخطي الرنان، انخفض سعة الاهتزاز.
تستخدم التأثيرات الحسية لجهاز معيّن كلاً من مشغّل الاهتزاز وبرنامجه. يمكن أن تقلّل برامج تشغيل اللمس التي تتضمّن ميزات زيادة السرعة والفرملة النشطة من وقت الارتفاع والرنين في المحركات الرنانة الخطية، ما يؤدي إلى اهتزاز أكثر استجابة ووضوحًا.
تسارع إخراج أداة الاهتزاز
تصف عملية ربط التردد بالتسارع الناتج (FOAM) الحد الأقصى للتسارع الناتج الذي يمكن تحقيقه (بوحدة G peak) عند تردد اهتزاز معيّن (بوحدة هرتز). بدءًا من الإصدار 16 من نظام التشغيل Android (المستوى 36 من واجهة برمجة التطبيقات)، توفّر المنصة دعمًا مدمجًا لعملية الربط هذه من خلال VibratorFrequencyProfile. يمكنك استخدام هذه الفئة مع واجهات برمجة التطبيقات الأساسية والمتقدّمة لإنشاء تأثيرات لمسية.
تتضمّن معظم المحركات الرنانة ذات الحركة الخطية قمة واحدة في منحنى استجابتها للتردد، وعادةً ما تكون بالقرب من ترددها الرنان. وينخفض التسارع بشكل عام بشكل كبير كلما انحرف التردد عن هذا النطاق. قد لا يكون المنحنى متماثلاً وقد يتضمّن جزءًا ثابتًا حول التردد الرنيني لحماية المحرك من التلف.
تعرض الرسومات البيانية المجاورة مثالاً على FOAM لمحرك LRA.
حدّ رصد الإدراك البشري
يشير حدّ رصد الإدراك البشري إلى الحد الأدنى لتسارع الاهتزاز الذي يمكن للشخص رصده بشكل موثوق. يختلف هذا المستوى حسب تردد الاهتزاز.
تعرض الرسومات البيانية المجاورة عتبة رصد الإدراك الحسي اللمسي لدى الإنسان، من حيث التسارع، كدالة للتردد الزمني. يتم تحويل بيانات الحد الأدنى من حد الإزاحة في الشكل 1 من Bolanowski Jr.، S. J., et al.'s 1988 article, "Four channels mediate the mechanical aspects of touch.".
يتعامل نظام التشغيل Android تلقائيًا مع هذا الحدّ في BasicEnvelopeBuilder،
الذي يتحقّق من أنّ جميع التأثيرات تستخدم نطاق تردد ينتج عنه
سعات اهتزاز تتجاوز الحدّ الأدنى لرصد الإدراك البشري بمقدار 10 ديسيبل على الأقل.
يشرح برنامج تعليمي على الإنترنت التحويل بين سعة التسارع وسعة الإزاحة.
مستويات تسارع الاهتزاز
إنّ إدراك الإنسان لمستوى الاهتزاز، وهو مقياس إدراكي، لا يزداد بشكل خطي مع سعة الاهتزاز، وهي مَعلمة فيزيائية. تتميز الشدة المدرَكة بمستوى الإحساس (SL)، الذي يتم تعريفه على أنّه مقدار ديسيبل أعلى من حد الاكتشاف عند التردد نفسه.
يمكن حساب سعة تسارع الاهتزاز المقابلة (بوحدة G peak) على النحو التالي:
...حيث إنّ مستوى الصوت بالديسيبل هو مجموع مستوى مصدر الصوت وعتبة الرصد، أي القيمة على المحور العمودي في الرسم البياني المجاور، عند تردد معيّن.
تعرض الرسومات البيانية المجاورة مستويات تسارع الاهتزاز عند 10 و20 و30 و40 و50 ديسيبل SL، بالإضافة إلى عتبة رصد الإدراك الحسي البشري (0 ديسيبل SL)، كدالة للتردد الزمني. يتم تقدير البيانات من الشكل 8 في Verrillo, R. T., et al.'s 1969 article, "Sensation magnitude of vibrotactile stimuli.".
يتولّى نظام التشغيل Android تلقائيًا عملية التحويل هذه في BasicEnvelopeBuilder،
الذي يأخذ القيم على شكل شدات معدَّلة في مساحة مستوى الإحساس (ديسيبل
SL) ويحوّلها إلى تسارع الناتج. من ناحية أخرى، لا تطبّق السمة WaveformEnvelopeBuilder عملية التحويل هذه، بل تستخدم القيم كقيم معدَّلة لشدة التسارع الناتج في مساحة التسارع (بوحدة G). تفترض واجهة برمجة التطبيقات الخاصة بالمغلف أنّه عندما يفكّر مصمّم أو مطوّر في إجراء تغييرات على قوة الاهتزاز، يتوقّع أن يتبع مستوى الشدة المدرَك مغلفًا خطيًا مجزّأ.
تفعيل ميزة "تنعيم شكل الموجة" التلقائية على الأجهزة
للتوضيح، إليك طريقة عمل نمط شكل الموجة المخصّص على جهاز عام:
Kotlin
val timings: LongArray = longArrayOf(50, 50, 50, 50, 50, 100, 350, 250)
val amplitudes: IntArray = intArrayOf(77, 79, 84, 99, 143, 255, 0, 255)
val repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] { 50, 50, 50, 50, 50, 100, 350, 250 };
int[] amplitudes = new int[] { 77, 79, 84, 99, 143, 255, 0, 255 };
int repeatIndex = -1 // Don't repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
تعرض الرسومات البيانية التالية شكل الموجة المدخلة والتسارع الناتج المتوافق مع مقتطفات الرمز البرمجي السابقة. يُرجى العِلم أنّ التسارع يزداد تدريجيًا وليس فجأة، وذلك كلما حدث تغيير في السعة في النمط، أي عند 0 مللي ثانية و150 مللي ثانية و200 مللي ثانية و250 مللي ثانية و700 مللي ثانية. يحدث أيضًا تجاوز عند كل تغيير في مستوى الصوت، ويظهر رنين واضح يستمر لمدة 50 ملي ثانية على الأقل عندما ينخفض مستوى الصوت فجأة إلى 0.
نمط لمس محسَّن
لتجنُّب تجاوز الحدّ وتقليل وقت الرنين، غيِّر السعات بشكل تدريجي أكثر. في ما يلي الرسومات البيانية للموجة والتسارع الخاصة بالإصدار المعدَّل:
Kotlin
val timings: LongArray = longArrayOf(
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
)
val amplitudes: IntArray = intArrayOf(
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
)
val repeatIndex = -1 // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))
Java
long[] timings = new long[] {
25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
300, 25, 25, 150, 25, 25, 25
};
int[] amplitudes = new int[] {
38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
0, 85, 170, 255, 170, 85, 0
};
int repeatIndex = -1; // Do not repeat.
vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));
إنشاء تأثيرات لمسية أكثر تعقيدًا
تتسم العناصر الأخرى في استجابة النقر المُرضية بالتعقيد، ما يتطلب بعض المعرفة بمشغّل الرنين الخطي (LRA) المستخدَم في الجهاز. للحصول على أفضل النتائج، استخدِم أشكال الموجات الجاهزة والثوابت التي توفّرها المنصة على الجهاز، ما يتيح لك إجراء ما يلي:
- تنفيذ تأثيرات واضحة وعناصر أساسية
- ويمكنك دمجها لإنشاء تأثيرات لمسية جديدة.
يمكن لهذه الثوابت والأنواع الأساسية المحدّدة مسبقًا أن تسرّع عملك بشكل كبير أثناء إنشاء تأثيرات لمسية عالية الجودة.