Android डिवाइसों पर, वाइब्रेशन के लिए सबसे ज़्यादा इस्तेमाल होने वाले ऐक्चुएटर, लीनियर रेज़ोनेंट ऐक्चुएटर (एलआरए) होते हैं. एलआरए, कांच की ऐसी सतह पर बटन क्लिक करने जैसा अनुभव देते हैं जो आम तौर पर काम नहीं करती. क्लिक करने पर मिलने वाला साफ़ और तेज़ फ़ीडबैक सिग्नल, आम तौर पर 10 से 20 मिलीसेकंड तक रहता है. इस एहसास से, उपयोगकर्ता के इंटरैक्शन ज़्यादा नैचुरल लगते हैं. वर्चुअल कीबोर्ड के लिए, क्लिक से जुड़ी इस जानकारी से टाइपिंग की स्पीड बढ़ सकती है और गड़बड़ियां कम हो सकती हैं.
एलआरए में कुछ सामान्य रेज़ोनेंट फ़्रीक्वेंसी होती हैं:
- कुछ एलआरए की रेज़ोनेंट फ़्रीक्वेंसी 200 से 300 हर्ट्ज़ के बीच थी. यह फ़्रीक्वेंसी, उस फ़्रीक्वेंसी से मेल खाती है जिस पर इंसानी त्वचा वाइब्रेशन के लिए सबसे ज़्यादा संवेदनशील होती है. इस फ़्रीक्वेंसी रेंज में वाइब्रेशन को आम तौर पर, स्मूद, तेज़, और अंदर तक महसूस होने वाला बताया जाता है.
- एलआरए के अन्य मॉडल में रेज़ोनेंस फ़्रीक्वेंसी कम होती है. यह करीब 150 हर्ट्ज़ होती है. इससे मिलने वाली संवेदना, क्वालिटी के हिसाब से ज़्यादा स्मूद और डाइमेंशन के हिसाब से ज़्यादा बेहतर होती है.
दो अलग-अलग फ़्रीक्वेंसी पर एक जैसा इनपुट वोल्टेज देने पर, वाइब्रेशन आउटपुट के ऐम्प्लिट्यूड अलग-अलग हो सकते हैं. फ़्रीक्वेंसी, एलआरए की रेज़ोनेंट फ़्रीक्वेंसी से जितनी दूर होगी, उसका वाइब्रेशन ऐम्प्लिट्यूड उतना ही कम होगा.
किसी डिवाइस पर हैप्टिक इफ़ेक्ट के लिए, वाइब्रेशन ऐक्चुएटर और उसके ड्राइवर, दोनों का इस्तेमाल किया जाता है. ओवरड्राइव और ऐक्टिव ब्रेकिंग की सुविधाओं वाले हैप्टिक ड्राइवर, एलआरए के राइज़ टाइम और रिंगिंग को कम कर सकते हैं. इससे वाइब्रेशन ज़्यादा रिस्पॉन्सिव और साफ़ होता है.
वाइब्रेटर के आउटपुट की स्पीड
फ़्रीक्वेंसी-टू-आउटपुट-ऐक्सलरेशन मैपिंग (एफ़ओएएम) से, किसी वाइब्रेशन फ़्रीक्वेंसी (हर्ट्ज़ में) पर ज़्यादा से ज़्यादा हासिल किए जा सकने वाले आउटपुट ऐक्सलरेशन (जी पीक में) के बारे में पता चलता है. Android 16 (एपीआई लेवल 36) से, प्लैटफ़ॉर्म में VibratorFrequencyProfile के ज़रिए इस मैपिंग के लिए पहले से मौजूद सहायता उपलब्ध कराई जाती है. हैप्टिक इफ़ेक्ट बनाने के लिए, इस क्लास का इस्तेमाल basic और advanced एनवलप एपीआई के साथ किया जा सकता है.
ज़्यादातर एलआरए मोटर के फ़ोएम में एक ही पीक होता है. आम तौर पर, यह पीक उनकी रेज़ोनेंट फ़्रीक्वेंसी के आस-पास होता है. आम तौर पर, फ़्रीक्वेंसी इस रेंज से अलग होने पर ऐक्सलरेशन तेज़ी से कम होता है. यह ज़रूरी नहीं कि कर्व सिमेट्रिकल हो. मोटर को खराब होने से बचाने के लिए, रेज़ोनेंट फ़्रीक्वेंसी के आस-पास एक प्लैटो हो सकता है.
साथ वाले प्लॉट में, एलआरए मोटर के लिए फ़ोम का उदाहरण दिखाया गया है.
इंसान की आवाज़ पहचानने के लिए थ्रेशोल्ड
वाइब्रेशन का पता लगाने के थ्रेशोल्ड से पता चलता है कि किसी व्यक्ति को वाइब्रेशन का पता लगाने के लिए, कम से कम कितना ऐक्सलरेशन चाहिए. यह लेवल, वाइब्रेशन की फ़्रीक्वेंसी के हिसाब से अलग-अलग होता है.
साथ में दिया गया प्लॉट, समय के हिसाब से फ़्रीक्वेंसी के फ़ंक्शन के तौर पर, ऐक्सलरेशन में इंसानों के हैप्टिक परसेप्शन का पता लगाने के थ्रेशोल्ड को दिखाता है. थ्रेशोल्ड डेटा को बोलानोव्स्की जूनियर के फ़िगर 1 में दिए गए डिसप्लेसमेंट थ्रेशोल्ड से बदला गया है, एस॰ जे. और अन्य लोगों का 1988 का लेख, "Four channels mediate the mechanical aspects of touch.".
Android, इस थ्रेशोल्ड को BasicEnvelopeBuilder में अपने-आप मैनेज करता है. इससे यह पुष्टि होती है कि सभी इफ़ेक्ट, फ़्रीक्वेंसी की ऐसी रेंज का इस्तेमाल करते हैं जिससे वाइब्रेशन एंप्लीट्यूड जनरेट होते हैं. ये एंप्लीट्यूड, इंसान के महसूस करने की क्षमता के थ्रेशोल्ड से कम से कम 10 डीबी ज़्यादा होते हैं.
इस ऑनलाइन ट्यूटोरियल में, ऐक्सलरेशन ऐम्प्लिट्यूड और डिसप्लेसमेंट ऐम्प्लिट्यूड के बीच कन्वर्ज़न के बारे में ज़्यादा जानकारी दी गई है.
वाइब्रेशन ऐक्सेलरेशन के लेवल
वाइब्रेशन की इंटेंसिटी को इंसान किस तरह से समझता है, यह समझने का एक तरीका है. यह वाइब्रेशन के ऐम्प्लिट्यूड के साथ रैखिक रूप से नहीं बढ़ता है. वाइब्रेशन का ऐम्प्लिट्यूड, फ़िज़िकल पैरामीटर होता है. आवाज़ की तीव्रता को सुनने की क्षमता (एसएल) के हिसाब से तय किया जाता है. इसे एक ही फ़्रीक्वेंसी पर, सुनने की क्षमता के थ्रेशोल्ड से ज़्यादा डेसिबल (डीबी) के तौर पर तय किया जाता है.
कंपन के ऐक्सलरेशन ऐम्प्लिट्यूड (G पीक में) की गिनती इस तरह की जा सकती है:
...जहां ऐम्प्लिट्यूड डीबी, एसएल और पता लगाने की थ्रेशोल्ड का योग होता है. यह वैल्यू, आस-पास के प्लॉट में वर्टिकल ऐक्सिस के साथ-साथ किसी खास फ़्रीक्वेंसी पर होती है.
साथ में दिए गए प्लॉट में, 10, 20, 30, 40, और 50 डीबी एसएल पर वाइब्रेशन ऐक्सलरेशन लेवल दिखाए गए हैं. साथ ही, इसमें समय के हिसाब से फ़्रीक्वेंसी के फ़ंक्शन के तौर पर, इंसानों के हैप्टिक परसेप्शन का पता लगाने की थ्रेशोल्ड (0 डीबी एसएल) भी दिखाया गया है. यह डेटा, वेरिलो, आर. टी. और अन्य लोगों के 1969 के लेख, "Sensation magnitude of vibrotactile stimuli.".
Android, BasicEnvelopeBuilder में इस कन्वर्ज़न को अपने-आप मैनेज करता है. यह सेंसेशन लेवल स्पेस (dB SL) में सामान्य की गई इंटेंसिटी के तौर पर वैल्यू लेता है और उन्हें आउटपुट ऐक्सेलरेशन में बदलता है. दूसरी ओर, WaveformEnvelopeBuilder इस कन्वर्ज़न को लागू नहीं करता है. इसके बजाय, यह ऐक्सलरेशन स्पेस (Gs) में, सामान्य किए गए आउटपुट ऐक्सलरेशन ऐम्प्लिट्यूड के तौर पर वैल्यू लेता है. Envelope API यह मानता है कि जब कोई डिज़ाइनर या डेवलपर वाइब्रेशन की तीव्रता में बदलाव के बारे में सोचता है, तो वह चाहता है कि तीव्रता में बदलाव, एक लीनियर एनवलप के हिसाब से हो.
डिवाइसों पर वेवफ़ॉर्म को डिफ़ॉल्ट रूप से स्मूद करने की सुविधा
उदाहरण के लिए, देखें कि कस्टम वेवफ़ॉर्म पैटर्न, सामान्य डिवाइस पर कैसा काम करता है:
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 मि॰से॰ पर होता है. इसके अलावा, ऐम्प्लिट्यूड में हर बदलाव के दौरान ओवरशूट होता है. साथ ही, इनपुट ऐम्प्लिट्यूड के अचानक 0 पर गिरने पर, कम से कम 50 मि॰से॰ तक रिंगिंग होती है.
बेहतर हैप्टिक पैटर्न
ओवरशूट से बचने और रिंगिंग टाइम को कम करने के लिए, ऐम्प्लिट्यूड को ज़्यादा धीरे-धीरे बदलें. यहां दिए गए डायग्राम में, संशोधित वर्शन के वेवफ़ॉर्म और ऐक्सलरेशन प्लॉट दिखाए गए हैं:
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));
ज़्यादा मुश्किल हैप्टिक इफ़ेक्ट बनाना
क्लिक के बाद मिलने वाले बेहतर जवाब में अन्य एलिमेंट ज़्यादा जटिल होते हैं. इसके लिए, डिवाइस में इस्तेमाल किए गए एलआरए के बारे में कुछ जानकारी होना ज़रूरी है. बेहतर नतीजों के लिए, डिवाइस के पहले से तैयार किए गए वेवफ़ॉर्म और प्लैटफ़ॉर्म के दिए गए कॉन्स्टेंट का इस्तेमाल करें. इससे ये काम किए जा सकते हैं:
- साफ़ इफ़ेक्ट और प्रिमिटिव लागू करें.
- नए हैप्टिक इफ़ेक्ट बनाने के लिए, उन्हें एक साथ जोड़ें.
पहले से तय किए गए इन हैप्टिक कॉन्स्टेंट और प्रिमिटिव का इस्तेमाल करके, अच्छी क्वालिटी वाले हैप्टिक इफ़ेक्ट बनाते समय अपने काम को काफ़ी हद तक तेज़ किया जा सकता है.