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

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

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

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

PWLE API का ऐडवांस वर्शन

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

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

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

उदाहरण
फ़ोम

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

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 के हिसाब से हो. तीव्रता का आकलन, संसेशन लेवल (एसएल) के आधार पर किया जाता है. इसे एक ही फ़्रीक्वेंसी पर, पता लगाने की थ्रेशोल्ड सीमा से ऊपर के डेसिबल (डीबी) के तौर पर तय किया जाता है. इसलिए, वाइब्रेशन ऐक्सलरेशन ऐम्प्लिट्यूड (जी पीक में) का हिसाब इस तरह लगाया जा सकता है:

\(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. थ्रेशोल्ड डेटा को बोलानोव्स्की जूनियर के फ़िगर 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).