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

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

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

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

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

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

Basic PWLE API

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

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

यहां एक उदाहरण के तौर पर वेवफ़ॉर्म दिया गया है. इसमें 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 के सभी डिवाइसों पर, पीडब्ल्यूएलई इफ़ेक्ट को एक जैसा रेंडर करने के लिए, फ़्रेमवर्क को यह ज़रूरी है कि इस सुविधा के साथ काम करने वाले डिवाइस, पीडब्ल्यूएलई पॉइंट के बीच कम से कम 20 मि॰से॰ की अवधि और पीडब्ल्यूएलई इफ़ेक्ट के लिए कम से कम 16 पॉइंट को मैनेज कर सकें. इन ज़रूरी शर्तों को वीटीएस टेस्ट के ज़रिए लागू किया जाता है. इससे यह पक्का करने में मदद मिलती है कि Android डिवाइसों पर, PWLE के असर भरोसेमंद हों.

Advanced PWLE API

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

  • Amplitude वैल्यू, [0, 1] की रेंज में होती है. यह किसी दी गई फ़्रीक्वेंसी पर हासिल की जा सकने वाली ताकत को दिखाती है. इसे डिवाइस के FOAM से तय किया जाता है. उदाहरण के लिए, 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, HAL से जनरेट किया गया एक डेटा स्ट्रक्चर है. यह वाइब्रेशन फ़्रीक्वेंसी (हर्ट्ज़ में) को उस फ़्रीक्वेंसी पर ऐक्चुएटर के ज़्यादा से ज़्यादा आउटपुट ऐक्सेलरेट (जी पीक में) से मैप करता है. यह मैप, इन बातों को समझने के लिए ज़रूरी है: कंपन की सुविधा के लिए उपलब्ध फ़्रीक्वेंसी रेंज के हिसाब से, कंपन का आउटपुट कैसे अलग-अलग होता है और PWLE API को कैसे तय किया जाता है.

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

उदाहरण
फ़ोम

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

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

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

FOAM और बेसिक PWLE API

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

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

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

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

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 में दिए गए डिसप्लेसमेंट थ्रेशोल्ड से बदला गया है, एस॰ J., et al.. "चार चैनल, स्पर्श के मैकेनिकल पहलुओं को कंट्रोल करते हैं." Journal of the Acoustical Society of America 84(5): 1680-1694 (1988). इस ऑनलाइन ट्यूटोरियल में, ऐक्सलरेशन ऐम्प्लिट्यूड और डिसप्लेसमेंट ऐम्प्लिट्यूड के बीच कन्वर्ज़न के बारे में बताया गया है. 

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