Titreşim dalga formlarını analiz etme

Android cihazlarda en yaygın titreşim aktüatörleri doğrusal rezonanslı aktüatörlerdir (LRA'lar). LRA'lar, normalde tepki vermeyen cam yüzeyde düğme tıklama hissini simüle eder. Net ve keskin bir tıklama geri bildirimi sinyali genellikle 10 ila 20 milisaniye sürer. Bu his, kullanıcı etkileşimlerinin daha doğal olmasını sağlar. Sanal klavyelerde bu tıklama geri bildirimi, yazma hızını artırabilir ve hataları azaltabilir.

LRA'ların birkaç yaygın rezonans frekansı vardır:

  • Bazı LRA'ların rezonans frekansları 200 ila 300 Hz aralığındaydı. Bu frekans, insan derisinin titreşime en duyarlı olduğu frekansla aynıydı. Bu frekans aralığındaki titreşim hissi genellikle düzgün, keskin ve nüfuz edici olarak tanımlanır.
  • Diğer LRA modellerinin rezonans frekansları yaklaşık 150 Hz'dir. Bu modellerin verdiği his, nitelik açısından daha yumuşak ve daha dolgundur (boyut olarak).
Bileşenler, yukarıdan aşağıya doğru; kapak, plaka, orta mıknatıs, 2 yan mıknatıs, kütle, 2 yay, bobin, esnek devre, taban ve yapıştırıcıdan oluşur.
Doğrusal rezonanslı aktüatör (LRA) bileşenleri.

İki farklı frekansta aynı giriş voltajı verildiğinde titreşim çıkış genlikleri farklı olabilir. Frekans, LRA'nın rezonans frekansından ne kadar uzaksa titreşim genliği o kadar düşük olur.

Belirli bir cihazın dokunma etkileri hem titreşim aktüatörünü hem de sürücüsünü kullanır. Aşırı hız ve aktif frenleme özellikleri içeren dokunsal sürücüler, LRA'ların yükselme süresini ve zil sesini azaltarak daha duyarlı ve net bir titreşim sağlar.

Cihazlarda varsayılan dalga sönümleme

Özel bir dalga biçimi deseninin genel bir cihazda nasıl davrandığını açıklamak için aşağıdakileri göz önünde bulundurun:

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

Aşağıdaki grafiklerde, önceki kod snippet'lerine karşılık gelen giriş dalga biçimi ve çıkış ivmesi gösterilmektedir. Desende genlikte ani bir değişiklik olduğunda (yani 0 ms, 150 ms, 200 ms, 250 ms ve 700 ms'de) ivmenin aniden değil, kademeli olarak arttığını unutmayın. Ayrıca, her bir adım amplitüdü değişikliğinde aşırı aşma vardır ve giriş amplitüdü aniden 0'a düştüğünde en az 50 ms süren görünür bir zil sesi vardır.

Adım işlevi giriş dalga biçiminin grafiği.
Seviyeler arasında daha organik geçişler gösteren, gerçek ölçülen dalga biçiminin grafiği.

İyileştirilmiş dokunma deseni

Aşırı aşmayı önlemek ve zil çalmasını azaltmak için genlikleri daha kademeli olarak değiştirin. Aşağıda, düzeltilen sürümün dalga biçimi ve hızlandırma çizelgeleri gösterilmektedir:

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

Ek adımlar içeren giriş dalga biçiminin grafiği.
Daha yumuşak geçişleri gösteren, ölçülen dalga biçiminin grafiği.

Daha karmaşık dokunma efektleri oluşturma

Tatmin edici bir tıklama yanıtındaki diğer öğeler daha karmaşıktır ve cihazda kullanılan LRA hakkında bilgi sahibi olmayı gerektirir. En iyi sonuçlar için cihazın önceden oluşturulmuş dalga formlarını ve platform tarafından sağlanan sabitleri kullanın. Bu sayede şunları yapabilirsiniz:

  • Net efektler ve ilkel öğeler kullanın.
  • Yeni dokunma etkileri oluşturmak için bunları birleştirin.

Bu önceden tanımlanmış dokunma sabitleri ve primitifleri, yüksek kaliteli dokunma efektleri oluştururken işinizi büyük ölçüde hızlandırabilir.