Nền tảng UX cho khung xúc giác

Tất cả các cải tiến của khung Android được xây dựng dựa trên xúc giác đều được thúc đẩy bởi một bộ nguyên tắc UX đang phát triển với tốc độ ngang nhau. Các nguyên tắc hiện tại liên quan đến việc thay thế rung động ồn ào bằng xúc giác rõ ràng và khám phá các xúc giác phong phú .

Nguyên tắc UX

Hình 1. Nguyên tắc hiện hành

Bảng sau liệt kê tất cả các API xúc giác có sẵn.

API phương pháp Đã thêm năm
android.view.HapticFeedbackConstants
  • CONTEXT_CLICK
  • CLOCK_TICK
  • VIRTUAL_KEY
  • KEYBOARD_TAP
  • LONG_PRESS
Trước năm 2016
  • KEYBOARD_PRESS
  • KEYBOARD_RELEASE
  • TEXT_HANDLE_MOVE
  • VIRTUAL_KEY_RELEASE
2017 (Android 8)
  • XÁC NHẬN
  • TỪ CHỐI
  • GESTURE_START
  • GESTURE_END
2020 (Android 11)
android.View
  • biểu diễnHapticPhản hồi()
Trước năm 2016
android.os.Vibrator
  • rung()
  • hasVibrator()
Trước năm 2016
  • hasAmplitudeControl()
2017 (Android 8)
  • areAllEffectsSupported()
  • areAllPrimitiveSupported()
  • areEffectsSupported()
  • arePrimitiveSupported()
2020 (Android 11)
android.os.VibrationEffect
  • createOneShot()
  • createWaveform()
2017 (Android 8)
  • EFFECT_TICK
  • EFFECT_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_DOUBLE_CLICK
  • tạoĐược xác định trước()
2019 (Android 10)
android.os.VibrationEffect.Composition
  • PRIMITIVE_TICK
  • PRIMITIVE_CLICK
  • addPrimitive()
  • soạn, biên soạn()
2020 (Android 11)
android.media.AudioAttribution.Builder
  • setHapticChannelsMuted()
2019 (Android 10)

Rung ù

Kể từ thời máy nhắn tin và điện thoại phổ thông, các rung động dựa trên chuông ERM chất lượng thấp nhưng tiết kiệm điện đã được sử dụng để thay thế cho tiếng chuông thính giác ở chế độ im lặng . Các thành phần phần cứng cũ tạo ra tiếng ồn lớn và khó chịu có thể gây hại cho trải nghiệm người dùng xúc giác bằng cách mang lại lượt hiển thị chất lượng thấp (ví dụ: một chiếc điện thoại rẻ tiền, bị hỏng).

Xúc giác rõ ràng

Xúc giác rõ ràng hỗ trợ cảm giác thay đổi trạng thái riêng biệt (ví dụ: thay đổi nhị phân trong quá trình bật/tắt nguồn). Do tính chất của khả năng chi trả riêng biệt , các xúc giác rõ ràng được tạo ra dưới dạng một thực thể duy nhất (ví dụ: một hiệu ứng xúc giác cho mỗi một sự kiện đầu vào).

Mục tiêu của Android là mang lại cảm giác xúc giác rõ ràng với cảm giác mạnh mẽ nhưng sắc nét thay vì cảm giác ù ù hoặc ủy mị.

Các hằng số xúc giác được xác định trước được tạo để hỗ trợ xúc giác rõ ràng bao gồm:

Trong 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

Trong VibrationEffect :

  • EFFECT_CLICK
  • EFFECT_DOUBLE_CLICK
  • EFFECT_HEAVY_CLICK
  • EFFECT_TICK

Xây dựng kiến ​​thức chung giữa nhà sản xuất thiết bị và nhà phát triển là chìa khóa để nâng cao chất lượng tổng thể của xúc giác trong hệ sinh thái Android. Sử dụng danh sách kiểm tra cơ bản , đánh giá phần cứngCDD . để tìm hiểu thêm về cách triển khai xúc giác.

Báo chí và phát hành

Hình 3. Nhấn và thả.

Xúc giác phong phú

Xúc giác phong phú là một danh mục xúc giác đang phát triển vượt xa các hiệu ứng dựa trên sự thúc đẩy đơn lẻ. Android nhằm mục đích hỗ trợ xúc giác phong phú với khả năng kết hợp và điều chỉnh cao với mức độ chi tiết tốt. Các trường hợp sử dụng sau được hỗ trợ trong Android 11 trở xuống.

Haptics phong phú

Hình 4. Xúc giác phong phú với kết cấu trượt

Kéo và vuốt

Hình 5. Kéo và vuốt

Trường hợp sử dụng 1: Kết cấu trượt

Nếu hiệu ứng xúc giác được lặp lại trong khi ngón tay trượt trên bề mặt cảm ứng (ví dụ: kéo, vuốt, khám phá bề mặt bằng kết cấu xúc giác ảo), thì hiệu ứng xúc giác lặp lại tốt nhất là sắc nét và tinh tế.

Nếu hiệu ứng riêng lẻ ồn ào hơn là sắc nét thì khoảng thời gian giữa các lần lặp lại có thể sẽ bị xóa bỏ. Kết quả là một tiếng vang dài chứ không phải là nhiều tín hiệu rời rạc.

Nếu biên độ không đủ tinh tế thì năng lượng xúc giác cảm nhận được sẽ tích tụ qua quá trình lặp lại, dẫn đến xúc giác cực kỳ mạnh ở cuối lần lặp lại.

Triển khai kết cấu xúc giác bề mặt đơn giản cho cử chỉ vuốt và kéo

Sử dụng CLOCK_TICKTEXT_HANDLE_MOVE trong HapticFeedbackConstants . Các hằng số này xác định trước các đặc điểm của sự lặp lại và biên độ.

Tạo hiệu ứng của riêng bạn

Để tạo hiệu ứng của riêng bạn, hãy soạn một thiết kế bằng cách xâu chuỗi các chuỗi PRIMITIVE_CLICKPRIMITIVE_TICK lại với nhau trong VibrationEffect.Composition . Bạn có thể điều chỉnh các đặc điểm của thang đo lặp lại và biên độ bằng cách sử dụng addPrimitive(int primitiveID, float scale, int delay) . Hỗ trợ dựa trên khả năng CAP_COMPOSE_EFFECTS của Giao diện HAL Vibrator .

Trường hợp sử dụng 2: Rung lâu với hiệu ứng dễ dàng

Rung động dài là dao động có biên độ mượt mà chuyển từ 0 sang biên độ mục tiêu. Độ rung lâu có thể tạo ra xúc giác chú ý dễ dàng nhận biết được. Tuy nhiên, độ rung kéo dài đột ngột có thể khiến người dùng giật mình trong môi trường yên tĩnh và thường tạo ra những tiếng ù ù. Để tạo ra rung động dài dễ chịu hơn, hãy áp dụng hiệu ứng dễ chịu khi bắt đầu rung động dài. Điều này tạo ra sự chuyển đổi biên độ mượt mà hướng tới biên độ mục tiêu.

Áp dụng hiệu ứng dễ dàng

  1. Kiểm tra khả năng kiểm soát biên độ của phần cứng bằng android.os.Vibrator.hasAmplitudeControl() .

    • Kết quả phải true để tạo ra hiệu ứng dễ dàng với biên độ khác nhau.
  2. Sử dụng VibrationEffect . createWaveform(timings[], amplitudes[], int repeat) .

  3. Điều chỉnh chuỗi timings[]amplitudes[] để tạo đường cong dễ dàng tham gia, như trong Hình 6.

Rung lâu

Hình 6. Đường cong giảm rung dài

Trường hợp sử dụng 3: Xúc giác kết hợp âm thanh

Xúc giác kết hợp với âm thanh là các mẫu xúc giác được kết hợp với nhịp điệu của âm thanh để thu hút sự chú ý của người dùng.

Xúc giác kết hợp âm thanh: Lợi ích

Để triển khai xúc giác kết hợp với âm thanh, hãy kết hợp xúc giác rõ ràng với độ rung dài. Cảm giác xúc giác mạnh nhưng ngắn từ xúc giác rõ ràng mang lại các mẫu nhịp điệu riêng biệt. Khi kết hợp với mức độ kích thích cao mà độ rung dài mang lại, điều này sẽ giúp thu hút sự chú ý của người dùng rất tốt.

Điều quan trọng là phải xem xét các mô hình nhịp nhàng của cảm giác. Nếu không có cảm giác về nhịp điệu, người dùng sẽ coi cảm giác xúc giác là những tiếng vo ve ngẫu nhiên và có xu hướng bỏ qua chúng.

Cặp âm thanh

Hình 7. Ví dụ về xúc giác cặp đôi âm thanh

Xúc giác kết hợp với âm thanh: Mẹo triển khai

Việc triển khai xúc giác kết hợp âm thanh đòi hỏi sự hiểu biết cơ bản về phát lại nội dung của cả kênh âm thanh và kênh xúc giác. Hãy ghi nhớ những điều sau đây.

  • Sử dụng các lớp MediaPlayer hoặc SoundPool .

    • Nội dung ở định dạng OGG có khóa siêu dữ liệu đặc biệt ( ANDROID_HAPTIC theo sau là một số kênh xúc giác) cho biết sự hiện diện của dữ liệu xúc giác và khả năng phát lại bằng MediaPlayerSoundPool .
  • Cho biết sự hỗ trợ của xúc giác và phát lại âm thanh trong audio_policy_configuration.xml .

    • Sử dụng cấu hình đầu ra với kênh xúc giác AUDIO_CHANNEL_OUT_HAPTIC_A|B .
    • Đối với luồng đầu ra có kênh xúc giác, hãy nhớ rằng các kênh xúc giác được trình bày dưới dạng kênh bổ sung trong dữ liệu.

    Ví dụ

    Nếu mặt nạ kênh cho luồng đầu ra trông như thế này:

    AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A

    Sau đó, mọi mẫu sẽ trông như thế này:

    AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A

  • Thay đổi AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted) thành false để phát kênh xúc giác.

    • Theo mặc định, các kênh xúc giác bị tắt tiếng ( true ).
    • Các trường hợp sử dụng bao gồm nhạc chuông và âm thanh giao diện người dùng với xúc giác và phản hồi đồng bộ.
  • Vibrator HAL phải triển khai hỗ trợ điều khiển bên ngoài.

Haptics kết hợp âm thanh

Hình 8. Triển khai xúc giác kết hợp âm thanh

Xúc giác kết hợp âm thanh: Haptic Generator

HapticGeneratorHiệu ứng âm thanh được giới thiệu trong Android 12. Hiệu ứng này có thể tạo dữ liệu xúc giác từ một kênh âm thanh và phát dữ liệu đó trong thời gian thực dưới dạng xúc giác kết hợp âm thanh . Hiệu ứng được áp dụng cho AudioTrack như được mô tả trong Hình 9.

Haptic Generator architecture

Hình 9. Kiến trúc Haptic Generator

Để đảm bảo thuật toán tạo xúc giác của bạn tạo ra xúc giác chất lượng cao, hãy điều chỉnh thuật toán tạo cho động cơ bộ rung của thiết bị bằng cách điều chỉnh các tham số cấu hình chuỗi bộ lọc mà nó áp dụng cho dạng sóng âm thanh. Phần này mô tả chi tiết các tham số này và giải thích cách điều chỉnh chúng theo thông số kỹ thuật phần cứng của bạn.

  1. Tần số cộng hưởng cho bộ lọc thông dải

    Tần số cộng hưởng của bộ rung là tần số mà bộ truyền động xúc giác có công suất tối đa. Tham số này điều chỉnh bộ chống cộng hưởng để làm phẳng một phần chức năng truyền phản hồi, nhằm có được băng thông rộng hơn. Khung Android tự động liên kết giá trị này với đầu ra của phương thức Vibrator HAL IVibrator.getResonantFrequency .

    Giá trị mặc định cho tham số này là 150Hz . Điều này có thể được sửa đổi trong mã ở đây .

  2. Sức mạnh chuẩn hóa cho đường bao chậm

    Tham số này xác định số mũ trong quá trình chuẩn hóa từng phần (điều khiển khuếch đại tự động). Giá trị mặc định của nó là -0,8 , có nghĩa là 80% biến thể của dải động sẽ bị loại bỏ bởi bước kiểm soát khuếch đại này. Điều này có thể được sửa đổi trong mã ở đây .

  3. Hệ số Q cho bộ lọc chặn dải

    Hệ số chất lượng máy rung (hệ số Q) được xác định bởi hai thông số:

    • Zero Q, hệ số chất lượng của các số 0 trong bộ lọc chặn dải giúp loại bỏ một phần sự cộng hưởng.

    • Cực Q, hệ số chất lượng của các cực trong bộ lọc chặn dải.

    Tỷ lệ của hai giá trị đó hạn chế việc triệt tiêu cộng hưởng để tăng tần số thấp hơn và mở rộng đáp ứng thuật toán. Ví dụ: giá trị mặc định là 8 cho Zero Q và 4 cho Cực Q tạo ra tỷ lệ 2 , hạn chế triệt tiêu cộng hưởng theo hệ số 2 (6 dB). Khung Android liên kết cả hai giá trị với đầu ra của phương thức Vibrator HAL IVibrator.getQFactor .

    Nếu các giá trị mặc định không giải thích được việc giảm cường độ động cơ trong thiết bị của bạn, chúng tôi khuyên bạn nên sửa đổi cả hai giá trị cùng một lúc và tăng cả hai hoặc giảm cả hai. Tỷ số giữa Zero Q và Cực Q phải lớn hơn 1 . Điều này có thể được sửa đổi trong mã ở đây .

  4. Tần số góc cho biến dạng

    Tần số góc được áp dụng bởi bộ lọc thông thấp giúp triệt tiêu rung động ở mức độ thấp và tăng cường mức độ cao hơn bằng cách sử dụng biến dạng khối. Nó mặc định là 300Hz . Điều này có thể được sửa đổi trong mã ở đây .

  5. Mức tăng đầu vào và ngưỡng khối cho biến dạng

    Các tham số này được sử dụng bởi bộ lọc biến dạng phi tuyến áp dụng cho dạng sóng đầu vào làm giảm biên độ của tín hiệu tần số thấp hơn và tăng tần số cao hơn.

    • Giá trị mặc định cho hệ số khuếch đại đầu vào là 0,3 .
    • Giá trị mặc định cho ngưỡng khối là 0,1 .

    Chúng tôi khuyên bạn nên sửa đổi cả hai giá trị cùng nhau. Chúng có thể được tìm thấy trong mã ở đây .

    Để biết thêm thông tin về chức năng được bộ lọc này áp dụng, hãy tham khảo cách triển khai có sẵn tại đây . Để tìm hiểu thêm về cách hai tham số này ảnh hưởng đến đầu ra, chúng tôi khuyên bạn nên vẽ đồ thị đáp ứng tần số của các bộ lọc và quan sát cách đáp ứng tần số thay đổi với các giá trị tham số khác nhau.

  6. Tăng đầu ra cho biến dạng

    Thông số này kiểm soát biên độ rung cuối cùng. Đó là mức tăng cuối cùng được áp dụng sau bộ giới hạn mềm giới hạn biên độ rung ở mức nhỏ hơn 1. Giá trị mặc định của nó là 1,5 và có thể được sửa đổi trong mã ở đây . Nếu độ rung quá nhỏ, hãy tăng giá trị. Nếu bạn có thể nghe thấy tiếng lạch cạch của phần cứng bộ truyền động, hãy giảm giá trị.