हैप्टिक फ़्रेमवर्क के लिए उपयोगकर्ता अनुभव से जुड़ी बुनियादी जानकारी

हैप्टिक के आधार पर बनाए गए Android फ़्रेमवर्क में किए गए सभी सुधार इन तरीकों से किए गए हैं: UX सिद्धांतों का एक सेट है जो समान दर से आगे बढ़ रहे हैं. मौजूदा सिद्धांतों में बज़ी वाइब्रेशन की जगह क्लियर हैप्टिक का इस्तेमाल करना शामिल है, और रिच हैप्टिक के बारे में ज़्यादा जानें.

उपयोगकर्ता अनुभव से जुड़ी नीतियां

पहला डायग्राम. मौजूदा सिद्धांत

नीचे दी गई टेबल में, सभी उपलब्ध हैप्टिक एपीआई की सूची दी गई है.

एपीआई माटिंग में इस्तेमाल हुए तरीके जोड़े जाने का साल
android.view.हैप्टिक फ़ीडबैक कॉन्सटेंट
  • context_Click
  • CLOCK_TICK
  • वर्चुअल
  • कीबोर्ड_टैप
  • लंबा_PRESS
2016 से पहले
  • कीबोर्ड_PRESS
  • कीबोर्ड_रिलीज़
  • TEXT_HANDLE_मूव
  • वर्चुअल_KEY_रिलीज़
2017 (Android 8)
  • पुष्टि करें
  • नहीं
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
Android व्यू
  • PerformanceHapticFeedback()
2016 से पहले
android.os.Vibrator
  • वाइब्रेशन()
  • हैVibrator()
2016 से पहले
  • hasAmplitudeControl()
2017 (Android 8)
  • isAllimpactsSupported()
  • isAllPrimitivesSupported()
  • इफ़ेक्ट काम करता है()
  • isPrimitivessupported()
2020 (Android 11)
android.os.Vibrationimpact
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • इफ़ेक्ट
  • क्लिक
  • इफ़ेक्ट_HEAVY_क्लिक
  • इफ़ेक्ट डबल क्लिक
  • बनाएं पहले से तय()
2019 (Android 10)
android.os.Vibrationimpact.कंपोज़िशन
  • PRIMITIVE_TICK
  • PRIMITIVE_क्लिक
  • addPrimitive()
  • लिखें()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsmuted()
2019 (Android 10)

बहुत ज़्यादा वाइब्रेशन

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

साफ़ हैप्टिक

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

Android का मकसद है कि आपको तेज़ और साफ़ हैप्टिक के साथ-साथ बेहतर अनुभव मिले की तुलना में रोमांच से भरा होता है.

क्लियर हैप्टिक के साथ काम करने के लिए, पहले से तय हैप्टिक कॉन्सटेंट बनाए जाते हैं हैं.

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

प्रेस और रिलीज़

तीसरी इमेज. बटन को दबाना और हटाना.

रिच हैप्टिक

रिच हैप्टिक, लगातार बढ़ने वाली हैप्टिक कैटगरी है. आवेग-आधारित प्रभाव. Android का मकसद है कि वह बढ़िया हैप्टिक के साथ काम करे जानकारी के छोटे लेवल के साथ कंपोज़ेबिलिटी और अडजस्ट होने की क्षमता. नीचे दिए गए ऐप्लिकेशन, Android 11 या इससे पहले के वर्शन के लिए उपलब्ध हैं.

रिच हैप्टिक

चौथी इमेज. स्लाइडिंग टेक्स्चर वाले शानदार हैप्टिक

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

पांचवी इमेज. खींचना और स्वाइप करना

इस्तेमाल का पहला उदाहरण: स्लाइडिंग टेक्सचर

अगर उंगली के टच सरफ़ेस पर स्लाइड होने के दौरान हैप्टिक इफ़ेक्ट का इस्तेमाल किया गया हो (इसके लिए उदाहरण के लिए, ड्रैग, स्वाइपिंग, और फ़ैंटम हैप्टिक टेक्सचर की मदद से सतह को एक्सप्लोर करना), बार-बार होने वाले हैप्टिक इफ़ेक्ट में ज़्यादा साफ़ और हल्के-फुल्के बदलाव करें.

अगर अलग-अलग इफ़ेक्ट में कुरकुरे होने के बजाय गूंजने की क्षमता है, तो दोहराव को मिटा दिया जा सकता है. इसका नतीजा यह हुआ कि उन्हें एक लंबे समय के लिए, में अलग-अलग तरह के सिग्नल नहीं होते.

अगर एम्प्लिट्यूड इतना कम नहीं है, तो अनुमानित हैप्टिक एनर्जी इकट्ठा होती है है. इससे आखिर में हैप्टिक बहुत ज़्यादा हैप्टिक हो जाता है दोहराव.

स्वाइप करने और खींचने के जेस्चर के लिए, सरफ़ेस हैप्टिक टेक्सचर लागू करें

इसमें CLOCK_TICK और TEXT_HANDLE_MOVE का इस्तेमाल करें HapticFeedbackConstants. ये कॉन्सटेंट दोहराव और आयाम की विशेषताएं पहले से तय करते हैं.

अपना खुद का इफ़ेक्ट बनाएं

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

इस्तेमाल का दूसरा उदाहरण: आसानी से इस्तेमाल करने के लिए लंबे समय तक वाइब्रेशन

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

ईज़-इन इफ़ेक्ट इस्तेमाल करें

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

    • नतीजे true में होना चाहिए, ताकि यह आसानी से लागू किया जा सके डाइमेंशन में बदलाव कर सकते हैं.
  2. इस्तेमाल की जाने वाली चीज़ें VibrationEffect.createWaveform(timings[], amplitudes[], int repeat).

  3. इसे जनरेट करने के लिए, timings[] और amplitudes[] की सीरीज़ में बदलाव करें ईज़-इन कर्व, जैसा कि इमेज 6 में दिखाया गया है.

देर तक होने वाला वाइब्रेशन

छठी इमेज. आसानी से लंबा वाइब्रेशन

इस्तेमाल का तीसरा उदाहरण: ऑडियो से जोड़े गए हैप्टिक

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

ऑडियो-कपल्ड हैप्टिक: फ़ायदे

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

यह ज़रूरी है कि संगीत में एक खास तरह के पैटर्न का इस्तेमाल किया जाए. अगर आपको यह पता नहीं है कि इसलिए, उपयोगकर्ता किसी भी क्रम में हैप्टिक सनसनी महसूस करता है और उन्हें अनदेखा करने के लिए.

ऑडियो कपल

सातवीं इमेज. ऑडियो कपल हैप्टिक का उदाहरण

ऑडियो-कपल्ड हैप्टिक: इन्हें लागू करने से जुड़ी सलाह

ऑडियो-कपल्ड हैप्टिक का इस्तेमाल करने के लिए, वीडियो के कॉन्टेंट की बुनियादी समझ होना ज़रूरी है ऑडियो और हैप्टिक चैनल, दोनों फ़ॉर्मैट में वीडियो चलाने की सुविधा. नीचे दी गई बातों का ध्यान रखें.

  • MediaPlayer का इस्तेमाल करें या SoundPool क्लास.

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

ऑडियो जोड़े गए हैप्टिक

आठवीं इमेज. ऑडियो-कपल्ड हैप्टिक को लागू करना

ऑडियो-कपल्ड हैप्टिक: हैप्टिक जनरेटर

HapticGenerator एक ऑडियो इफ़ेक्ट है Android 12 में पेश किया गया. यह ऑडियो चैनल से हैप्टिक डेटा जनरेट कर सकता है और इसे रीयल टाइम में ऑडियो-कपल्ड हैप्टिक के तौर पर चलाएं. यह इफ़ेक्ट AudioTrack पर लागू होता है जैसा कि चित्र 9 में बताया गया है.

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

नौवीं इमेज. हैप्टिक जनरेटर आर्किटेक्चर

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

  1. बैंड-पास फ़िल्टर के लिए गूंजने की फ़्रीक्वेंसी

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

    इस पैरामीटर के लिए डिफ़ॉल्ट वैल्यू 150 हर्ट्ज़ है. इसे यहां जाकर बदला जा सकता है कोड यहां पढ़ें.

  2. धीमे एनवेलप के लिए नॉर्मलाइज़ेशन पावर

    यह पैरामीटर, पार्शियल नॉर्मलाइज़ेशन में घातांक तय करता है (ऑटोमैटिक गेन कंट्रोल). इसकी डिफ़ॉल्ट वैल्यू -0.8 है, जिसका मतलब है 'कंट्रोल पाएं' चरण से डाइनैमिक रेंज के 80% वैरिएशन को हटाया जाता है. इसे यहां कोड में बदला जा सकता है.

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

    वाइब्रेशन क्वालिटी फ़ैक्टर (Q कारक) दो पैरामीटर से तय किया जाता है:

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

    • पोल क्यू, बैंड-स्टॉप फ़िल्टर में पोल का क्वालिटी फ़ैक्टर है.

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

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

  4. डिटॉर्शन के लिए कॉर्नर फ़्रीक्वेंसी

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

  5. डिस्टॉर्शन के लिए इनपुट गेन और क्यूब थ्रेशोल्ड

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

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

    हमारा सुझाव है कि आप दोनों वैल्यू को एक साथ बदलें. उन्हें कोड में देखा जा सकता है यहां पढ़ें.

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

  6. डिटॉर्शन के लिए आउटपुट गेन

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