पीस वाइज़ लीनियर लिफ़ाफ़े के इफ़ेक्ट लागू करना

पीसवॉइज़ लीनियर एनवेलप (पीडब्ल्यूएलई) इफ़ेक्ट, बिंदुओं के ऐसे क्रम होते हैं जो समय के साथ कंपन की फ़्रीक्वेंसी और ऐक्सलरेशन को तय करते हैं. पीडब्ल्यूएलई, ज़्यादा बेहतर और डाइनैमिक हैप्टिक फ़ीडबैक देते हैं.

Android 16 और इसके बाद के वर्शन में, ऐप्लिकेशन डेवलपर के लिए दो एपीआई उपलब्ध हैं. इनकी मदद से, PWLE इफ़ेक्ट बनाए जा सकते हैं:

  • PWLE का बेसिक एपीआई: यह इस्तेमाल करने में आसान है, लेकिन इसमें कुछ सीमाएं हैं. जल्दी शुरू करने के लिए अच्छा है. यह BasicEnvelopeBuilder पर उपलब्ध है.
  • PWLE का ऐडवांस एपीआई: इसमें ज़्यादा कंट्रोल और सुविधाएं मिलती हैं. इसके लिए, हैप्टिक की जानकारी और हार्डवेयर के बारे में कुछ जानकारी होना ज़रूरी है. WaveformEnvelopeBuilder पर उपलब्ध है.

इन एपीआई के साथ काम करने के लिए, डिवाइसों को ये HAL एपीआई लागू करने होंगे:

  • फ़्रीक्वेंसी से आउटपुट ऐक्सलरेशन मैपिंग (एफ़ओएएम): यह डिवाइस के लिए, वाइब्रेशन फ़्रीक्वेंसी को ज़्यादा से ज़्यादा हासिल किए जा सकने वाले आउटपुट ऐक्सलरेशन पर मैप करता है.
  • PWLE बनाएं: यह वाइब्रेशन के वेवफ़ॉर्म के PWLE से तय किया गया वाइब्रेशन चलाता है.

Basic PWLE API

हार्डवेयर या इंसानों की सोच की बारीकियों के बारे में ज़्यादा जानकारी दिए बिना, PWLE इफ़ेक्ट बनाने के लिए डेवलपर, बुनियादी PWLE API का इस्तेमाल कर सकते हैं. इसे इन पैरामीटर का इस्तेमाल करके तय किया जाता है:

  • इंटेंसिटी वैल्यू [0, 1] की रेंज में होती है. यह वाइब्रेशन की अनुमानित स्ट्रेंथ को दिखाती है. उदाहरण के लिए, 0.5 वैल्यू को डिवाइस की ग्लोबल मैक्सिमम इंटेंसिटी का आधा माना जाता है.
  • [0, 1] की रेंज में शार्पनेस वैल्यू, वाइब्रेशन की तेज़ी को दिखाती है. कम वैल्यू से वाइब्रेशन कम होता है, जबकि ज़्यादा वैल्यू से वाइब्रेशन ज़्यादा होता है.
  • अवधि से पता चलता है कि पिछले पीडब्ल्यूएलई पॉइंट (यानी कि इंटेंसिटी और शार्पनेस का पेयर) से नए पीडब्ल्यूएलई पॉइंट पर ट्रांज़िशन होने में कितना समय लगा. यह समय मिलीसेकंड में होता है.

यहां एक वेवफ़ॉर्म का उदाहरण दिया गया है. इसमें 500 मि॰से॰ से ज़्यादा समय तक, कम पिच से ज़्यादा पिच तक वाइब्रेशन की तीव्रता बढ़ती है. इसके बाद, 100 मि॰से॰ से ज़्यादा समय तक, वाइब्रेशन की तीव्रता कम होकर 0 (बंद) हो जाती है:

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 नहीं है, तो एक अपवाद दिखाता है. इस सीमा की वजह से, कंपन में अवांछित डाइनैमिक इफ़ेक्ट नहीं होते. ऐसा इसलिए होता है, क्योंकि ऐम्प्लिट्यूड में रुकावटें आती हैं. इससे उपयोगकर्ता की हैप्टिक परसेप्शन पर बुरा असर पड़ सकता है.

Android के सभी डिवाइसों पर PWLE इफ़ेक्ट एक जैसा दिखे, इसके लिए फ़्रेमवर्क को यह ज़रूरी है कि इस सुविधा के साथ काम करने वाले डिवाइस, PWLE पॉइंट के बीच कम से कम 10 मि॰से॰ की अवधि को मैनेज कर सकें. साथ ही, PWLE इफ़ेक्ट के लिए कम से कम 16 पॉइंट को मैनेज कर सकें. इन ज़रूरी शर्तों को वीटीएस टेस्ट के ज़रिए लागू किया जाता है. इससे यह पक्का करने में मदद मिलती है कि Android डिवाइसों पर PWLE इफ़ेक्ट भरोसेमंद तरीके से काम करें.

ऐडवांस PWLE API

हैप्टिक के बारे में ज़्यादा जानकारी रखने वाले डेवलपर, इन शर्तों का इस्तेमाल करके PWLE इफ़ेक्ट तय कर सकते हैं:

  • आयाम की वैल्यू [0, 1] की रेंज में होती है. यह किसी दी गई फ़्रीक्वेंसी पर हासिल की जा सकने वाली ताकत को दिखाती है. इसका पता डिवाइस के फ़ोम से चलता है. उदाहरण के लिए, 0.5 वैल्यू से, तय फ़्रीक्वेंसी पर ज़्यादा से ज़्यादा आउटपुट ऐक्सलरेशन का आधा हिस्सा जनरेट होता है.
  • फ़्रीक्वेंसी को सीधे तौर पर हर्ट्ज़ में बताया जाता है.
  • अवधि, मिलीसेकंड में मापी जाती है. यह, पिछले PWLE पॉइंट से नए पॉइंट पर ट्रांज़िशन होने में लगा समय होता है.

यहां एक वेवफ़ॉर्म का उदाहरण दिया गया है. इसमें वाइब्रेटर को 100 मि॰से॰ में 120 हर्ट्ज़ पर बंद से पूरी ऐम्प्लिट्यूड तक बढ़ाया जाता है. इसके बाद, इसे 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 के हिसाब से, डिवाइस की तय की गई फ़्रीक्वेंसी की सीमा में हो. अगर वैल्यू इन सीमाओं से ज़्यादा होती हैं, तो डिवाइस में कोई वाइब्रेशन नहीं होता है.

फ़्रीक्वेंसी टू आउटपुट ऐक्सलरेशन मैपिंग (एफ़ओएएम)

PWLE एपीआई के साथ काम करने के लिए, डिवाइस की फ़्रीक्वेंसी को सटीक तरीके से दिखाना ज़रूरी है, ताकि ऐक्सेलरोमीटर की क्षमताओं को आउटपुट किया जा सके. इस सेक्शन में, इस डेटा के महत्व के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि PWLE API इसका इस्तेमाल कैसे करते हैं और इसे जनरेट करने की प्रोसेस क्या है.

मैपिंग को समझना

PWLE इफ़ेक्ट की सुविधा देने वाले डिवाइसों को, ऐक्सलरेशन मैप (एफ़ओएएम) को आउटपुट करने के लिए फ़्रीक्वेंसी देनी होगी. FOAM, एचएएल से जनरेट किया गया एक डेटा स्ट्रक्चर है. यह वाइब्रेशन फ़्रीक्वेंसी (हर्ट्ज़ में) को उस फ़्रीक्वेंसी पर ऐक्चुएटर के ज़्यादा से ज़्यादा आउटपुट ऐक्सेलिरेशन (जी पीक में) पर मैप करता है. यह मैप इन कामों के लिए ज़रूरी है: सपोर्ट की गई फ़्रीक्वेंसी रेंज के लिए, वाइब्रेशन आउटपुट में होने वाले बदलावों को समझना और बुनियादी PWLE एपीआई तय करना.

नीचे दिए गए प्लॉट में, सामान्य रेज़ोनेंट ऐक्चुएटर के लिए FOAM का उदाहरण दिखाया गया है. इसमें मोटर को सुरक्षित रखने के लिए, इनपुट वोल्टेज को रेज़ोनेंट फ़्रीक्वेंसी के आस-पास सीमित किया गया है:

उदाहरण
फ़ोम

पहली इमेज. रेज़ोनेंट ऐक्टuator के लिए, फ़ोएम का उदाहरण.

FOAM के तीन मुख्य मकसद हैं:

  • फ़्रीक्वेंसी की पूरी रेंज तय करना: FOAM, डिवाइस की फ़्रीक्वेंसी की पूरी रेंज तय करता है. इसके लिए, वह वाइब्रेशन की कम से कम और ज़्यादा से ज़्यादा फ़्रीक्वेंसी तय करता है.
  • इंटेंसिटी और शार्पनेस की वैल्यू तय करना: बुनियादी PWLE API, इंटेंसिटी और शार्पनेस के लिए, लोगों की धारणा के आधार पर तय की गई स्केल पर काम करता है. इसके बाद, इन्हें FOAM में आउटपुट ऐक्सेलरेट करने की वैल्यू का इस्तेमाल करके, हार्डवेयर फ़्रीक्वेंसी और ऐम्प्लिट्यूड पैरामीटर पर मैप किया जाता है. इस मैपिंग से यह पक्का करने में मदद मिलती है कि हैप्टिक इफ़ेक्ट, हार्डवेयर की क्षमताओं के हिसाब से रेंडर किए गए हैं. शार्पनेस की रेंज, कम से कम महसूस की जा सकने वाली थ्रेशोल्ड वैल्यू से तय होती है. यह उन फ़्रीक्वेंसी से मेल खाती है जहां डिवाइस, हैप्टिक इफ़ेक्ट जनरेट कर सकता है. इन इफ़ेक्ट को उपयोगकर्ता महसूस कर सकते हैं. यह फ़्रेमवर्क, चुनी गई फ़्रीक्वेंसी पर टारगेट आउटपुट ऐक्सलरेशन के आधार पर, इंटेंसिटी वैल्यू को ऐम्प्लिट्यूड पर मैप करता है. इससे यह पक्का करने में मदद मिलती है कि डिवाइस की क्षमताओं के हिसाब से, चुने गए इंटेंसिटी लेवल को हासिल किया जा सके.
  • हार्डवेयर की क्षमताओं को ज़ाहिर करना: FOAM को डेवलपर के लिए VibratorFrequencyProfile में दिखाया जाता है. इससे, डिवाइस की हैप्टिक क्षमताओं के बारे में जानकारी देने वाले ऐक्सलरेशन डेटासेट को आउटपुट करने की पूरी फ़्रीक्वेंसी मिलती है. इस डेटा की मदद से, PWLE API का इस्तेमाल करने वाले डेवलपर, वाइब्रेशन के ऐसे इफ़ेक्ट बना सकते हैं जो फ़्रेमवर्क की ओर से तय की गई बुनियादी इंटेंसिटी और शार्पनेस रेंज से अलग हों.

FOAM और बेसिक PWLE API

वाइब्रेशन के इफ़ेक्ट को बेहतर बनाने में, फ़ोम की अहम भूमिका होती है. इसका इस्तेमाल, बेसिक एनवलप एपीआई के लिए शार्पनेस रेंज का हिसाब लगाने के लिए किया जाता है. इससे यह पक्का किया जाता है कि वाइब्रेशन, उपयोगकर्ता को महसूस हो. यह रेंज उन फ़्रीक्वेंसी से मेल खाती है जहां आउटपुट ऐक्सलरेशन, हर फ़्रीक्वेंसी के लिए, इंसानों के सुनने की क्षमता के थ्रेशोल्ड (यानी कि कम से कम सुनाई देने वाला लेवल) से 10 dB से कम नहीं होता है. इससे यह पक्का होता है कि वाइब्रेशन इतना तेज़ हो कि उसे महसूस किया जा सके.

इसके अलावा, फ़्रेमवर्क FOAM डेटा का इस्तेमाल करके, बुनियादी PWLE API में इस्तेमाल की गई इंटेंसिटी और शार्पनेस वैल्यू को उनकी ऐम्प्लिट्यूड और फ़्रीक्वेंसी वैल्यू के साथ मैप करता है. इस मैपिंग से, अलग-अलग डिवाइसों पर हैप्टिक फ़ीडबैक को महसूस करने में मदद मिलती है.

वीटीएस टेस्ट इसलिए किए जाते हैं, ताकि यह पक्का किया जा सके कि एनवेलप इफ़ेक्ट की सुविधा देने वाले डिवाइसों में, फ़्रीक्वेंसी की ऐसी रेंज हो जिससे वाइब्रेशन महसूस किया जा सके. इससे यह पक्का करने में मदद मिलती है कि डिवाइस में वाइब्रेशन इतनी तेज़ी से हो कि उपयोगकर्ताओं को साफ़ तौर पर महसूस हो.

FOAM और Advanced PWLE API

FOAM को VibratorFrequencyProfile, डेवलपर के लिए उपलब्ध कराता है. साथ ही, यह जानकारी भी देता है:

  • फ़्रीक्वेंसी रेंज: डेवलपर, डिवाइस की कम से कम और ज़्यादा से ज़्यादा फ़्रीक्वेंसी (हर्ट्ज़ में) को वापस पा सकते हैं. इसके लिए, उन्हें getMinFrequencyHz और getMaxFrequencyHz का इस्तेमाल करना होगा.
  • ज़्यादा से ज़्यादा आउटपुट ऐक्सलरेशन: डिवाइस का ज़्यादा से ज़्यादा आउटपुट ऐक्सलरेशन (G में) getMaxOutputAccelerationGs के ज़रिए उपलब्ध होता है.
  • फ़्रीक्वेंसी से आउटपुट ऐक्सलरेशन मैपिंग: getFrequenciesOutputAcceleration HAL में लागू की गई फ़्रीक्वेंसी से आउटपुट ऐक्सलरेशन मैपिंग की जानकारी देता है.

डेवलपर, इस जानकारी का इस्तेमाल एडवांस्ड PWLE API की मदद से एनवलप इफ़ेक्ट बनाते समय कर सकते हैं. उदाहरण के लिए, आउटपुट ऐक्सलरेशन (G में) तय करते समय, उन्हें इसे डिवाइस के ज़्यादा से ज़्यादा आउटपुट ऐक्सलरेशन के हिसाब से, [0.0, 1.0] की रेंज में सामान्य करना होगा.

PWLE API के ऐडवांस वर्शन की मदद से, डेवलपर फ़्रीक्वेंसी की पूरी रेंज का इस्तेमाल कर सकते हैं. इसलिए, यह ज़रूरी है कि दिया गया FOAM डेटा, वाइब्रेटर के लिए सुरक्षित हो और उसकी क्षमताओं से ज़्यादा न हो.

इंसान की आवाज़ पहचानने के लिए थ्रेशोल्ड

इंसान के महसूस करने की क्षमता का पता लगाने वाले थ्रेशोल्ड का मतलब है कि कंपन की वह कम से कम गति जिसे कोई व्यक्ति आसानी से महसूस कर सकता है. यह लेवल, वाइब्रेशन की फ़्रीक्वेंसी के हिसाब से अलग-अलग होता है.

नीचे दिए गए प्लॉट में, समय के हिसाब से फ़्रीक्वेंसी के फ़ंक्शन के तौर पर, ऐक्सलरेशन में इंसानों के हैप्टिक परसेप्शन का पता लगाने की थ्रेशोल्ड वैल्यू1 दिखाई गई है:

इंसान के स्पर्श की पहचान करने के लिए थ्रेशोल्ड

दूसरी इमेज. ह्यूमन हैप्टिक परसेप्शन का पता लगाने के लिए थ्रेशोल्ड.

इसलिए, VTS टेस्ट यह पुष्टि करते हैं कि एनवेलप की सुविधा वाले डिवाइसों में फ़्रीक्वेंसी रेंज ऐसी हो जिससे वाइब्रेशन ऐम्प्लिट्यूड, इंसानों के महसूस करने की सीमा से 10 डीबी ज़्यादा हो. इससे उपयोगकर्ताओं को हैप्टिक इफ़ेक्ट लगातार मिलते रहते हैं.

वाइब्रेशन की तीव्रता बनाम वाइब्रेशन ऐक्सलरेशन ऐम्प्लिट्यूड

वाइब्रेशन की इंटेंसिटी (परसेप्शन मेज़र) का इंसानी अनुभव, वाइब्रेशन के ऐम्प्लिट्यूड (फ़िज़िकल पैरामीटर) के साथ रैखिक रूप से नहीं बढ़ता है. PWLE API यह मानता है कि जब कोई डिज़ाइनर या डेवलपर वाइब्रेशन की तीव्रता में बदलाव करने के बारे में सोचता है, तो वह चाहता है कि तीव्रता में बदलाव, PWLE के हिसाब से हो. तीव्रता का पता, सेंसेशन लेवल (एसएल) से चलता है. इसे एक ही फ़्रीक्वेंसी पर, सुनने की थ्रेशोल्ड सीमा से ऊपर के डेसिबल के तौर पर तय किया जाता है. इसलिए, वाइब्रेशन ऐक्सलरेशन ऐम्प्लिट्यूड (G पीक में) का हिसाब इस तरह लगाया जा सकता है:

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

यहां ऐम्प्लिट्यूड dB, किसी खास फ़्रीक्वेंसी पर SL और पता लगाने की थ्रेशोल्ड वैल्यू का योग होता है. पता लगाने की थ्रेशोल्ड वैल्यू, नीचे दिए गए प्लॉट में ऑर्डिनेट के साथ वाली वैल्यू होती है.

इस तरह, PWLE API यह पक्का करता है कि कंट्रोल पॉइंट के लगातार जोड़े के बीच, तीव्रता में बदलाव एक जैसा हो.

नीचे दिए गए प्लॉट में, 10, 20, 30, 40, और 50 डीबी एसएल पर वाइब्रेशन ऐक्सलरेशन लेवल2 दिखाए गए हैं. साथ ही, इसमें समय के हिसाब से फ़्रीक्वेंसी के फ़ंक्शन के तौर पर, इंसानों के हैप्टिक परसेप्शन का पता लगाने की थ्रेशोल्ड (0 डीबी एसएल) भी दिखाया गया है.

वाइब्रेशन ऐक्सलरेशन के लेवल

तीसरी इमेज. वाइब्रेशन के ऐक्सेलरेशन लेवल.

ज़्यादा से ज़्यादा आउटपुट ऐक्सेलरेट करने के लिए फ़्रीक्वेंसी तय करना

इस सेक्शन में, डिवाइस से फ़्रीक्वेंसी पाने के बारे में सामान्य दिशा-निर्देश दिए गए हैं. इस डिवाइस का इस्तेमाल, फ़ोम डेटा जनरेट करने के लिए किया जाता है.

ज़्यादा से ज़्यादा वोल्टेज कर्व (V) पाना

V वह ज़्यादा से ज़्यादा वोल्टेज है जिसे वाइब्रेटर पर सुरक्षित तरीके से लागू किया जा सकता है. यह वोल्टेज, वाइब्रेटर की ऑपरेटिंग फ़्रीक्वेंसी रेंज पर लागू होता है. इससे यह पक्का होता है कि वाइब्रेटर सुरक्षित सीमाओं के अंदर काम करे. इससे वाइब्रेटर को नुकसान नहीं पहुंचता और वाइब्रेशन आउटपुट ज़्यादा होता है.

अगर हार्डवेयर में वोल्टेज की सीमा तय करने की सुविधा शामिल है, तो इसका इस्तेमाल करके, फ़्रीक्वेंसी की तय सीमा के हिसाब से, ज़्यादा से ज़्यादा वोल्टेज को सीधे तौर पर मेज़र करें.

सबसे ज़्यादा ऐक्सलरेशन (M) की गणना करना

M ज़्यादा से ज़्यादा ऐक्सलरेशन है. इसे अलग-अलग तरीकों से कैलकुलेट किया जा सकता है. इस सेक्शन में, लीनियर रेज़ोनेंट ऐक्चुएटर (एलआरए) का इस्तेमाल करने वाले डिवाइसों के लिए एक तरीका बताया गया है.

इस तरीके में, किसी तय फ़्रीक्वेंसी पर लागू किए गए ज़्यादा से ज़्यादा वोल्टेज को, G पीक में दिखाई गई ज़्यादा से ज़्यादा ऐक्सलरेशन वैल्यू में बदला जाता है.

इस कन्वर्ज़न के लिए इस्तेमाल किया गया मुख्य समीकरण यह है:

\(\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) को मिलाएं:

  • अपनी पसंद की रेंज में मौजूद हर फ़्रीक्वेंसी (f) के लिए, ज़्यादा से ज़्यादा वोल्टेज वाले कर्व से, उससे जुड़ा ज़्यादा से ज़्यादा वोल्टेज V(f) ढूंढें.
  • ऊपर दिए गए समीकरण का इस्तेमाल करके, उस फ़्रीक्वेंसी पर ज़्यादा से ज़्यादा ऐक्सलरेशन का हिसाब लगाएं. इसके लिए, Vsys की जगह V(f) और w की जगह f का इस्तेमाल करें. इससे आपको M(V(f), f).
  • कैलकुलेट किया गया यह ऐक्सलरेशन, आपकी FOAM(f) वैल्यू है.

FOAM डेटा को ऐक्सेस करने की सुविधा देना

FOAM कर्व जनरेट होने के बाद, HAL कर्व को FrequencyAccelerationMapEntry ऑब्जेक्ट की सूची के तौर पर दिखाता है. हर एंट्री, मैपिंग में एक पॉइंट तय करती है. इसमें फ़्रीक्वेंसी (हर्ट्ज़ में) और उससे जुड़ा ज़्यादा से ज़्यादा आउटपुट ऐक्सलरेशन (जी पीक में) तय किया जाता है.

एफ़ओएएम को हल करने के लिए, कोई सख्त शर्त नहीं है. हालांकि, हमारा सुझाव है कि आप एक मैक्सिमम पीक वाली कर्व तय करें. वाइब्रेशन इफ़ेक्ट को मैप करने के लिए, बेसिक एनवलप एपीआई में सिर्फ़ पहले पीक का इस्तेमाल किया जाता है. ऐक्सलरेशन की बीच की वैल्यू तय करते समय, लीनियर इंटरपोलेशन की सटीक जानकारी को ऑप्टिमाइज़ करने के लिए, हमारा सुझाव है कि पीक के आस-पास ज़्यादा फ़्रीक्वेंसी रिज़ॉल्यूशन तय करें. उदाहरण के लिए, पीक फ़्रीक्वेंसी के +/- 10 हर्ट्ज़ की रेंज में 1 हर्ट्ज़ के चरणों का इस्तेमाल करें.

डिवाइस की सुविधाएं और सीमाएं

Android 16 और इसके बाद के वर्शन के लिए, Android में HAL API शामिल हैं. इनकी मदद से डेवलपर, PWLE के असर को बेहतर बना सकते हैं. साथ ही, यह पक्का कर सकते हैं कि यह सुविधा सभी डिवाइसों के साथ काम करे. इन API का इस्तेमाल करके, डिवाइस की PWLE क्षमताओं के बारे में क्वेरी की जा सकती है. इन तरीकों से, डिवाइस की सीमाओं के बारे में जानकारी मिलती है. जैसे, कम से कम या ज़्यादा से ज़्यादा PWLE प्रिमिटिव की अवधि और PWLE कंपोज़िशन में इस्तेमाल की जा सकने वाली प्रिमिटिव की संख्या.

एचएएल एपीआई में ये शामिल हैं:

  • CAP_COMPOSE_PWLE_EFFECTS_V2: यह वैल्यू IVibrator.getCapabilities से तब मिलती है, जब डिवाइस पर यह सुविधा काम करती है.
  • getFrequencyToOutputAccelerationMap: यह कुकी, FOAM डेटा को वापस लाती है.
  • getPwleV2PrimitiveDurationMinMillis: यह किसी भी प्रिमिटिव PWLE के लिए, मिलीसेकंड में कम से कम अवधि को वापस लाता है.
  • getPwleV2PrimitiveDurationMaxMillis: यह फ़ंक्शन, किसी भी बुनियादी PWLE के लिए ज़्यादा से ज़्यादा अवधि को मिलीसेकंड में दिखाता है.
  • getPwleV2CompositionSizeMax: यह IVibrator.composePwleV2 के साथ काम करने वाली ज़्यादा से ज़्यादा PWLE प्रिमिटिव को वापस लाता है.

यह जानकारी डेवलपर को इसलिए दी जाती है, ताकि वे अपने इफ़ेक्ट को टारगेट डिवाइस की खास सुविधाओं के हिसाब से बना सकें. खास तौर पर, जब वे एडवांस्ड PWLE API का इस्तेमाल कर रहे हों.

बेसिक एपीआई से बनाए गए इफ़ेक्ट को मैनेज करते समय, फ़्रेमवर्क इन एपीआई का भी इस्तेमाल करता है. अगर कोई इफ़ेक्ट, डिवाइस की सीमाओं से ज़्यादा है (उदाहरण के लिए, बहुत ज़्यादा PWLE पॉइंट या अवधि ज़्यादा है), तो फ़्रेमवर्क, इफ़ेक्ट को अपने-आप अडजस्ट कर देता है, ताकि वह तय सीमाओं के अंदर आ जाए. इस प्रोसेस में, डिज़ाइन के ओरिजनल मकसद और लुक को ज़्यादा से ज़्यादा बनाए रखने की कोशिश की जाती है.


  1. थ्रेशोल्ड डेटा को Bolanowski Jr. के फ़िगर 1 में दिए गए डिसप्लेसमेंट थ्रेशोल्ड से बदला गया है, एस॰ जे॰ और अन्य. "चार चैनल, स्पर्श के मैकेनिकल पहलुओं को कंट्रोल करते हैं." Journal of the Acoustical Society of America 84(5): 1680-1694 (1988). इस ऑनलाइन ट्यूटोरियल में, ऐक्सलरेशन ऐम्प्लिट्यूड और डिसप्लेसमेंट ऐम्प्लिट्यूड के बीच कन्वर्ज़न के बारे में बताया गया है. 

  2. यह डेटा, वेरिलो, आर. के फ़िगर 8 से अनुमानित किया गया है. टी., et al.. "वाइब्रेशन से मिलने वाली संवेदना की तीव्रता." Perception & Psychophysics 6: 366-372 (1969).