हैप्टिक फ्रेमवर्क के लिए यूएक्स फाउंडेशन

हैप्टिक्स के आसपास बनाए गए सभी एंड्रॉइड फ्रेमवर्क सुधार यूएक्स सिद्धांतों के एक सेट द्वारा संचालित होते हैं जो समान दर से विकसित हो रहे हैं। वर्तमान सिद्धांतों में स्पष्ट हैप्टिक्स के साथ बज़ी कंपन को प्रतिस्थापित करना और समृद्ध हैप्टिक्स की खोज करना शामिल है।

यूएक्स सिद्धांत

चित्र 1. वर्तमान सिद्धांत

निम्न तालिका सभी उपलब्ध हैप्टिक्स एपीआई को सूचीबद्ध करती है।

एपीआई तरीकों वर्ष जोड़ा गया
android.view.HapticFeedbackConstants
  • CONTEXT_CLICK
  • CLOCK_TICK
  • वर्चुअल_कुंजी
  • कीबोर्ड_टैप
  • देर तक दबाना
2016 से पहले
  • कीबोर्ड_प्रेस
  • कीबोर्ड_रिलीज़
  • टेक्स्ट_हैंडल_मूव
  • वर्चुअल_कुंजी_रिलीज़
2017 (एंड्रॉइड 8)
  • पुष्टि करना
  • अस्वीकार करना
  • GESTURE_START
  • इशारा_END
2020 (एंड्रॉइड 11)
android.देखें
  • परफॉर्महैप्टिकफीडबैक()
2016 से पहले
android.os.वाइब्रेटर
  • कंपन()
  • हैवाइब्रेटर()
2016 से पहले
  • hasAmplitudeControl()
2017 (एंड्रॉइड 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • AreEffectsSupported()
  • आदिम समर्थित हैं()
2020 (एंड्रॉइड 11)
android.os.कंपन प्रभाव
  • createOneShot()
  • createWaveform()
2017 (एंड्रॉइड 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • पूर्वपरिभाषित बनाएं()
2019 (एंड्रॉइड 10)
android.os.VibrationEffect.Composition
  • आदिम_टिक
  • आदिम_क्लिक
  • आदिम जोड़ें()
  • लिखें()
2020 (एंड्रॉइड 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
2019 (एंड्रॉइड 10)

बज़ी कंपन

पेजर और फीचर फोन के समय से ही, निम्न-गुणवत्ता लेकिन शक्ति-कुशल ईआरएम बजर-आधारित कंपन का उपयोग साइलेंट मोड में श्रवण रिंगिंग के विकल्प के रूप में किया गया है। पुराने हार्डवेयर घटक जो तेज और अप्रिय श्रव्य शोर उत्पन्न करते हैं, निम्न-गुणवत्ता वाले इंप्रेशन (उदाहरण के लिए, एक सस्ता, टूटा हुआ फोन) देकर हैप्टिक यूएक्स को नुकसान पहुंचा सकते हैं।

साफ़ हैप्टिक्स

स्पष्ट हैप्टिक्स अलग-अलग स्थिति परिवर्तनों की अनुभूति का समर्थन करते हैं (उदाहरण के लिए, पावर ऑन/ऑफ प्रक्रिया के दौरान बाइनरी परिवर्तन)। असतत सामर्थ्य की प्रकृति के कारण, स्पष्ट हैप्टिक्स एक एकल इकाई के रूप में उत्पन्न होते हैं (उदाहरण के लिए, प्रति एक इनपुट इवेंट में एक हैप्टिक प्रभाव)।

एंड्रॉइड का लक्ष्य हलचल भरी या भावपूर्ण संवेदनाओं के बजाय मजबूत, फिर भी तीव्र संवेदनाओं के साथ स्पष्ट हैप्टिक्स प्रदान करना है।

स्पष्ट हैप्टिक्स का समर्थन करने के लिए बनाए गए पूर्वनिर्धारित हैप्टिक स्थिरांक में निम्नलिखित शामिल हैं।

HapticFeedbackConstants में:

  • CLOCK_TICK
  • CONFIRM
  • CONTEXT_CLICK
  • GESTURE_END
  • GESTURE_START
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • KEYBOARD_TAP
  • LONG_PRESS
  • REJECT
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY
  • VIRTUAL_KEY_RELEASE

VibrationEffect में:

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

एंड्रॉइड इकोसिस्टम में हैप्टिक्स की समग्र गुणवत्ता बढ़ाने के लिए डिवाइस निर्माताओं और डेवलपर्स के बीच सामान्य ज्ञान का निर्माण महत्वपूर्ण है। बुनियादी चेकलिस्ट , हार्डवेयर मूल्यांकन और सीडीडी का उपयोग करें। हैप्टिक कार्यान्वयन के बारे में अधिक जानने के लिए।

दबा कर छोड्रें

चित्र 3. दबाना और छोड़ना।

समृद्ध हाप्टिक्स

रिच हैप्टिक्स एक बढ़ती हुई हैप्टिक्स श्रेणी है जो एकल आवेग-आधारित प्रभावों से परे जाती है। एंड्रॉइड का लक्ष्य उच्च स्तर की ग्रैन्युलैरिटी के साथ उच्च कंपोजिबिलिटी और एडजस्टेबलिटी के साथ समृद्ध हैप्टिक्स का समर्थन करना है। निम्नलिखित उपयोग के मामले Android 11 या उससे पहले के संस्करण में समर्थित हैं।

रिच हैप्टिक्स

चित्र 4. स्लाइडिंग बनावट के साथ समृद्ध हैप्टिक्स

खींचना और स्वाइप करना

चित्र 5. खींचना और स्वाइप करना

केस 1 का उपयोग करें: स्लाइडिंग बनावट

यदि स्पर्श सतह पर उंगली फिसलते समय हैप्टिक प्रभाव दोहराया जाता है (उदाहरण के लिए, खींचना, स्वाइप करना, फैंटम हैप्टिक बनावट के साथ सतह की खोज करना), तो दोहराए जाने वाले हैप्टिक प्रभाव अधिमानतः स्पष्ट और सूक्ष्म होते हैं।

यदि व्यक्तिगत प्रभाव कुरकुरा होने के बजाय उत्साहपूर्ण है, तो पुनरावृत्ति के बीच के अंतराल के मिट जाने की संभावना है। परिणाम कई अलग-अलग संकेतों के बजाय एक लंबी चर्चा है।

यदि आयाम पर्याप्त सूक्ष्म नहीं है, तो पुनरावृत्ति के माध्यम से कथित हैप्टिक ऊर्जा का निर्माण होता है, जिसके परिणामस्वरूप पुनरावृत्ति के अंत में अत्यधिक मजबूत हैप्टिक्स होते हैं।

स्वाइप और ड्रैग जेस्चर के लिए एक सरल सतह हैप्टिक बनावट लागू करें

HapticFeedbackConstants में CLOCK_TICK और TEXT_HANDLE_MOVE उपयोग करें। ये स्थिरांक पुनरावृत्ति और आयाम की विशेषताओं को पूर्वनिर्धारित करते हैं।

अपना खुद का प्रभाव बनाएं

अपना स्वयं का प्रभाव बनाने के लिए, VibrationEffect.Composition में PRIMITIVE_CLICK और PRIMITIVE_TICK के अनुक्रमों को एक साथ जोड़कर एक डिज़ाइन बनाएं। आप addPrimitive(int primitiveID, float scale, int delay) का उपयोग करके पुनरावृत्ति और आयाम पैमाने की विशेषताओं को समायोजित कर सकते हैं। समर्थन वाइब्रेटर HAL इंटरफ़ेस की CAP_COMPOSE_EFFECTS क्षमता पर निर्भर करता है।

केस 2 का उपयोग करें: आसानी से प्रभाव के साथ लंबा कंपन

लंबा कंपन एक सहज आयाम वाला कंपन है जो 0 से लक्ष्य आयाम तक परिवर्तित होता है। लंबे समय तक कंपन आसानी से ध्यान देने योग्य ध्यान संबंधी हाप्टिक्स उत्पन्न कर सकता है। हालाँकि, अचानक लंबा कंपन शांत वातावरण में उपयोगकर्ताओं को चौंका सकता है, और अक्सर श्रव्य भिनभिनाहट पैदा करता है। अधिक सुखद लंबे कंपन उत्पन्न करने के लिए, लंबे कंपन की शुरुआत में सहज प्रभाव लागू करें। यह एक सहज आयाम संक्रमण उत्पन्न करता है जो लक्ष्य आयाम की ओर बढ़ता है।

सहज प्रभाव लागू करें

  1. android.os.Vibrator.hasAmplitudeControl() के साथ आयाम नियंत्रण की हार्डवेयर क्षमताओं की जांच करें।

    • अलग-अलग आयाम के साथ आसानी से प्रभाव उत्पन्न करने के लिए परिणाम true होना चाहिए।
  2. VibrationEffect प्रयोग करें। createWaveform(timings[], amplitudes[], int repeat)

  3. सहज वक्र उत्पन्न करने के लिए timings[] और amplitudes[] की श्रृंखला को समायोजित करें, जैसा कि चित्र 6 में दिखाया गया है।

लंबा कंपन

चित्र 6. लंबा कंपन आसानी से बनने वाला वक्र

केस 3 का उपयोग करें: ऑडियो-युग्मित हैप्टिक्स

ऑडियो-युग्मित हैप्टिक्स उपयोगकर्ता का ध्यान आकर्षित करने के लिए ऑडियो की लय के साथ जुड़े हुए हैप्टिक पैटर्न हैं।

ऑडियो-युग्मित हैप्टिक्स: लाभ

ऑडियो-युग्मित हैप्टिक्स को लागू करने के लिए, स्पष्ट हैप्टिक्स को लंबे कंपन के साथ संयोजित करें। स्पष्ट हैप्टिक्स से मजबूत लेकिन छोटी हैप्टिक संवेदनाएं अलग-अलग लयबद्ध पैटर्न प्रदान करती हैं। लंबे समय तक कंपन प्रदान करने वाले उच्च स्तर की उत्तेजनाओं के साथ संयुक्त होने पर, यह उपयोगकर्ता का ध्यान आकर्षित करने का एक अच्छा काम करता है।

संवेदना के लयबद्ध पैटर्न पर विचार करना महत्वपूर्ण है। यदि लय की कोई समझ नहीं है, तो उपयोगकर्ता हैप्टिक संवेदनाओं को यादृच्छिक भनभनाहट के रूप में मानता है, और उन्हें अनदेखा कर देता है।

ऑडियो युगल

चित्र 7. ऑडियो युगल हैप्टिक्स उदाहरण

ऑडियो-युग्मित हैप्टिक्स: कार्यान्वयन के लिए युक्तियाँ

ऑडियो-युग्मित हैप्टिक्स को लागू करने के लिए ऑडियो और हैप्टिक दोनों चैनलों के कंटेंट प्लेबैक की बुनियादी समझ की आवश्यकता होती है। निम्नलिखित बातों का ध्यान रखें.

  • MediaPlayer या SoundPool कक्षाओं का उपयोग करें।

    • एक विशेष मेटाडेटा कुंजी ( ANDROID_HAPTIC के बाद कई हैप्टिक चैनल) के साथ ओजीजी प्रारूप में संपत्तियां MediaPlayer और SoundPool के साथ हैप्टिक्स डेटा और प्लेबैक की उपस्थिति का संकेत देती हैं।
  • audio_policy_configuration.xml में हैप्टिक्स और ऑडियो प्लेबैक का समर्थन इंगित करें।

    • हैप्टिक्स चैनल AUDIO_CHANNEL_OUT_HAPTIC_A|B के साथ आउटपुट प्रोफ़ाइल का उपयोग करें।
    • हैप्टिक चैनलों के साथ आउटपुट स्ट्रीम के लिए, याद रखें कि हैप्टिक चैनल डेटा में अतिरिक्त चैनल के रूप में प्रस्तुत किए जाते हैं।

    उदाहरण

    यदि आउटपुट स्ट्रीम के लिए चैनल मास्क इस तरह दिखता है:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    फिर प्रत्येक नमूना इस तरह दिखना चाहिए:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • हैप्टिक चैनल चलाने के लिए AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) को false में बदलें।

    • डिफ़ॉल्ट रूप से, हैप्टिक चैनल म्यूट ( true ) होते हैं।
    • उपयोग के मामलों में सिंक्रोनस हैप्टिक्स और फीडबैक के साथ रिंगटोन और यूआई ध्वनियां शामिल हैं।
  • वाइब्रेटर एचएएल को बाहरी नियंत्रण समर्थन लागू करना होगा।

ऑडियो युग्मित हैप्टिक्स

चित्र 8. ऑडियो-युग्मित हैप्टिक्स को कार्यान्वित करना

ऑडियो-युग्मित हैप्टिक्स: हैप्टिक जेनरेटर

HapticGenerator Android 12 में पेश किया गया एक ऑडियो इफ़ेक्ट है जो एक ऑडियो चैनल से हैप्टिक डेटा उत्पन्न कर सकता है और इसे वास्तविक समय में ऑडियो-युग्मित हैप्टिक्स के रूप में चला सकता है। प्रभाव AudioTrack पर लागू होता है जैसा कि चित्र 9 में वर्णित है।

Haptic Generator architecture

चित्र 9. हैप्टिक जेनरेटर वास्तुकला

यह सुनिश्चित करने के लिए कि आपका हैप्टिक जनरेटर एल्गोरिदम उच्च-गुणवत्ता वाले हैप्टिक्स उत्पन्न करता है, ऑडियो तरंगों पर लागू होने वाले फिल्टर की श्रृंखला को कॉन्फ़िगर करने वाले मापदंडों को समायोजित करके डिवाइस वाइब्रेटर मोटर पर जनरेशन एल्गोरिदम को ट्यून करें। यह अनुभाग इन मापदंडों का विस्तार से वर्णन करता है, और बताता है कि उन्हें अपने हार्डवेयर विनिर्देश के अनुसार कैसे ट्यून किया जाए।

  1. बैंड-पास फिल्टर के लिए गुंजयमान आवृत्ति

    वाइब्रेटर गुंजयमान आवृत्ति वह आवृत्ति है जिस पर हैप्टिक एक्चुएटर का अधिकतम आउटपुट होता है। व्यापक बैंडविड्थ प्राप्त करने के लिए, यह पैरामीटर प्रतिक्रिया हस्तांतरण फ़ंक्शन को आंशिक रूप से समतल करने के लिए एक एंटी-रेज़ोनेटर को समायोजित करता है। एंड्रॉइड फ्रेमवर्क स्वचालित रूप से इस मान को वाइब्रेटर एचएएल विधि IVibrator.getResonantFrequency के आउटपुट से लिंक करता है।

    इस पैरामीटर का डिफ़ॉल्ट मान 150Hz है। इसे यहां कोड में संशोधित किया जा सकता है।

  2. धीमे लिफाफे के लिए सामान्यीकरण शक्ति

    यह पैरामीटर आंशिक सामान्यीकरण (स्वचालित लाभ नियंत्रण) में घातांक निर्धारित करता है। इसका डिफ़ॉल्ट मान -0.8 है, जिसका अर्थ है कि इस लाभ नियंत्रण चरण द्वारा 80% गतिशील रेंज भिन्नता हटा दी जाती है। इसे यहां कोड में संशोधित किया जा सकता है।

  3. बैंड-स्टॉप फिल्टर के लिए क्यू कारक

    वाइब्रेटर गुणवत्ता कारक (क्यू फैक्टर) दो मापदंडों द्वारा निर्धारित किया जाता है:

    • ज़ीरो क्यू, बैंड-स्टॉप फ़िल्टर में शून्य का गुणवत्ता कारक जो अनुनाद को आंशिक रूप से रद्द कर देता है।

    • पोल क्यू, बैंड-स्टॉप फ़िल्टर में ध्रुवों का गुणवत्ता कारक।

    उन दो मूल्यों का अनुपात कम आवृत्तियों को बढ़ावा देने और एल्गोरिदम प्रतिक्रिया को व्यापक बनाने के लिए अनुनाद के दमन को सीमित करता है। उदाहरण के लिए, शून्य Q के लिए 8 और ध्रुव Q के लिए 4 के डिफ़ॉल्ट मान 2 का अनुपात उत्पन्न करते हैं, जो अनुनाद दमन को 2 (6 dB) के कारक द्वारा सीमित करता है। एंड्रॉइड फ्रेमवर्क दोनों मानों को वाइब्रेटर एचएएल विधि IVibrator.getQFactor के आउटपुट से जोड़ता है।

    यदि डिफ़ॉल्ट मान आपके डिवाइस में मोटर की ताकत में कमी का कारण नहीं बनते हैं, तो हम एक ही समय में दोनों मानों को संशोधित करने और या तो दोनों को बढ़ाने या दोनों को कम करने की सलाह देते हैं। शून्य Q और ध्रुव Q का अनुपात 1 से अधिक होना चाहिए। इसे यहां कोड में संशोधित किया जा सकता है।

  4. विरूपण के लिए कोने की आवृत्ति

    कोने की आवृत्ति को कम-पास फ़िल्टर द्वारा लागू किया जाता है जो निम्न-स्तर के कंपन को दबाता है और क्यूबिक विरूपण का उपयोग करके उच्च स्तर को बढ़ाता है। यह 300Hz पर डिफ़ॉल्ट है। इसे यहां कोड में संशोधित किया जा सकता है।

  5. विरूपण के लिए इनपुट लाभ और घन सीमा

    इन मापदंडों का उपयोग इनपुट तरंग पर लागू एक नॉनलाइनियर विरूपण फिल्टर द्वारा किया जाता है जो कम आवृत्ति संकेतों के आयाम को कम करता है और उच्च आवृत्ति वाले को बढ़ाता है।

    • इनपुट लाभ कारक के लिए डिफ़ॉल्ट मान 0.3 है।
    • क्यूब थ्रेशोल्ड के लिए डिफ़ॉल्ट मान 0.1 है।

    हम दोनों मानों को एक साथ संशोधित करने की अनुशंसा करते हैं. वे यहां कोड में पाए जा सकते हैं।

    इस फ़िल्टर द्वारा लागू फ़ंक्शन के बारे में अधिक जानकारी के लिए, यहां उपलब्ध कार्यान्वयन देखें। ये दो पैरामीटर आउटपुट को कैसे प्रभावित करते हैं, इसके बारे में अधिक जानने के लिए, हम फ़िल्टर की आवृत्ति प्रतिक्रियाओं की साजिश रचने और यह देखने की सलाह देते हैं कि विभिन्न पैरामीटर मानों के साथ आवृत्ति प्रतिक्रियाएं कैसे बदलती हैं।

  6. विरूपण के लिए आउटपुट लाभ

    यह पैरामीटर अंतिम कंपन आयाम को नियंत्रित करता है। यह एक सॉफ्ट लिमिटर के बाद लगाया गया अंतिम लाभ है जो कंपन आयाम को 1 से कम तक सीमित करता है। इसका डिफ़ॉल्ट मान 1.5 है, और इसे यहां कोड में संशोधित किया जा सकता है। यदि कंपन बहुत सूक्ष्म है, तो मान बढ़ाएँ। यदि आप एक्चुएटर हार्डवेयर की खड़खड़ाहट सुन सकते हैं, तो मान कम करें।