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

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

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

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

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

एपीआई तरीकों वर्ष जोड़ा गया
android.view.HapticFeedbackConstants
  • CONTEXT_CLICK
  • CLOCK_TICK
  • VIRTUAL_KEY
  • KEYBOARD_TAP
  • देर तक दबाना
2016 से पहले
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_RELEASE
2017 (एंड्रॉयड 8)
  • पुष्टि करें
  • अस्वीकार
  • GESTURE_START
  • GESTURE_END
2020 (एंड्रॉयड 11)
android.देखें
  • परफॉर्म हैप्टिकफीडबैक ()
2016 से पहले
android.os.थरथानेवाला
  • कंपन ()
  • हैवीब्रेटर ()
2016 से पहले
  • है आयाम नियंत्रण ()
2017 (एंड्रॉयड 8)
  • सभी प्रभाव समर्थित हैं ()
  • areAllPrimitivesSupported ()
  • प्रभाव समर्थित हैं ()
  • आदिम समर्थित हैं ()
2020 (एंड्रॉयड 11)
android.os.VibrationEffect
  • क्रिएटऑनशॉट ()
  • क्रिएटवेवफॉर्म ()
2017 (एंड्रॉयड 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • पूर्वनिर्धारित बनाएं ()
2019 (एंड्रॉयड 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • आदिम जोड़ें ()
  • रचना ()
2020 (एंड्रॉयड 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsम्यूटेड ()
2019 (एंड्रॉयड 10)

बज़ी कंपन

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

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

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

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

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

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

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

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

चित्रा 3. दबाने और जारी करने।

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

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

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

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

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

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

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

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

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

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

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

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

अपना प्रभाव बनाना

अपना खुद का प्रभाव बनाने के लिए, PRIMITIVE_CLICK और PRIMITIVE_TICK के अनुक्रमों को VibrationEffect.Composition में एक साथ स्ट्रिंग करके एक डिज़ाइन बनाएं। आप पुनरावृत्ति और आयाम पैमाने की विशेषताओं को जोड़ने के लिए addPrimitive(int primitiveID, float scale, int delay) का उपयोग कर सकते हैं। समर्थन वाइब्रेटर एचएएल इंटरफेस की 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 के बाद कई हैप्टिक चैनल) के साथ OGG प्रारूप में संपत्तियां MediaPlayer और SoundPool के साथ haptics डेटा और प्लेबैक की उपस्थिति का संकेत देती हैं।
  • 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 में पेश किया गया एक ऑडियो प्रभाव है जो एक ऑडियो चैनल से haptic डेटा उत्पन्न कर सकता है और इसे वास्तविक समय में ऑडियो-युग्मित haptics के रूप में चला सकता है। प्रभाव AudioTrack पर लागू होता है जैसा कि चित्र 9 में वर्णित है।

Haptic Generator architecture

चित्र 9. हैप्टिक जेनरेटर आर्किटेक्चर

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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