UX Foundation for Haptic Framework

כל שיפורי המסגרת של אנדרואיד שנבנו סביב הפטיקה מונעים על ידי קבוצה של עקרונות UX שמתפתחים בקצב שווה. העקרונות הנוכחיים כוללים החלפת רטט זמזום בהפטיקה ברורה , וחקר הפטיקה עשירה .

עקרונות UX

איור 1. עקרונות נוכחיים

הטבלה הבאה מפרטת את כל ממשקי ה-API של הפטיקה הזמינים.

ממשק API שיטות נוספה שנה
android.view.HapticFeedbackConstants
  • CONTEXT_CLICK
  • CLOCK_TICK
  • VIRTUAL_KEY
  • KEYBOARD_TAP
  • LONG_PRESS
לפני 2016
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_RELEASE
2017 (אנדרואיד 8)
  • לְאַשֵׁר
  • לִדחוֹת
  • GESTURE_START
  • GESTURE_END
2020 (אנדרואיד 11)
android.View
  • performHapticFeedback()
לפני 2016
android.os.Vibrator
  • לְנַדְנֵד()
  • hasVibrator()
לפני 2016
  • hasAmplitudeControl()
2017 (אנדרואיד 8)
  • areAllEffectsSupported()
  • areAllPrimitivesSupported()
  • areEffectsSupported()
  • arePrimitivesSupported()
2020 (אנדרואיד 11)
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (אנדרואיד 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • createPredefined()
2019 (אנדרואיד 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • addPrimitive()
  • לְהַלחִין()
2020 (אנדרואיד 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsMuted()
2019 (אנדרואיד 10)

רטט זמזום

החל מהבימונים והטלפונים הרגילים, נעשה שימוש ברטט מבוסס זמזם ERM באיכות נמוכה אך חסכונית בחשמל כתחליף לצלצול שמיעתי במצב שקט . רכיבי החומרה הוותיקים שמייצרים רעשים קוליים חזקים ולא נעימים יכולים לפגוע ב-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

בניית ידע משותף בין יצרני מכשירים ומפתחים היא המפתח להעלאת האיכות הכוללת של ההפטיות במערכת האקולוגית של אנדרואיד. השתמש ברשימת הבדיקה הבסיסית , הערכת חומרה ו- CDD . למידע נוסף על יישום הפטי.

לחץ ושחרר

איור 3. לחיצה ושחרור.

הפטיקה עשירה

הפטיקה עשירה היא קטגוריית הפטיקה הולכת וגדלה שחורגת מהשפעות מבוססות דחפים בודדים. אנדרואיד שואפת לתמוך בהפטיקה עשירה עם יכולת קומפוזיציה גבוהה ויכולת התאמה עם רמת פירוט עדינה. מקרי השימוש הבאים נתמכים באנדרואיד 11 ומטה.

הפטיקס עשיר

איור 4. הפטיקה עשירה עם מרקם החלקה

גרירה והחלקה

איור 5. גרירה והחלקה

מקרה שימוש 1: מרקם החלקה

אם אפקט הפטי חוזר על עצמו בזמן שהאצבע מחליקה על פני משטח מגע (לדוגמה, גרירה, החלקה, חקר המשטח עם מרקם הפטום פנטום), ההשפעות ההפטיות החוזרות על עצמן יהיו עדינות וחדות.

אם האפקט האינדיבידואלי הוא זמזום ולא חד, סביר להניח שהמרווחים בין החזרות יימחקו. התוצאה היא באז אחד ארוך, ולא מספר אותות נפרדים.

אם המשרעת אינה עדינה מספיק, אז האנרגיה ההפטית הנתפסת מצטברת דרך החזרה, וכתוצאה מכך הפטיקה חזקה ביותר בסוף החזרה.

יישום מרקם הפטי משטח פשוט עבור מחוות החלקה וגרירה

השתמש ב- CLOCK_TICK וב- TEXT_HANDLE_MOVE ב- HapticFeedbackConstants . קבועים אלה מגדירים מראש מאפיינים של חזרה ומשרעת.

יצירת אפקט משלך

כדי ליצור אפקט משלך, חבר עיצוב על ידי חיבור רצפים של PRIMITIVE_CLICK ו- PRIMITIVE_TICK ב- VibrationEffect.Composition . אתה יכול להתאים את המאפיינים של סולם החזרות והמשרעת באמצעות addPrimitive(int primitiveID, float scale, int delay) . התמיכה מסתמכת על יכולת CAP_COMPOSE_EFFECTS של ממשק Vibrator HAL .

מקרה שימוש 2: רטט ארוך עם אפקט קל

רטט ארוך הוא רטט משרעת חלקה שעובר מ-0 לאמפליטודת המטרה. רטט ארוך יכול ליצור הפטיות קשב שניתן לתפוס בקלות. עם זאת, רטט ארוך פתאומי יכול להבהיל משתמשים בסביבה שקטה, ולעתים קרובות מייצר רעשי זמזום נשמעים. כדי ליצור רטט ארוך יותר נעים, החל את אפקט הקלות בתחילת הרטט הארוך. זה מייצר מעבר משרעת חלק שנבנה לכיוון משרעת המטרה.

יישום אפקט הקלות

  1. בדוק את יכולות החומרה של בקרת משרעת עם android.os.Vibrator.hasAmplitudeControl() .

    • התוצאה צריכה להיות true כדי להפיק אפקט קל עם משרעת משתנה.
  2. השתמש VibrationEffect . createWaveform(timings[], amplitudes[], int repeat) .

  3. התאם את סדרת timings[] amplitudes[] כדי ליצור את עקומת ההקלה, כפי שמוצג באיור 6.

רטט ארוך

איור 6. עקומת הקלת רטט ארוכה

מקרה שימוש 3: הפטיקה מצמודה לשמע

הפטיות מצמדות לאודיו הן דפוסים הפטיים יחד עם קצב השמע כדי למשוך את תשומת הלב של המשתמש.

הפטיקה מצמודה לאודיו: יתרונות

כדי ליישם הפטיקה צמודה לאודיו, שלב הפטיקה ברורה עם רעידות ארוכות. התחושות ההפטיות החזקות אך הקצרות מהפטיות ברורות מספקות דפוסים קצביים נפרדים. בשילוב עם רמות הגירויים הגבוהות שמספק רטט ארוך, זה עושה עבודה נהדרת למשוך את תשומת הלב של המשתמש.

חשוב לקחת בחשבון את הדפוסים הקצביים של התחושה. אם אין תחושת קצב, המשתמש תופס את התחושות ההפטיות כזמזומים אקראיים, ונוטה להתעלם מהם.

זוג אודיו

איור 7. דוגמה להפטיקה של זוג אודיו

הפטיקה מצמודה לשמע: טיפים ליישום

הטמעת הפטיקה מצומדת אודיו דורשת הבנה בסיסית של השמעת תוכן של ערוצי אודיו וגם של ערוצים הפטיים. זכור את הדברים הבאים.

  • השתמש בשיעורי 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 ).
    • מקרי שימוש כוללים רינגטונים וצלילי ממשק משתמש עם הפטיקה ומשוב סינכרוניים.
  • ה-Vibrator HAL חייב ליישם תמיכת בקרה חיצונית.

אודיו צמוד הפטיקה

איור 8. יישום הפטיקה מצמודה לשמע

הפטיקה מצמודה לאודיו: מחולל Haptic

ה- HapticGenerator הוא אפקט אודיו שהוצג באנדרואיד 12 שיכול ליצור נתונים הפטיים מערוץ אודיו ולהשמיע אותם בזמן אמת בתור הפטיות מצמדות לאודיו . האפקט מוחל על AudioTrack כמתואר באיור 9.

Haptic Generator architecture

איור 9. ארכיטקטורת מחולל Haptic

כדי לוודא שאלגוריתם המחולל ההפטי שלך מייצר הפטיקה באיכות גבוהה, כוונן את אלגוריתם ההפקה למנוע הרטט של המכשיר על ידי התאמת הפרמטרים המגדירים את שרשרת המסננים שהוא מחיל על צורות גל שמע. סעיף זה מתאר את הפרמטרים הללו בפירוט, ומסביר כיצד לכוון אותם למפרט החומרה שלך.

  1. תדר תהודה עבור מסנן פס פס

    תדר התהודה של הוויברטור הוא התדר שבו למפעיל הפטי יש תפוקה מקסימלית. פרמטר זה מכוון אנטי מהוד כדי לשטח חלקית את פונקציית העברת התגובה, על מנת לקבל רוחב פס רחב יותר. מסגרת האנדרואיד מקשרת באופן אוטומטי את הערך הזה לפלט של שיטת ה-Vibrator HAL IVibrator.getResonantFrequency .

    ערך ברירת המחדל עבור פרמטר זה הוא 150Hz . ניתן לשנות זאת בקוד כאן .

  2. כוח נורמליזציה למעטפה איטית

    פרמטר זה קובע את המעריך בנורמליזציה החלקית (בקרת רווח אוטומטי). ערך ברירת המחדל שלו הוא -0.8 , מה שאומר ש-80% מהוריאציה של הטווח הדינמי מוסר על ידי שלב בקרת ההגבר הזה. ניתן לשנות זאת בקוד כאן .

  3. גורם Q עבור מסנן עצירת פס

    מקדם איכות הוויברטור (גורם Q) נקבע על ידי שני פרמטרים:

    • ה-Zero Q, גורם האיכות של האפסים במסנן הפס-הפס המבטל חלקית את התהודה.

    • הקוטב Q, גורם האיכות של הקטבים בפילטר ה-band-stop.

    היחס בין שני הערכים הללו מגביל את דיכוי התהודה על מנת להגביר תדרים נמוכים יותר ולהרחיב את תגובת האלגוריתם. לדוגמה, ערכי ברירת המחדל של 8 עבור Zero Q ו -4 עבור Pole Q מייצרים יחס של 2 , המגביל את דיכוי התהודה בגורם של 2 (6 dB). מסגרת האנדרואיד מקשרת את שני הערכים לפלט של שיטת ה-Vibrator HAL IVibrator.getQFactor .

    אם ערכי ברירת המחדל אינם מביאים בחשבון את הפחתת חוזק המנוע במכשיר שלך, אנו ממליצים לשנות את שני הערכים בו-זמנית, ולהגדיל את שניהם או להקטין את שניהם. היחס בין אפס Q לקוטב Q צריך להיות גדול מ -1 . ניתן לשנות זאת בקוד כאן .

  4. תדר פינתי לעיוות

    תדר הפינה מיושם על ידי מסנן נמוך המדכא רטט ברמה נמוכה ומשפר רמות גבוהות יותר באמצעות עיוות מעוקב. ברירת המחדל היא 300Hz . ניתן לשנות זאת בקוד כאן .

  5. רווח קלט וסף קובייה לעיוות

    פרמטרים אלה משמשים מסנן עיוות לא ליניארי המופעל על צורת הגל המבוא אשר מחליש את משרעת האותות בתדר הנמוך ומגביר את התדר הגבוה יותר.

    • ערך ברירת המחדל של גורם רווח הקלט הוא 0.3 .
    • ערך ברירת המחדל עבור סף הקובייה הוא 0.1 .

    אנו ממליצים לשנות את שני הערכים יחד. ניתן למצוא אותם בקוד כאן .

    למידע נוסף על הפונקציה המופעלת על ידי מסנן זה, עיין ביישום הזמין כאן . כדי ללמוד עוד על האופן שבו שני פרמטרים אלה משפיעים על הפלט, אנו ממליצים לשרטט את תגובות התדר של המסננים ולבחון כיצד תגובות התדר משתנות עם ערכי פרמטר שונים.

  6. רווח פלט עבור עיוות

    פרמטר זה שולט על משרעת הרטט הסופית. זהו רווח סופי שהופעל לאחר מגביל רך המגביל את אמפליטודות הרטט לפחות מ-1. ערך ברירת המחדל שלו הוא 1.5 , וניתן לשנות אותו בקוד כאן . אם הרטט עדין מדי, הגדל את הערך. אם אתה יכול לשמוע את חומרת המפעיל מקרקשת, הורד את הערך.