Mengimplementasikan konstanta dan primitif

Konstanta dan primitif haptic ditentukan oleh HAL vibrator dan dipetakan oleh framework Android ke API publik. Lakukan pemeriksaan ini untuk menentukan apakah perangkat Anda memenuhi persyaratan minimum untuk menerapkan haptik:

Diagram alir proses penerapan haptik

Gambar 2. Menerapkan efek

Diagram alir langkah-langkah untuk menerapkan primitif

Gambar 3. Mengimplementasikan primitif

Menerapkan konstanta

Konstanta haptic di VibrationEffect dapat digunakan oleh developer melalui VibrationEffect.createPredefined(). Periksa status penerapan konstanta haptic berikut.

Konstanta haptik Lokasi dan ringkasan
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK Konstanta haptik class VibrationEffect
di VibrationEffect tidak menyertakan konsep peristiwa input apa pun, dan tidak memiliki elemen UI. Konstanta menyertakan konsep tingkat energi, seperti EFFECT_CLICK dan EFFECT_HEAVY_CLICK, yang dipanggil oleh createPredefined().

Getaran alternatif yang dijelaskan berikutnya dilakukan pada perangkat yang tidak menerapkan konstanta VibrationEffect. Sebaiknya perbarui konfigurasi ini agar berperforma terbaik di perangkat tersebut.

  • EFFECT_CLICK

    Getaran bentuk gelombang yang dibuat dengan VibrationEffect.createWaveform dan pengaturan waktu yang dikonfigurasi di frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  • EFFECT_HEAVY_CLICK

    Getaran bentuk gelombang yang dibuat dengan VibrationEffect.createWaveform dan pengaturan waktu yang dikonfigurasi di frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

    • EFFECT_DOUBLE_CLICK

    Getaran bentuk gelombang yang dibuat dengan VibrationEffect.createWaveform dan pengaturan waktu (0, 30, 100, 30).

  • EFFECT_TICK

    Getaran bentuk gelombang yang dibuat dengan VibrationEffect.createWaveform dan pengaturan waktu yang dikonfigurasi di frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Diagram alir langkah-langkah untuk menguji umpan balik haptik

Gambar 4. Menerapkan konstanta masukan

Konstanta haptic di HapticFeedbackConstants dapat digunakan oleh developer melalui View.performHapticFeedback()). Periksa status konstanta masukan publik berikut.

Konstanta haptik Lokasi dan ringkasan
CLOCK_TICK, CONTEXT_CLICK, KEYBOARD_PRESS, KEYBOARD_RELEASE, KEYBOARD_TAP, LONG_PRESS, TEXT_HANDLE_MOVE, VIRTUAL_KEY, VIRTUAL_KEY_RELEASE, CONFIRM, REJECT, GESTURE_START, GESTURE_END Class HapticFeedbackConstants
Konstanta haptic di HapticFeedbackConstants membantu peristiwa input dengan elemen UI tertentu, seperti KEYBOARD_PRESS dan KEYBOARD_RELEASE, yang dipanggil oleh performHapticFeedback().

Mengimplementasikan primitif

Primitif haptic di VibrationEffect.Composition memiliki intensitas yang skalabel yang dapat digunakan developer melalui addPrimitive(int primitiveId, float scale, int delay). Primitive dapat dibagi menjadi dua kategori:

  • Primitif singkat: Primitif dengan durasi singkat, biasanya kurang dari 20 milidetik. Ini adalah CLICK, TICK, dan LOW_TICK.

  • Primitif chirp: Primitif dengan amplitudo dan frekuensi yang bervariasi, biasanya dengan durasi yang lebih lama daripada primitif singkat. Parameter tersebut adalah SLOW_RISE, QUICK_RISE, QUCK_FALL, THUD, dan SPIN.

Primitif singkat

Primitif singkat dapat dijelaskan oleh profil akselerasi output motor vibrator. Frekuensi absolut yang digunakan bervariasi untuk setiap primitif, bergantung pada frekuensi resonansi aktuator. Lihat Menyiapkan peralatan pengujian untuk mengetahui informasi selengkapnya tentang penyiapan hardware dan alat untuk mengukur output.

Metrik kualitas yang berharga untuk getaran singkat adalah rasio pulsa ke dering (PRR), yang ditunjukkan pada Gambar 5. PRR didefinisikan sebagai rasio antara pulsa utama, yang ditentukan oleh sinyal di dalam periode durasi saat amplitudo menurun menjadi 10% amplitudo puncak, dan pulsa cincin, yang ditentukan oleh sinyal saat amplitudo menurun dari 10% amplitudo puncak menjadi kurang dari 1% amplitudo puncak. Rumus PRR adalah:

$$ \text{Pulse to ring ratio (PRR)} = 20log_{10}\frac{\text{RMS (main pulse)}}{\text{RMS (ring)}} $$

Untuk informasi selengkapnya tentang PRR, lihat Menganalisis bentuk gelombang dan untuk informasi selengkapnya tentang cara menganalisis dan membandingkan hasil, lihat Membandingkan hasil menggunakan peta performa.

Rasio Denyut Nadi ke Dering

Gambar 5. Definisi rasio denyut nadi ke dering

Terapkan primitif singkat sebagai masukan input pengguna atau diputar dalam komposisi yang lebih lama untuk membuat tekstur yang lembut. Artinya, kode ini biasanya sering dipicu dan diputar secara berurutan dengan cepat. Intensitas yang dirasakan dari satu primitif pendek dapat memperparah intensitas efek yang lebih besar. Oleh karena itu, kalibrasi satu tick atau primitif tick rendah dengan komposisi yang lebih besar, misalnya, 100 tick berturut-turut.

Primitif klik

Primitif klik adalah efek yang kuat dan jernih yang biasanya beroperasi dekat dengan frekuensi resonansi perangkat untuk mencapai output maksimum dalam durasi singkat. Ini lebih kuat dan lebih dalam daripada primitif lainnya, yang berperforma pada intensitas maksimum.

Jika tersedia, gunakan overdrive motor di awal dan pengereman aktif di akhir untuk mencapai waktu naik dan turun motor yang singkat. Untuk beberapa motor, menggunakan gelombang persegi bukan gelombang sinus dapat mencapai akselerasi yang lebih cepat. Gambar 6 menunjukkan contoh profil akselerasi output untuk primitif klik:

Klik profil akselerasi output primitif

Gambar 6. Contoh profil akselerasi output untuk primitif klik

Parameter Panduan
Durasi

Target: 12 md

Batas: < 30 md

Akselerasi output puncak

Target: 2 G

Batas: > 1 G

Frekuensi Kira-kira pada frekuensi resonansi

Primitif centang (centang terang)

Primitif tanda centang adalah efek pendek dan tajam yang biasanya beroperasi pada rentang frekuensi yang lebih tinggi. Primitif ini juga dapat digambarkan sebagai klik intensitas sedang dengan frekuensi yang lebih tinggi dan memiliki ekor pendek. Panduan yang sama berlaku untuk mencapai waktu naik yang singkat menggunakan overdrive motor atau gelombang persegi untuk awal awal, dan pengereman aktif pada offset. Gambar 7 menunjukkan contoh profil akselerasi output untuk primitif tanda centang:

Profil akselerasi output primitif centang

Gambar 7. Contoh profil akselerasi output untuk primitif tanda centang

Parameter Panduan
Durasi

Target: 5 md

Batas: < 20 ms

Akselerasi output puncak

Target: Setengah dari CLICK, 1 G

Batas: Antara 0,5 G dan 1 G

Frekuensi

Target: 2x frekuensi resonansi

Batas: < 500 Hz

Primitif tanda centang rendah

Primitif tanda centang rendah adalah versi tanda centang terang yang lebih lembut dan lebih lemah, yang beroperasi pada rentang frekuensi yang lebih rendah untuk memberikan lebih banyak isi pada efek. Primitif ini juga dapat dijelaskan sebagai klik intensitas sedang pada frekuensi yang lebih rendah, yang dimaksudkan untuk digunakan berulang kali untuk mendapatkan masukan dinamis. Panduan yang sama berlaku untuk mencapai waktu naik yang singkat menggunakan overdrive motor atau gelombang persegi untuk awal awal. Gambar 8 menunjukkan contoh profil akselerasi output untuk primitif tick rendah:

Profil akselerasi output primitif tick rendah

Gambar 8. Contoh profil akselerasi output untuk primitif tick rendah

Parameter Panduan
Durasi

Target: 12 md

Batas: < 30 md

Akselerasi output puncak

Target: 1/4 TICK, 0,25 G

Batas: Antara 0,2 G dan 0,5 G

Frekuensi

Target: 2/3 frekuensi resonansi

Batas: < 100 Hz

Primitif chirp

Primitif chirp dapat dijelaskan oleh sinyal input untuk level voltase dan frekuensi getaran. Akselerasi yang dapat dihasilkan motor pada rentang frekuensi yang berbeda bervariasi bergantung pada kurva respons frekuensi aktuator. Rentang frekuensi dan tingkat voltase perlu disesuaikan berdasarkan perangkat.

Primitif kenaikan lambat

Kenaikan lambat adalah amplitudo lambat dan frekuensi yang di-sweep ke atas dengan awal yang lembut dan intensitas getaran yang meningkat secara konsisten di seluruh sweep. Hal ini dapat diimplementasikan dengan sapuan amplitudo dan frekuensi yang konsisten, menggunakan rentang frekuensi yang lebih rendah yang beroperasi di luar resonansi. Gambar 9 menunjukkan parameter input dan contoh profil akselerasi output untuk implementasi ini. (Garis merah cocok dengan label amplitudo di sebelah kiri dan menunjukkan bagaimana amplitudo getaran bervariasi seiring waktu. Garis biru cocok dengan label frekuensi di sebelah kanan dan menunjukkan bagaimana frekuensi getaran bervariasi seiring waktu.)

Parameter input dan profil akselerasi output untuk primitif kenaikan lambat

Gambar 9. Parameter input dan contoh profil akselerasi output untuk primitif kenaikan lambat

Jika respons frekuensi motor terbatas (tidak cukup kuat dari frekuensi resonansinya), implementasi alternatifnya adalah sapuan sine dari 1/2x hingga 1x frekuensi resonansi. Resonansi motor berkontribusi untuk mencapai puncak sinyal di akhir.

Parameter Panduan
Durasi

Target: 500 md

Toleransi: 20 md

Akselerasi output puncak

Target: 0,5 G

Batas: Antara 0,5 G dan 1 G

Frekuensi

Target: 1/2 hingga 2/3 frekuensi resonansi

Alternatif: 1/2 hingga frekuensi resonansi

Primitif kenaikan cepat

Peningkatan cepat adalah amplitudo dan frekuensi yang lebih cepat menyapu ke atas dengan awal yang lembut dan secara konsisten meningkatkan intensitas getaran di seluruh sapuan. Target frekuensi getaran dan akselerasi output harus sama dengan primitif naik lambat, yang dicapai dalam durasi yang lebih singkat. Gambar 10 menunjukkan parameter input getaran dan contoh profil akselerasi output untuk primitif naik lambat. (Garis merah cocok dengan label amplitudo di sebelah kiri dan menunjukkan bagaimana amplitudo getaran bervariasi seiring waktu. Garis biru cocok dengan label frekuensi di sebelah kanan dan menunjukkan bagaimana frekuensi getaran bervariasi seiring waktu.)

Parameter input dan profil akselerasi output untuk primitif quick rise

Gambar 10. Parameter input dan contoh profil akselerasi output untuk primitif peningkatan cepat

Parameter Panduan
Durasi

Target: 150 md

Toleransi: 20 md

Akselerasi output puncak

Target: Sama seperti SLOW_RISE

Batas: Sama dengan SLOW_RISE

Frekuensi

Target: Sama seperti SLOW_RISE

Alternatif: Sama seperti SLOW_RISE

Primitif penurunan cepat

Penurunan cepat adalah amplitudo cepat dan sapuan frekuensi ke bawah dengan awal lembut. Anda dapat menggunakan frekuensi yang lebih tinggi sebagai titik awal saat motor dipercepat untuk mencapai akselerasi output puncak. Frekuensi harus secara konsisten menurun di seluruh sapuan, bahkan selama waktu naik. Gambar 11 menunjukkan parameter input dan contoh profil akselerasi output untuk implementasi ini. (Garis merah cocok dengan label amplitudo di sebelah kiri dan menunjukkan bagaimana amplitudo getaran bervariasi seiring waktu. Garis biru cocok dengan label frekuensi di sebelah kanan dan menunjukkan bagaimana frekuensi getaran bervariasi seiring waktu.)

Parameter input dan profil akselerasi output untuk primitif jatuh cepat

Gambar 11. Parameter input dan contoh profil akselerasi output untuk primitif penurunan cepat

Parameter Panduan
Durasi

Target: 100 md

Toleransi: 20 md

Akselerasi output puncak

Target: 1 G

Batas: Antara 0,5 G dan 2 G

Frekuensi

Target: 2x hingga 1x frekuensi resonansi

Primitif Thud

Suara gemuruh adalah efek perkusi yang berat, rendah, dan bergetar yang menyimulasikan sensasi fisik mengetuk kayu berlubang. Primitif ini beroperasi dalam rentang frekuensi rendah, mirip dengan primitif tick rendah, untuk memberikan lebih banyak isi pada efek. Anda dapat menerapkan primitif thud sebagai amplitudo dan frekuensi sweep menurun pada rentang frekuensi yang lebih rendah (sebaiknya kurang dari 100 Hz). Gambar 12 menunjukkan parameter input dan contoh profil akselerasi output untuk implementasi ini. (Garis merah cocok dengan label amplitudo di sebelah kiri dan menunjukkan bagaimana amplitudo getaran bervariasi seiring waktu. Garis biru cocok dengan label frekuensi di sebelah kanan dan menunjukkan bagaimana frekuensi getaran bervariasi seiring waktu.)

Parameter input dan profil akselerasi output untuk primitif thud

Gambar 12. Parameter input dan contoh profil akselerasi output untuk primitif bunyi gemuruh

Jika respons frekuensi motor terbatas, implementasi alternatifnya adalah memulai dengan sinyal drive intensitas penuh pada frekuensi resonansi dan turun ke frekuensi serendah mungkin yang masih dapat dirasakan. Pendekatan ini mungkin memerlukan peningkatan intensitas sinyal penggerak pada frekuensi yang lebih rendah agar getaran dapat dirasakan.

Parameter Panduan
Durasi

Target: 300 md

Toleransi: 20 md

Akselerasi output puncak

Target: 0,25 G

Batas: Antara 0,2 G dan 0,5 G

Frekuensi

Target: 1/2 hingga 1/3 frekuensi resonansi

Alternatif: 1x hingga 1/2 frekuensi resonansi

Primitif putaran

Putaran menyimulasikan momentum putaran dari putaran cepat ke atas dan ke bawah dengan sedikit aksen di bagian tengah. Putaran dapat diterapkan dengan menyapu amplitudo dan frekuensi secara independen, dalam arah yang berlawanan dan diikuti dengan gerakan terbalik. Penting untuk menggunakan rentang frekuensi yang lebih rendah (sebaiknya kurang dari 100 Hz). Gambar 13 menunjukkan parameter input dan contoh profil akselerasi output untuk implementasi ini. (Garis merah cocok dengan label amplitudo di sebelah kiri dan menunjukkan bagaimana amplitudo getaran bervariasi seiring waktu. Garis biru cocok dengan label frekuensi di sebelah kanan dan menunjukkan bagaimana frekuensi getaran bervariasi seiring waktu.)

Sebaiknya primitif putaran dipanggil dua kali berturut-turut, atau tiga kali dalam komposisi, untuk mencapai sensasi berputar dan tidak stabil.

Jika respons frekuensi motor terbatas, implementasi alternatifnya adalah melakukan sapuan sinus cepat dari 1/2x hingga 1x frekuensi resonan dan kembali. Resonansi motor secara otomatis memberikan aksen di tengah sinyal.

Parameter input dan profil akselerasi output untuk primitif putaran

Gambar 13. Parameter input dan contoh profil akselerasi output untuk primitif putaran

Parameter Panduan
Durasi

Target: 150 md

Toleransi: 20 md

Akselerasi output puncak

Target: 0,5 G

Batas: Antara 0,25 G dan 0,75 G

Frekuensi

Target: 2/3 hingga 1/3, lalu kembali ke 1/2 frekuensi resonansi

Alternatif: 2/3 hingga 1x, lalu kembali ke 1/2 frekuensi resonansi