בסיס חוויית המשתמש ל-framework הפיזי

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

עקרונות חוויית המשתמש

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

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

API שיטות השנה נוספה
android.view.HapticFeedbackConstants
  • CONTEXT_CLICK
  • CLOCK_TICK
  • VIRTUAL_KEY
  • KEYboard_TAP
  • long_PRESS
לפני 2016
  • KEYboard_PRESS
  • לוח מקשים_גרסה
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_הרחבה
2017 (Android 8)
  • אישור
  • דחייה
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
android.View
  • functionHapticFeedback()
לפני 2016
android.os.Vibrator
  • רטט()
  • hasVibrator()
לפני 2016
  • hasAmplitudeControl()
2017 (Android 8)
  • areAllEffectivesSupported()
  • areAllPrimitivesSupported()
  • areeffectivesSupported()
  • arePrimitivesSupported()
2020 (Android 11)
android.os.Vibration יומיים
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • createPredefined()
2019 (Android 10)
android.os.Vibrationמיקום.Composition
  • PRIMITIVE_TICK
  • קליק_PRIMITIVE
  • addPrimitive()
  • work()
2020 (Android 11)
android.media.AudioAttributes.Builder
  • setHapticChannelsmuted()
2019 (Android 10)

רטט תוסס

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

ניקוי המשוב הפיזי

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

ב-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. משתמשים ב רשימת משימות בסיסית, הערכת החומרה, ו-CDD. מידע נוסף על הטמעה פיזית.

עיתונות והודעה

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

משוב פיזי עשיר

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

משוב פיזי מוצמד לאודיו

איור 8. הטמעת משוב פיזי עם צימוד אודיו

משוב פיזי עם צימוד אודיו: גנרטור פיזי

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

הארכיטקטורה של Haptic Generator

איור 9. הארכיטקטורה של 'גנרטור פיזי

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

  1. תדר תהודה למסנן תדרים (band-pass)

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

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

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

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

  3. פקטור Q למסנן תדרים

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

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

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

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

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

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

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

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

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

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

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

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

  6. עוצמת פלט בגלל עיוות

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