Tutti i miglioramenti al framework Android basati sulla tecnologia aptica sono basati sulla tecnologia una serie di principi relativi all'esperienza utente che si evolvono a parità di ritmo. Lo stato attuale principi prevedono la sostituzione della vibrazione vivace con una funzione aptica chiara. esplorando la strana tecnologia aptica avanzata.
Figura 1. Principi attuali
La tabella seguente elenca tutte le API aptica disponibili.
API | Metodi | Anno di aggiunta |
---|---|---|
android.view.HapticFeedbackConstants |
|
Prima del 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
android.View |
|
Prima del 2016 |
android.os.Vibratore |
|
Prima del 2016 |
|
2017 (Android 8) | |
|
2020 (Android 11) | |
EffettoVibrazione |
|
2017 (Android 8) |
|
2019 (Android 10) | |
android.os.EffettoVibrazione.Composizione |
|
2020 (Android 11) |
android.media.AudioAttributes.Builder |
|
2019 (Android 10) |
Vibrazione vivace
Ricorrenti a cercapersone e feature phone, sistemi ERM di bassa qualità ma ad alta efficienza energetica le vibrazioni basate su buzzer sostituiscono le vibrazioni uditive modalità silenziosa. I componenti hardware legacy che producono rumori e rumori fastidiosi i rumori udibili possono danneggiare la UX aptica generando impressioni di bassa qualità (ad ad esempio un telefono rotto e economico).
Cancella feedback aptico
La modalità aptica chiara supporta la sensazione di cambiamenti di stato discreti (ad esempio, modifiche binarie durante il processo di accensione/spegnimento). Data la natura dei invito discreto, feedback aptico chiaro vengono generati come una singola entità (ad ad esempio un effetto aptico per un evento di input).
Android punta a offrire una tecnologia aptica chiara con sensazioni forti ma nitide, piuttosto che di sensazioni vivaci o molle.
Le costanti aptiche predefinite create per supportare la tecnologia aptica chiara includono: per eseguire le operazioni indicate di seguito.
CLOCK_TICK
CONFIRM
CONTEXT_CLICK
GESTURE_END
GESTURE_START
KEYBOARD_PRESS
KEYBOARD_RELEASE
KEYBOARD_TAP
LONG_PRESS
REJECT
TEXT_HANDLE_MOVE
VIRTUAL_KEY
VIRTUAL_KEY_RELEASE
Tra
VibrationEffect
:
EFFECT_CLICK
EFFECT_DOUBLE_CLICK
EFFECT_HEAVY_CLICK
EFFECT_TICK
Creare una conoscenza comune tra produttori e sviluppatori di dispositivi è la chiave aumentando la qualità complessiva della tecnologia aptica nell'ecosistema Android. Utilizza la elenco di controllo di base, per la valutazione dell'hardware, e CDD. per scoprire di più sull'implementazione della tecnologia aptica.
Figura 3. Premere e rilasciare.
Tecnologia aptica avanzata
La Tecnologia aptica avanzata è una categoria di tecnologia aptica in crescita che va oltre il singolo effetti basati sugli impulsi. Android mira a supportare una tecnologia aptica avanzata con la componibilità e l'adeguabilità con un piccolo livello di granularità. Le seguenti sono supportati in Android 11 o versioni precedenti.
Figura 4. Tecnologia aptica avanzata con texture scorrevole
Figura 5. Trascinamento e scorrimento
Caso d'uso 1: texture a scorrimento
Se si ripete un effetto aptico mentre il dito scorre su una superficie touch (ad ad esempio trascinare, scorrere ed esplorare la superficie con texture aptica fantasma), gli effetti aptici ripetuti sono preferibilmente nitidi e delicati.
Se il singolo effetto è vivace anziché cristallino, gli intervalli tra le ripetizioni verranno probabilmente cancellate. Il risultato è un lungo passaparola, piuttosto rispetto a più indicatori discreti.
Se l'ampiezza non è abbastanza sottile, l'energia aptica percepita si accumula. ripetizioni, generando una feedback aptico incredibilmente forte alla fine la ripetizione.
Implementa una texture aptica superficiale semplice per i gesti di scorrimento e trascinamento
Utilizza CLOCK_TICK
e TEXT_HANDLE_MOVE
in
HapticFeedbackConstants
Queste costanti predefiniscono le caratteristiche di ripetizione e ampiezza.
Crea il tuo effetto
Per creare un effetto personalizzato, componi un design unendo sequenze
di PRIMITIVE_CLICK
e PRIMITIVE_TICK
in
VibrationEffect.Composition
Puoi regolare le caratteristiche della scala di ripetizione e ampiezza
utilizzando addPrimitive(int primitiveID, float scale, int delay)
. L'assistenza si basa su
il
CAP_COMPOSE_EFFECTS
funzionalità dei
Interfaccia Vibrator HAL.
Caso d'uso 2: vibrazione lunga con effetto facilitato
La vibrazione lunga è una vibrazione di ampiezza fluida che passa da 0 a ampiezza target. La vibrazione lunga può generare un'attenzione facilmente percepibile tecnologia aptica. Tuttavia, un'improvvisa vibrazione lunga può spaventare gli utenti in un ambiente silenzioso dell'ambiente circostante e spesso produce rumori forti. Per generare un altro vibrazione prolungata, applica l'effetto di facilitazione all'inizio del vibrazione. Questo produce una transizione di ampiezza fluida che si avvicina ampiezza target.
Applicare l'effetto di variazione
Verifica le funzionalità hardware del controllo dell'ampiezza con
android.os.Vibrator.hasAmplitudeControl()
- Il risultato deve essere
true
per produrre un effetto di variazione con ampiezza variabile.
- Il risultato deve essere
Utilizza le funzionalità di
VibrationEffect
.createWaveform(timings[], amplitudes[], int repeat)
Modifica le serie di
timings[]
eamplitudes[]
per generare di variazione della velocità, come mostrato nella Figura 6.
Figura 6. Curva di variazione della vibrazione lunga
Caso d'uso 3: feedback aptico con accoppiamento audio
La funzione aptica con accoppiamento audio è uno schema aptico accoppiato al ritmo dell'audio. per attirare l'attenzione dell'utente.
Tecnologia aptica con accoppiamento audio: vantaggi
Per implementare la tecnologia aptica con accoppiamento audio, combina una tecnologia aptica chiara con vibrazioni lunghe. Le sensazioni aptiche forti ma brevi della tecnologia aptica chiara offrono una risposta discreta pattern ritmici. Se combinata con gli alti livelli di stimoli che a lungo la vibrazione è un ottimo modo per attirare l'attenzione dell'utente.
È importante considerare gli schemi ritmici delle sensazioni. Se non ha senso ritmo, l'utente percepisce le sensazioni aptiche come vibrazioni casuali e tende per ignorarli.
Figura 7. Esempio di tecnologia aptica di coppia audio
Tecnologia aptica con accoppiamento audio: suggerimenti per l'implementazione
L'implementazione della tecnologia aptica con accoppiamento audio richiede una conoscenza di base dei contenuti la riproduzione dei canali audio e aptici. Tieni presente quanto segue.
Utilizza la
MediaPlayer
oSoundPool
.- Asset in formato OGG con una chiave di metadati speciale
(
ANDROID_HAPTIC
seguito da una serie di canali aptici) indica la presenza di dati aptici e riproduzione conMediaPlayer
eSoundPool
.
- Asset in formato OGG con una chiave di metadati speciale
(
Indica il supporto della tecnologia aptica e della riproduzione audio in
audio_policy_configuration.xml
.- Utilizza un profilo di output con canale aptica
AUDIO_CHANNEL_OUT_HAPTIC_A|B
. - Per uno stream di output con canali aptici, ricorda che la tecnologia aptica vengono presentati come canali aggiuntivi nei dati.
Esempio
Se la maschera del canale per lo stream di output ha il seguente aspetto:
AUDIO_CHANNEL_OUT_STEREO_HAPTIC_A
Quindi ogni campione dovrebbe avere il seguente aspetto:
AUDIO_LEFT_CHANNEL,AUDIO_RIGHT_CHANNEL,HAPTIC_CHANNEL_A
- Utilizza un profilo di output con canale aptica
Modifica
AudioAttributes.Builder( ).setHapticChannelsMuted(boolean muted)
afalse
per riprodurre il canale aptico.- Per impostazione predefinita, i canali aptici sono disattivati (
true
). - I casi d'uso includono suonerie e suoni dell'UI con sincronizzazione sincrona feedback aptico e feedback.
- Per impostazione predefinita, i canali aptici sono disattivati (
Vibrator HAL deve implementare il supporto di controllo esterno.
- Per le implementazioni HIDL, utilizza
setExternalControl(bool enabled) generates (Status status)
- Per le implementazioni AIDL, usa
void setExternalControl(in boolean enabled)
- Per le implementazioni HIDL, utilizza
Figura 8. Implementazione della tecnologia aptica con accoppiamento audio
Feedback aptico con accoppiamento audio: generatore aptico
HapticGenerator
è un Effetto audio
Funzionalità introdotta in Android 12 in grado di generare dati aptici da un canale audio e
e riproducilo in tempo reale usando la funzione di feedback aptico con accoppiamento audio.
L'effetto viene applicato a AudioTrack
come descritto nella Figura 9.
Figura 9. Architettura del generatore aptico
Per assicurarti che l'algoritmo del generatore aptico generi feedback aptico di alta qualità, l'algoritmo di generazione sul motore vibrazione del dispositivo regolando parametri che configurano la catena di filtri che applica alle forme d'onda audio. Questa sezione descrive nel dettaglio questi parametri e spiega come ottimizzarli in base alle specifiche del tuo hardware.
Frequenza di risonanza per il filtro passa banda
La frequenza di risonanza del vibratore è la frequenza con cui un attuatore aptico ha un output massimo. Questo parametro regola l'antirisonatore in modo appiattire la funzione di trasferimento della risposta, in modo da ottenere una larghezza di banda più ampia. Il framework Android collega automaticamente questo valore all'output del Metodo Vibrator HAL
IVibrator.getResonantFrequency
.Il valore predefinito di questo parametro è 150 Hz. Questa opzione può essere modificata codice qui.
Potenza di normalizzazione per busta lenta
Questo parametro determina l'esponente nella normalizzazione parziale (controllo automatico del guadagno). Il suo valore predefinito è -0.8, il che significa che L'80% della variazione della gamma dinamica viene rimosso da questo passaggio di controllo del guadagno. Può essere modificato nel codice qui.
Fattore Q per il filtro interruzione banda
Il fattore di qualità della vibrazione (fattore Q) è determinato da due parametri:
Zero Q, il fattore di qualità degli zeri nel filtro band-stop che annulla parzialmente la risonanza.
Il Polo Q, il fattore di qualità dei poli nel filtro band-stop.
Il rapporto tra questi due valori limita la soppressione della risonanza per per aumentare le frequenze più basse e ampliare la risposta dell'algoritmo. Ad esempio: i valori predefiniti di 8 per Zero Q e 4 per la generazione di Pole Q un rapporto di 2, limitando la soppressione della risonanza di un fattore di 2 (6 dB). Il framework Android collega entrambi i valori all'output di Vibrator HAL
IVibrator.getQFactor
.Se i valori predefiniti non tengono conto dello smorzamento della forza del motore sul dispositivo, ti consigliamo di modificare entrambi i valori contemporaneamente aumentando o diminuendo entrambi. Il rapporto tra Q zero e Q polo deve essere maggiore di 1. Può essere modificato nel codice qui.
Frequenza di angolo per la distorsione
La frequenza agli angoli viene applicata da un filtro passa-basso che elimina vibrazione di basso livello e migliora i livelli più alti utilizzando una distorsione cubica. Il valore predefinito è 300 Hz. Può essere modificato nel codice qui.
Guadagno dell'input e soglia del cubo per la distorsione
Questi parametri vengono utilizzati da un filtro di distorsione non lineare applicato al forma d'onda di input che attenua l'ampiezza dei segnali di frequenza più bassa aumenta quelle con frequenza maggiore.
- Il valore predefinito del fattore di guadagno dell'input è 0,3.
- Il valore predefinito della soglia del cubo è 0.1.
Consigliamo di modificare entrambi i valori insieme. Si trovano nel codice qui
Per ulteriori informazioni sulla funzione applicata da questo filtro, consulta le implementazione disponibile qui. Per saperne di più su come questi due parametri influenzano l'output, consigliamo di tracciare le risposte in frequenza dei filtri e di osservare come le risposte in frequenza cambiano con diversi valori parametro.
Guadagno di output per la distorsione
Questo parametro controlla l'ampiezza finale della vibrazione. È un guadagno finale applicata dopo un limitatore soft che limita le ampiezze della vibrazione a meno di 1. Il suo valore predefinito è 1.5 e può essere modificato nel codice qui. Se la vibrazione è troppo sottile, aumenta il valore. Se riesci a sentire il rumore dell'hardware dell'attuatore, riduci il valore.