UX Foundation for Haptic Framework

การปรับปรุงเฟรมเวิร์กของ Android ทั้งหมดที่สร้างขึ้นจากระบบสัมผัสนั้นขับเคลื่อนโดยชุดของหลักการ UX ที่มีการพัฒนาในอัตราที่เท่าเทียมกัน หลักการในปัจจุบันเกี่ยวข้องกับการเปลี่ยนการสั่นสะเทือน buzzy กับ haptics ที่ชัดเจนและการสำรวจ haptics ที่อุดมไปด้วย

หลักการ UX

รูปที่ 1 หลักการปัจจุบัน

API ตามปี

รูปที่ 2 สัมผัสเสมือน APIs ปี

สั่นสะท้าน

ย้อนหลังไปถึงวิทยุติดตามตัวและโทรศัพท์ที่มีคุณลักษณะที่มีคุณภาพต่ำ แต่ ERM สั่นสะเทือนออดตามอำนาจที่มีประสิทธิภาพได้รับการใช้แทนการเรียกเข้าหูในโหมดเงียบ ส่วนประกอบฮาร์ดแวร์แบบเดิมที่สร้างเสียงที่ดังและไม่พึงประสงค์อาจเป็นอันตรายต่อ UX แบบสัมผัสได้ โดยการแสดงผลคุณภาพต่ำ (เช่น โทรศัพท์ราคาถูกและเสีย)

สัมผัสที่ชัดเจน

haptics ล้างสนับสนุนความรู้สึกของการเปลี่ยนแปลงสถานะที่ไม่ต่อเนื่อง (ตัวอย่างเช่นการเปลี่ยนแปลงไบนารีในระหว่างการเปิด / ปิดกระบวนการ) เนื่องจากลักษณะของ affordance ไม่ต่อเนื่อง, haptics ชัดเจนจะถูกสร้างเป็นองค์กรเดียว (ตัวอย่างเช่นหนึ่งในผลกระทบต่อเหตุการณ์สัมผัสอินพุตหนึ่ง)

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 การกดและปล่อย

แฮปติคที่อุดมไปด้วย

haptics รวยเป็นหมวดหมู่การเจริญเติบโต haptics ที่นอกเหนือไปจากผลกระทบแรงกระตุ้นที่ใช้เพียงครั้งเดียว Android มุ่งหวังที่จะสนับสนุนการสั่นแบบสัมผัสที่สมบูรณ์พร้อมความสามารถในการปรับแต่งได้สูงและความสามารถในการปรับเปลี่ยนได้ในระดับที่ละเอียด กรณีการใช้งานต่อไปนี้ได้รับการสนับสนุนใน Android 11 หรือต่ำกว่า

Rich Haptics

รูปที่ 4 haptics อุดมไปด้วยกับเนื้อเลื่อน

การลากและรูด

รูปที่ 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: แฮปติคที่เชื่อมต่อเสียง

haptics เสียงคู่จะสัมผัสรูปแบบควบคู่ไปกับจังหวะของเสียงที่จะได้รับความสนใจของผู้ใช้

แฮบติคที่เชื่อมต่อกับเสียง: ประโยชน์

ในการใช้ระบบสั่นแบบเสียงควบคู่ ให้รวมระบบสั่นแบบใสเข้ากับการสั่นแบบยาว ความรู้สึกสัมผัสที่หนักแน่นแต่สั้นจากระบบสัมผัสที่ชัดเจนทำให้เกิดรูปแบบจังหวะที่ไม่ต่อเนื่อง เมื่อรวมกับสิ่งเร้าในระดับสูงที่มีการสั่นสะเทือนเป็นเวลานาน สิ่งนี้จะดึงดูดความสนใจของผู้ใช้ได้เป็นอย่างดี

สิ่งสำคัญคือต้องพิจารณารูปแบบจังหวะความรู้สึก หากไม่มีความรู้สึกถึงจังหวะ ผู้ใช้จะรับรู้ความรู้สึกสัมผัสนั้นเป็นการสุ่มส่งเสียงพึมพำ และมักจะเพิกเฉยต่อความรู้สึกนั้น

เครื่องเสียงคู่

รูปตัวอย่าง 7. haptics คู่เสียง

การโต้ตอบด้วยเสียง: เคล็ดลับสำหรับการปรับใช้

การใช้ระบบสัมผัสที่จับคู่เสียงต้องมีความเข้าใจพื้นฐานเกี่ยวกับการเล่นเนื้อหาทั้งช่องสัญญาณเสียงและช่องสัญญาณแบบสัมผัส ให้นึกถึงสิ่งต่อไปนี้

  • ใช้ MediaPlayer หรือ SoundPool ชั้นเรียน

    • สินทรัพย์ในรูปแบบ OGG ด้วยคีย์ข้อมูลเมตาพิเศษ ( ANDROID_HAPTIC ตามด้วยหมายเลขของช่องทางสัมผัส) บ่งบอกถึงการปรากฏตัวของข้อมูล haptics และการเล่นกับ MediaPlayer และ SoundPool
  • บ่งบอกถึงการสนับสนุนของ haptics และการเล่นเสียงใน audio_policy_configuration.xml

    • ใช้รายละเอียดการส่งออกกับ haptics ช่อง AUDIO_CHANNEL_OUT_HAPTIC_A|B B
    • สำหรับเอาต์พุตสตรีมที่มีแชนเนลแบบสัมผัส โปรดจำไว้ว่าแชนเนลแบบแฮบติคจะแสดงเป็นแชนเนลพิเศษในข้อมูล

    ตัวอย่าง

    หากมาสก์ช่องสำหรับสตรีมเอาต์พุตมีลักษณะดังนี้:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    จากนั้นทุกตัวอย่างควรมีลักษณะดังนี้:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • เปลี่ยน AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)

    การ false ในการเล่นช่องสัมผัส

    • โดยค่าเริ่มต้นช่องสัมผัสจะปิดเสียง ( true )
    • กรณีการใช้งานรวมถึงเสียงเรียกเข้าและเสียง UI ที่มีการสั่นและการตอบรับแบบซิงโครนัส
  • เครื่องสั่น HAL ต้องใช้การสนับสนุนการควบคุมภายนอก

เสียงควบคู่ Haptics

รูปที่ 8 การใช้ haptics เสียงคู่

แฮบติคแบบจับคู่เสียง: Haptic Generator

HapticGenerator เป็น ผลเสียง แนะนำใน Android 12 ที่สามารถสร้างข้อมูลสัมผัสจากช่องทางเสียงและเล่นในเวลาจริงเป็น haptics เสียงคู่ ผลที่ได้คือนำไปใช้กับ AudioTrack ตามที่อธิบายไว้ในรูปที่ 9

Haptic Generator architecture

สถาปัตยกรรมรูปที่ 9 สัมผัสเครื่องกำเนิดไฟฟ้า

เพื่อให้แน่ใจว่าอัลกอริธึมเครื่องกำเนิดแฮบติคของคุณสร้างแฮปติกคุณภาพสูง ให้ปรับอัลกอริธึมการสร้างให้เข้ากับมอเตอร์สั่นของอุปกรณ์โดยการปรับพารามิเตอร์ที่กำหนดค่าห่วงโซ่ของตัวกรองที่ใช้กับรูปคลื่นเสียง ส่วนนี้จะอธิบายพารามิเตอร์เหล่านี้โดยละเอียด และอธิบายวิธีปรับแต่งพารามิเตอร์เหล่านี้ให้สอดคล้องกับข้อกำหนดฮาร์ดแวร์ของคุณ

  1. ความถี่เรโซแนนซ์สำหรับตัวกรองแบนด์พาส

    ความถี่เรโซแนนซ์ของเครื่องสั่นคือความถี่ที่ตัวกระตุ้นแบบสัมผัสมีเอาต์พุตสูงสุด พารามิเตอร์นี้จะปรับตัวป้องกันเสียงสะท้อนเพื่อทำให้ฟังก์ชันการถ่ายโอนการตอบสนองบางส่วนเรียบ เพื่อให้ได้แบนด์วิดท์ที่กว้างขึ้น Android กรอบการเชื่อมโยงค่านี้โดยอัตโนมัติเพื่อการส่งออกของวิธีการเขย่า HAL IVibrator.getResonantFrequency

    ค่าเริ่มต้นสำหรับพารามิเตอร์นี้เป็น 150Hz นี้สามารถแก้ไขได้ในรหัส ที่นี่

  2. พลังการทำให้เป็นมาตรฐานสำหรับซองจดหมายที่ช้า

    พารามิเตอร์นี้กำหนดเลขชี้กำลังในการทำให้เป็นมาตรฐานบางส่วน (การควบคุมอัตราขยายอัตโนมัติ) ค่าเริ่มต้นของมันคือ -0.8 ซึ่งหมายความว่า 80% ของการเปลี่ยนแปลงช่วงแบบไดนามิกจะถูกลบออกโดยขั้นตอนนี้ได้รับการควบคุม นี้สามารถแก้ไขได้ในรหัส ที่นี่

  3. ปัจจัย Q สำหรับตัวกรองแบบแบนด์สต็อป

    ปัจจัยด้านคุณภาพเครื่องสั่น (ปัจจัย Q) ถูกกำหนดโดยสองพารามิเตอร์:

    • Zero Q ซึ่งเป็นปัจจัยด้านคุณภาพของศูนย์ในตัวกรองแบบแบนด์สต็อปที่ตัดการสั่นพ้องบางส่วน

    • The Pole Q ปัจจัยด้านคุณภาพของเสาในตัวกรองแบบ band-stop

    อัตราส่วนของค่าทั้งสองนี้จะจำกัดการปราบปรามของเรโซแนนซ์เพื่อเพิ่มความถี่ต่ำและขยายการตอบสนองของอัลกอริธึม ยกตัวอย่างเช่นค่าเริ่มต้นของ 8 สำหรับศูนย์ Q และ 4 สำหรับขั้วโลก Q ผลิตอัตราส่วนของ 2, จำกัด เสียงสะท้อนปราบปรามโดยปัจจัยที่ 2 (6 dB บริการ) Android กรอบการเชื่อมโยงทั้งสองค่าการส่งออกของวิธีการเขย่า HAL IVibrator.getQFactor

    หากค่าเริ่มต้นไม่ได้คำนึงถึงการหน่วงของความแรงของมอเตอร์ในอุปกรณ์ของคุณ เราแนะนำให้แก้ไขทั้งสองค่าพร้อมกัน และเพิ่มทั้งสองหรือลดทั้งสองค่า อัตราส่วนของศูนย์ Q เพื่อขั้วโลก Q ควรมากกว่า 1 นี้สามารถแก้ไขได้ในรหัส ที่นี่

  4. ความถี่มุมสำหรับการบิดเบือน

    ความถี่ของมุมใช้โดยตัวกรองความถี่ต่ำผ่านที่ระงับการสั่นระดับต่ำและเพิ่มระดับที่สูงขึ้นโดยใช้ความผิดเพี้ยนของลูกบาศก์ มันเริ่มต้นที่ 300Hz นี้สามารถแก้ไขได้ในรหัส ที่นี่

  5. อินพุตเกนและเกณฑ์คิวบ์สำหรับการบิดเบือน

    พารามิเตอร์เหล่านี้ใช้โดยตัวกรองความผิดเพี้ยนแบบไม่เชิงเส้นที่ใช้กับรูปคลื่นอินพุตที่ลดแอมพลิจูดของสัญญาณความถี่ต่ำและเพิ่มความถี่ที่สูงขึ้น

    • ค่าเริ่มต้นสำหรับปัจจัยกำไรอินพุตเป็น 0.3
    • ค่าเริ่มต้นสำหรับเกณฑ์ก้อนคือ 0.1

    เราขอแนะนำให้แก้ไขค่าทั้งสองร่วมกัน พวกเขาสามารถพบได้ในรหัส ที่นี่

    สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชั่นที่ใช้โดยตัวกรองนี้จะหมายถึงการดำเนินงานที่มีอยู่ ที่นี่ หากต้องการเรียนรู้เพิ่มเติมว่าพารามิเตอร์ทั้งสองมีอิทธิพลต่อเอาต์พุตอย่างไร เราแนะนำให้วางแผนการตอบสนองความถี่ของตัวกรอง และสังเกตว่าการตอบสนองความถี่เปลี่ยนแปลงอย่างไรด้วยค่าพารามิเตอร์ต่างๆ

  6. เกนเอาต์พุตสำหรับการบิดเบือน

    พารามิเตอร์นี้ควบคุมแอมพลิจูดการสั่นสะเทือนสุดท้าย มันเป็นกำไรสุดท้ายนำมาใช้หลังจากที่ limiter อ่อนที่ข้อ จำกัด ของการสั่นสะเทือนช่วงกว้างของคลื่นเป็นค่าเริ่มต้นน้อยกว่า 1 ของมันคือ 1.5 และมันสามารถแก้ไขได้ในรหัส ที่นี่ ถ้าแรงสั่นสะเทือนน้อยเกินไป ให้เพิ่มค่า หากคุณได้ยินการสั่นของฮาร์ดแวร์แอคทูเอเตอร์ ให้ลดค่าลง