Menganalisis bentuk gelombang getaran

Aktuator getaran yang paling umum di perangkat Android adalah aktuator resonan linear (LRA). LRA menyimulasikan perasaan klik tombol pada permukaan kaca yang tidak responsif. Sinyal masukan klik yang jelas dan tajam biasanya berlangsung antara 10 dan 20 milidetik durasi. Sensasi ini membuat interaksi pengguna terasa lebih alami. Untuk keyboard virtual, masukan klik ini dapat meningkatkan kecepatan mengetik dan mengurangi error.

LRA memiliki beberapa frekuensi resonansi umum:

  • Beberapa LRA memiliki frekuensi resonansi dalam rentang 200 hingga 300 Hz, yang bersamaan dengan frekuensi saat kulit manusia paling sensitif terhadap getaran. Sensasi getaran pada rentang frekuensi ini biasanya digambarkan sebagai halus, tajam, dan menembus.
  • Model LRA lainnya memiliki frekuensi resonansi yang lebih rendah, sekitar 150 Hz. Sensasi secara kualitatif lebih lembut dan lebih penuh (dalam dimensi).
Komponen mencakup, dari atas ke bawah, penutup, pelat, magnet tengah, 2 magnet samping, massa, 2 pegas, kumparan, sirkuit fleksibel, alas, dan perekat.
Komponen aktuator resonansi linear (LRA).

Dengan tegangan input yang sama pada dua frekuensi yang berbeda, amplitudo output getaran dapat berbeda. Makin jauh frekuensi dari frekuensi resonansi LRA, makin rendah amplitudo getarnya.

Efek haptic perangkat tertentu menggunakan aktuator getaran dan driver-nya. Driver haptic yang menyertakan fitur overdrive dan pengereman aktif dapat mengurangi waktu naik dan dering LRA, sehingga menghasilkan getaran yang lebih responsif dan jelas.

Penghalusan bentuk gelombang default di perangkat

Sebagai ilustrasi, pertimbangkan bagaimana pola bentuk gelombang kustom berperilaku di perangkat generik:

Kotlin

val timings: LongArray = longArrayOf(50, 50, 50, 50, 50, 100, 350, 250)
val amplitudes: IntArray = intArrayOf(77, 79, 84, 99, 143, 255, 0, 255)
val repeatIndex = -1 // Don't repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))

Java

long[] timings = new long[] { 50, 50, 50, 50, 50, 100, 350, 250 };
int[] amplitudes = new int[] { 77, 79, 84, 99, 143, 255, 0, 255 };
int repeatIndex = -1 // Don't repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));

Plot berikut menunjukkan bentuk gelombang input dan akselerasi output yang sesuai dengan cuplikan kode sebelumnya. Perhatikan bahwa akselerasi bertambah secara bertahap, bukan tiba-tiba, setiap kali ada perubahan langkah amplitudo dalam pola—yaitu, pada 0 mdtk, 150 mdtk, 200 mdtk, 250 mdtk, dan 700 mdtk. Ada juga overshoot pada setiap perubahan langkah amplitudo, dan ada derau yang terlihat yang berlangsung setidaknya 50 md saat amplitudo input tiba-tiba turun ke 0.

Plot bentuk gelombang input fungsi langkah.
Plot bentuk gelombang yang diukur sebenarnya, yang menunjukkan transisi yang lebih organik di antara level.

Pola haptic yang ditingkatkan

Untuk menghindari overshoot dan mengurangi waktu dering, ubah amplitudo secara lebih bertahap. Berikut ini menunjukkan plot gelombang dan akselerasi dari versi yang direvisi:

Kotlin

val timings: LongArray = longArrayOf(
    25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
    300, 25, 25, 150, 25, 25, 25
)
val amplitudes: IntArray = intArrayOf(
    38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
    0, 85, 170, 255, 170, 85, 0
)
val repeatIndex = -1 // Do not repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))

Java

long[] timings = new long[] {
        25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
        300, 25, 25, 150, 25, 25, 25
    };
int[] amplitudes = new int[] {
        38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
        0, 85, 170, 255, 170, 85, 0
    };
int repeatIndex = -1; // Do not repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));

Plot bentuk gelombang input dengan langkah tambahan.
Plot bentuk gelombang yang diukur, yang menunjukkan transisi yang lebih halus.

Membuat efek haptic yang lebih kompleks

Elemen lain dalam respons klik yang memuaskan lebih rumit, sehingga memerlukan beberapa pengetahuan tentang LRA yang digunakan di perangkat. Untuk hasil terbaik, gunakan bentuk gelombang prafabrikasi perangkat dan konstanta yang disediakan platform, yang memungkinkan Anda melakukan hal berikut:

  • Lakukan efek yang jelas dan primitif.
  • Gabungkan keduanya untuk membuat efek haptik baru.

Konstanta dan primitif haptik yang telah ditentukan ini dapat sangat mempercepat pekerjaan Anda saat membuat efek haptik berkualitas tinggi.