Parçalı doğrusal zarf (PWLE) efektleri, zaman içinde titreşim frekansını ve ivmeyi tanımlayan nokta dizileridir. PWLE'ler daha zengin ve daha dinamik dokunsal geri bildirim sunar.
Android 16 ve sonraki sürümlerde PWLE efektleri oluşturmaya yardımcı olan iki uygulama geliştirici API'si bulunur:
- Temel PWLE API: Basit ancak sınırlamaları var. Hızlı bir başlangıç için idealdir. Bu özellik,
BasicEnvelopeBuilder
adresinde kullanılabilir. - Gelişmiş PWLE API'si: Daha fazla kontrol ve esneklik sunar. Dokunsal geri bildirim bilgisi ve donanım konusunda biraz deneyim gerektirir.
WaveformEnvelopeBuilder
adresinde kullanılabilir.
Bu API'leri desteklemek için cihazların aşağıdaki HAL API'lerini uygulaması gerekir:
- Çıkış hızlanması eşlemesi sıklığı (FOAM): Cihaz için titreşim sıklığının elde edilebilecek maksimum çıkış hızlanmasıyla eşlemesini sağlar.
- PWLE oluşturma: Titreşim dalga biçiminin PWLE'si tarafından tanımlanan bir titreşimi oynatır.
Basic PWLE API
Donanım veya insan algısının ayrıntılarına girmeden PWLE efektleri oluşturmanın hızlı bir yolu için geliştiriciler, aşağıdaki parametreler kullanılarak tanımlanan temel PWLE API'yi kullanabilir:
- [0, 1] aralığındaki yoğunluk değeri, titreşimin algılanan gücünü gösterir. Örneğin, 0,5 değeri, cihazın ulaşabileceği küresel maksimum yoğunluğun yarısı olarak algılanır.
- [0, 1] aralığındaki keskinlik değeri, titreşimin netliğini gösterir. Düşük değerler daha yumuşak titreşimlere, yüksek değerler ise daha keskin bir hisse neden olur.
- Süre, son PWLE noktasından (yani yoğunluk ve keskinlik çifti) yenisine geçiş için geçen süredir (milisaniye cinsinden).
Aşağıda, 500 ms boyunca düşük perdeden yüksek perdeye maksimum titreşim gücüne ulaşan ve ardından 100 ms boyunca 0'a (kapalı) düşen bir dalga formu örneği verilmiştir:
VibrationEffect effect = new VibrationEffect.BasicEnvelopeBuilder()
.setInitialSharpness(0.0f)
.addControlPoint(1.0f, 1.0f, 500)
.addControlPoint(0.0f, 1.0f, 100)
.build();
Kısıtlamalar
Sorunsuz ve kesintisiz bir dokunsal deneyim oluşturmak için PWLE efektleri 0.0 yoğunlukla başlamalı ve bitmelidir. API, başlangıç yoğunluğunu 0 olarak sabitleyerek bunu zorunlu kılar ve bitiş yoğunluğu 0 değilse istisna oluşturur. Bu kısıtlama, genlikteki süreksizlikler nedeniyle titreşimlerde istenmeyen dinamik efektlerin oluşmasını önler. Bu efektler, kullanıcının dokunsal algısını olumsuz etkileyebilir.
Android ekosisteminde tutarlı PWLE efekti oluşturulmasını sağlamak için bu özelliği destekleyen cihazların, PWLE noktaları arasında minimum 10 ms süre ve PWLE efektleri için en az 16 nokta işleyebilmesi gerekir. Bu şartlar, VTS testleri ile uygulanır ve Android cihazlarda güvenilir PWLE efektleri elde edilmesine yardımcı olur.
Advanced PWLE API
Dokunsal geri bildirim konusunda ileri düzeyde bilgi sahibi olan geliştiriciler, şu ölçütleri kullanarak PWLE efektlerini tanımlayabilir:
- [0, 1] aralığındaki genlik değeri, cihazın FOAM'ı tarafından belirlenen, belirli bir frekansta elde edilebilecek gücü gösterir. Örneğin, 0,5 değeri, belirli bir frekansta elde edilebilecek maksimum çıkış hızlanmasının yarısını üretir.
- Frekans doğrudan Hertz cinsinden belirtilir.
- Süre, son PWLE noktasından yeni noktaya geçiş için geçen süredir (milisaniye).
Aşağıda, 100 ms boyunca 120 Hz'de titreşimi kapalıdan tam genliğe çıkaran, 200 ms boyunca bu durumu koruyan ve ardından 100 ms boyunca tekrar düşüren bir dalga biçimi örneği verilmiştir:
VibrationEffect effect = new VibrationEffect.WaveformEnvelopeBuilder()
.addControlPoint(1.0f, 120f, 100)
.addControlPoint(1.0f, 120f, 200)
.addControlPoint(0.0f, 120f, 100)
.build();
Kısıtlamalar
Çerçeve, geliştirici tarafından sağlanan istenen frekans ve genlik değerlerini değiştirmez ancak sorunsuz bir geçiş sağlamak için 0 genlikli bir başlangıç noktası ekler.
Geliştiriciler, PWLE efektlerinde belirtilen frekansın, cihazın FOAM'ı tarafından tanımlanan ve cihazın desteklediği aralıkta olmasını sağlamaktan sorumludur. Değerler bu sınırları aşarsa cihaz titremez.
Çıkış hızlanma eşlemesi sıklığı (FOAM)
PWLE API'lerini desteklemek için bir cihazın hızlanma çıkışı özelliklerinin frekansının doğru şekilde gösterilmesi gerekir. Bu bölümde, bu verilerin önemi, PWLE API'leri tarafından nasıl kullanıldığı ve oluşturulma süreci ayrıntılı olarak açıklanmaktadır.
Eşlemeyi anlama
PWLE efektlerini destekleyen cihazların, hızlandırma haritası (FOAM) çıkışı için bir frekans sağlaması gerekir. FOAM, titreşim frekansını (Hertz cinsinden) aktüatörün o frekansta elde edebileceği maksimum çıkış ivmesine (G cinsinden) eşleyen, HAL tarafından oluşturulan bir veri yapısıdır. Bu harita, desteklenen frekans aralığında titreşim çıkışının nasıl değiştiğini anlamak ve temel PWLE API'sini tanımlamak için çok önemlidir.
Aşağıdaki grafikte, motoru korumak için giriş voltajı rezonans frekansı civarında sınırlandırılmış tipik bir rezonans aktüatör için FOAM örneği gösterilmektedir:
1. şekil. Tipik bir rezonans aktüatörü için FOAM örneği.
FOAM üç temel amaca hizmet eder:
- Tam frekans aralığını tanımlama: FOAM, desteklenen minimum ve maksimum titreşim frekanslarını belirterek cihazın tam frekans aralığını tanımlar.
- Yoğunluk ve keskinlik değerlerini tanımlama: Temel PWLE API, yoğunluk ve keskinlik için insan algısı ölçeğinde çalışır. Bu değerler daha sonra FOAM'deki çıkış hızlandırma değerleri kullanılarak donanım frekansı ve genlik parametreleriyle eşlenir. Bu eşleme, dokunsal efektlerin donanım özelliklerine göre oluşturulmasını sağlar. Keskinlik aralığı, algılanabilir minimum eşik ile tanımlanır ve cihazın, kullanıcıların hissedebileceği dokunsal efektler üretebileceği frekanslara karşılık gelir. Çerçeve, seçilen frekanstaki hedef çıkış ivmesine göre yoğunluk değerlerini genlikle eşler. Bu, cihazın özelliklerini aşmadan seçilen yoğunluk düzeyine ulaşılmasını sağlar.
- Donanım özelliklerini kullanıma sunma: FOAM, geliştiricilere
VibratorFrequencyProfile
içinde sunulur. Bu sayede, cihazın dokunsal özelliklerinden bazılarını ayrıntılı olarak açıklayan hızlanma veri kümesi oluşturmak için gereken tüm frekans sağlanır. Bu veriler, gelişmiş PWLE API'yi kullanan geliştiricilerin, çerçeve tarafından tanımlanan temel yoğunluk ve keskinlik aralıklarının ötesine geçen özel titreşim efektleri oluşturmasına olanak tanır.
FOAM ve temel PWLE API'si
FOAM, titreşim efektlerini şekillendirmede önemli bir rol oynar. Temel zarf API'sinin keskinlik aralığını hesaplamak için kullanılır. Böylece titreşimlerin kullanıcı tarafından algılanması sağlanır. Bu aralık, her frekans için çıkış hızlanmasının, insan algısı tespit eşiğinin (yani minimum algılanabilir seviye) en az 10 dB üzerinde olduğu frekanslara karşılık gelir. Bu, titreşimlerin hissedilebilecek kadar güçlü olmasını sağlar.
Ayrıca çerçeve, temel PWLE API'sinde kullanılan yoğunluk ve keskinlik değerlerini, karşılık gelen genlik ve frekans değerleriyle eşlemek için FOAM verilerini kullanır. Bu eşleme, farklı cihazlarda algılanabilir dokunsal geri bildirim üretilmesine yardımcı olur.
Zarf efektlerini destekleyen cihazların, algılanabilir titreşimler üreten boş olmayan bir frekans aralığına sahip olmasını sağlamak için VTS testleri uygulanır. Bu, cihazın kullanıcılar tarafından net bir şekilde hissedilebilecek kadar yoğun titreşimler üretmesini sağlar.
FOAM ve gelişmiş PWLE API'si
FOAM, VibratorFrequencyProfile
tarafından geliştiricilere aşağıdaki bilgilerle sunulur:
- Frekans aralığı: Geliştiriciler,
getMinFrequencyHz
vegetMaxFrequencyHz
kullanarak cihazın desteklediği minimum ve maksimum frekansları Hertz cinsinden alabilir. - Maksimum çıkış ivmesi: Cihazın ulaşabileceği maksimum çıkış ivmesi (G cinsinden)
getMaxOutputAccelerationGs
üzerinden kullanılabilir. - Çıkış hızlanma eşlemesi sıklığı:
getFrequenciesOutputAcceleration
, HAL'de uygulanan çıkış hızlanma eşlemesi sıklığını sağlar.
Geliştiriciler, gelişmiş PWLE API ile zarf efektleri oluştururken bu bilgileri kullanabilir. Örneğin, bir çıkış ivmesi (G cinsinden) belirtirken bunu cihazın maksimum çıkış ivmesine göre [0,0, 1,0] aralığındaki bir değere normalleştirmeleri gerekir.
Gelişmiş PWLE API ile geliştiriciler tüm frekans aralığını kullanabilir. Bu nedenle, sağlanan FOAM verilerinin vibratör için güvenli olması ve vibratörün özelliklerini aşmaması çok önemlidir.
İnsan algısı algılama eşiği
İnsan algısı algılama eşiği, bir kişinin güvenilir bir şekilde algılayabileceği titreşimin minimum ivmesini ifade eder. Bu seviye, titreşim frekansına göre değişir.
Aşağıdaki grafik, zamansal frekansın bir fonksiyonu olarak ivme cinsinden insan dokunsal algılamasının algılama eşiğini gösterir1:
Şekil 2. İnsanın dokunsal algı eşiği.
Kullanıcıların dokunsal efektleri tutarlı bir şekilde hissedebilmesi için VTS testleri, zarf özelliklerine sahip cihazların, insan algısı algılama eşiğini 10 dB aşan titreşim genlikleri üretebilen bir frekans aralığına sahip olduğunu doğrular.
Algılanan titreşim yoğunluğu ile titreşim hızlanma genliği arasındaki ilişki
Titreşim yoğunluğunun insan algısı (bir algı ölçüsü), titreşim genliğiyle (fiziksel bir parametre) doğrusal olarak artmaz. PWLE API, bir tasarımcı veya geliştirici titreşim gücündeki değişiklikleri düşündüğünde algılanan yoğunluğun PWLE'yi takip etmesini beklediğini varsayar. Algılanan yoğunluk, aynı frekansta algılama eşiğinin üzerindeki dB olarak tanımlanan duyum düzeyi (SL) ile karakterize edilir. Bu nedenle, titreşim ivmesi genliği (G tepe değerinde) aşağıdaki gibi hesaplanabilir:
\(Amplitude(G) =10^\frac{Amplitude(db)}{20}\)
Burada genlik dB, belirli bir frekansta SL ve algılama eşiğinin (aşağıdaki grafikteki ordinat boyunca olan değer) toplamıdır.
Bu şekilde, PWLE API, algılanan yoğunluğun ardışık kontrol noktası çiftleri arasında doğrusal olarak değişmesini sağlar.
Aşağıdaki grafik, 10, 20, 30, 40 ve 50 dB SL'deki titreşim ivmesi seviyelerini2 ve zamansal frekansın bir fonksiyonu olarak insan dokunsal algılaması tespit eşiğini (0 dB SL) göstermektedir.
3.Şekil Titreşim hızlanma düzeyleri.
Maksimum çıkış hızlanma eğrisinin sıklığını belirleme
Bu bölümde, FOAM verilerini oluşturmak için kullandığınız cihazdan maksimum çıkış hızlanma eğrisinin sıklığını elde etme hakkında genel bir yönerge verilmektedir.
Maksimum voltaj eğrisini (V) elde edin.
V
, titreşime yol açan cihaza çalışma frekansı aralığında güvenli bir şekilde uygulanabilecek maksimum voltajdır. Bu sayede titreşim motoru güvenli sınırlar içinde çalışır, hasar önlenir ve titreşim çıkışı en üst düzeye çıkarılır.
Donanımda voltaj sınırlama özelliği varsa desteklenen frekans aralığında elde edilebilecek maksimum voltajı doğrudan ölçmek için bu özelliği kullanın.
Maksimum ivmeyi (M) hesaplama
M
, çeşitli yöntemlerle hesaplayabileceğiniz maksimum ivmedir. Bu bölümde, doğrusal rezonanslı aktüatörler (LRA'lar) kullanan cihazlar için bir yöntem gösterilmektedir.
Bu yöntem, belirli bir frekansta uygulanan maksimum voltajı, G tepe değeri olarak ifade edilen karşılık gelen maksimum ivme değerine dönüştürür.
Bu dönüşüm için kullanılan temel denklem şudur:
\(\text{Accel}(w)= (\text{Vsys}\times\text{BLsys}\times\text{Loc_coeff}/\text{Rsys}/\text{MPhone})\times{w^2}/\text{Psys_abs}/{9.81}\)
Nerede:
Vsys
: Haptik aktüatöre uygulanan gerçek voltaj seviyesi
BLsys
: Titreşim motorunun manyetik alan gücü (B
) ve iletken uzunluğunun (L
) çarpımı
Loc_coeff
: Modül düzeyindeki hızlanmayı telefon düzeyindeki hızlanmaya dönüştürmek için kullanılan konum katsayısı
Rsys
: Titreşim motoru bobininin elektriksel direnci
MPhone
: Cihazın kütlesi (örneğin, telefon)
w
: Sürüş sinyalinin açısal frekansı (saniye başına radyan). Aşağıdaki şekilde hesaplanır:
\(w = 2 \pi f\)
Psys_abs
: İkinci dereceden kütle, sönümleyici ve yay sisteminin genlik yanıtı şu şekilde hesaplanır:
\(\text{Psys_abs} = (\text{Wnsys}^2-w^2)^2+({w}\times(\text{Wnsys}/\text{Qsys}))^2\)
Wnsys
: Titreşen sistemin doğal frekansı
Qsys
: Titreşim sisteminin kalite faktörü
Loc_coeff
, telefon düzeyinde ölçülen ivmenin modül düzeyinde ölçülen ivmeye oranıdır. Bu oran, modül düzeyindeki ivme ölçümü değerlerini eşdeğer telefon düzeyi ivme ölçümü değerlerine dönüştürmek için kullanılır. Telefon düzeyinde, modül hareketinin açısal ivmesi nedeniyle ivme yükselir ve bu katsayı, bu tür bir etkiyi hesaba katar. Şu şekilde hesaplanır:
\(\text{Loc_coeff} = \text{phone_acceleration} / \text{module_acceleration}\)
Örneğin, modül ivmesi 1 g ve telefon ivmesi 2,5 g ise Loc_coeff
= 2,5 olur. Bu, 2,5 kat artış olduğunu gösterir.
Android çerçevesi frekansı Hertz birimiyle alır. Bu nedenle, HAL'nin FOAM verilerini oluştururken frekans birimini saniyede radyan cinsinden Hertz cinsine dönüştürmesi gerekir.
FOAM eğrisini oluşturma
FOAM eğrisini belirlemek için maksimum voltaj eğrisini (V
) ve hızlanma hesaplamasını (M
) birleştirin:
- İstediğiniz aralıktaki her frekans (
f
) için, maksimum voltaj eğrinizden karşılık gelen maksimum voltajı (V(f)
) bulun. - Yukarıdaki denklemi kullanarak bu frekanstaki maksimum ivmeyi hesaplayın.
Vsys
yerineV(f)
,w
yerine de ilgilif
değerini kullanın. Bu sayedeM(V(f), f)
. - Bu hesaplanan hızlanma,
FOAM(f)
değerinizdir.
FOAM verilerini kullanıma sunma
FOAM eğrisi oluşturulduktan sonra HAL, eğriyi bir FrequencyAccelerationMapEntry
nesne listesi olarak gösterir. Her giriş, eşlemede bir noktayı tanımlar. Frekansı (Hertz cinsinden) ve buna karşılık gelen maksimum çıkış ivmesini (G cinsinden) belirtir.
FOAM çözünürlüğüyle ilgili katı şartlar olmasa da eğrileri tek bir maksimum tepe noktasıyla tanımlamanızı öneririz. Titreşim efektlerini eşlemek için temel zarf API'sinde yalnızca ilk tepe kullanılır. Ara hızlanma değerleri belirlenirken doğrusal enterpolasyonun doğruluğunu optimize etmek için tepe noktası etrafında yüksek bir frekans çözünürlüğü tanımlamanızı öneririz. Örneğin, tepe frekansının +/- 10 Hz aralığında 1 Hz'lik adımlar kullanın.
Cihaz özellikleri ve sınırlamaları
Android 16 ve sonraki sürümlerde, geliştiricilerin PWLE efektlerini optimize etmelerine ve cihazlar arasında uyumluluğu sağlamalarına yardımcı olmak için Android, cihazın PWLE özelliklerini sorgulamaya yönelik HAL API'leri içerir. Bu yöntemler, cihazın sınırlamaları (ör. minimum veya maksimum PWLE temel süresi ve PWLE kompozisyonunda izin verilen temel sayısı) hakkında bilgi sağlar.
HAL API'leri şunları içerir:
CAP_COMPOSE_PWLE_EFFECTS_V2
: Cihaz bu özelliği desteklediğindeIVibrator.getCapabilities
tarafından döndürülür.getFrequencyToOutputAccelerationMap
: FOAM verilerini alır.getPwleV2PrimitiveDurationMinMillis
: Herhangi bir temel PWLE için izin verilen minimum süreyi milisaniye cinsinden alır.getPwleV2PrimitiveDurationMaxMillis
: Herhangi bir temel PWLE için izin verilen maksimum süreyi milisaniye cinsinden alır.getPwleV2CompositionSizeMax
:IVibrator.composePwleV2
tarafından desteklenen maksimum PWLE temel öğe sayısını alır.
Bu bilgiler, geliştiricilerin özellikle gelişmiş PWLE API'sini kullanırken efektlerini hedef cihazın belirli özelliklerine göre uyarlamasına olanak tanımak için kullanıma sunulur.
Çerçeve, temel API ile oluşturulan efektleri işlerken de bu API'leri kullanır. Bir efekt cihazın sınırlamalarını aşarsa (ör. çok fazla PWLE noktası veya maksimum süreyi aşan bir süre), çerçeve, efekti izin verilen sınırlar içinde kalacak şekilde otomatik olarak ayarlar. Bu ayarlama sürecinde, tasarımın orijinal amacını ve hissini mümkün olduğunca korumaya çalışılır.
-
Eşik verileri, Bolanowski Jr.'ın 1. Şekli'ndeki yer değiştirme eşiğinden dönüştürülür. S. J., et al.. "Dört kanal, dokunmanın mekanik yönlerine aracılık eder." Journal of the Acoustical Society of America 84(5): 1680-1694 (1988). Bu online eğitimde, ivme genliği ile yer değiştirme genliği arasındaki dönüşüm açıklanmaktadır. ↩
-
Veriler, Verrillo, R. tarafından yayınlanan 8. Şekil'den tahmin edilmiştir. T., ve diğerleri. "Vibrotaktil uyarıların duyusal büyüklüğü." Perception & Psychophysics 6: 366-372 (1969). ↩