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).
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.
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));
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.