分析震動波形

Android 裝置上最常見的震動致動器是線性共振致動器 (LRAs)。LRAs 會模擬按鈕在玻璃表面上點擊時的感受,而玻璃表面不會有任何反應。清晰且明確的點擊回饋信號通常會持續 10 到 20 毫秒。這種感覺可讓使用者互動體驗更自然。對於虛擬鍵盤,這項點擊回饋功能可加快輸入速度並減少錯誤。

LRAs 有幾個常見的共振頻率

  • 部分 LRAs 的共振頻率介於 200 到 300 Hz,這與人類皮膚對振動最敏感的頻率相符。在這個頻率範圍內,震動的感覺通常被形容為平滑、尖銳和穿透。
  • 其他型號的 LRAs 共振頻率較低,約為 150 Hz。這種感覺在質地上較柔軟、更飽滿 (在維度上)。
元件包括 (由上至下) 護套、板、中間磁鐵、2 個側邊磁鐵、質量、2 個彈簧、線圈、軟性電路、底座和黏著劑。
線性諧振致動器 (LRA) 的元件。

在兩種不同頻率下,相同的輸入電壓可能會產生不同的振動輸出幅度。頻率離 LRA 的諧振頻率越遠,振動幅度就越低。

特定裝置的觸覺回饋效果會同時使用震動致動器和驅動程式。包含超速和主動煞車功能的觸覺駕駛器,可縮短 LRAs 的升溫時間和振鈴聲,進而提供更靈敏且清晰的震動效果。

裝置上的預設波形平滑處理

舉例來說,請考慮自訂波形模式在一般裝置上的行為:

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

下列圖表顯示輸入波形和輸出加速度,對應前述程式碼片段。請注意,每當模式中的振幅出現階梯式變化 (即 0ms、150ms、200ms、250ms 和 700ms) 時,加速度會逐漸增加,而非突然增加。在每個振幅階梯變化時,也會出現過衝現象,而且當輸入振幅突然降至 0 時,會出現持續至少 50 毫秒的明顯振鈴聲。

階梯函式輸入波形的圖表。
實際測量波形的圖表,顯示各層之間更自然的轉換。

改善觸覺回饋模式

為避免過度超出並縮短振鈴時間,請更緩慢地變更振幅。以下是修訂版的波形和加速度圖表:

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

含有額外步驟的輸入波形圖表。
繪製測量波形,顯示更流暢的轉換。

建立更複雜的觸覺技術效果

滿意點擊回應中的其他元素則較為複雜,需要對裝置中使用的 LRA 有一定程度的瞭解。為了獲得最佳結果,請使用裝置預先建構的波形和平台提供的常數,以便執行下列操作:

  • 執行清晰效果和基本元素
  • 將這些音效串連起來,組合成新的觸覺效果。

這些預先定義的觸覺常數和基本元素可大幅加快您的工作速度,同時創造高品質的觸覺效果。