Parçalara ayrılmış doğrusal zarf (PWLE) efektleri, zaman içindeki titreşim sıklığını ve ivmeyi tanımlayan nokta dizileridir. PWLE'ler daha zengin ve daha dinamik dokunma geri bildirimi sunar.
Android 16 ve sonraki sürümler, PWLE efektleri oluşturmaya yardımcı olmak için iki uygulama geliştirici API'si sağlar:
- Temel PWLE API: Basit ancak sınırlamaları vardır. Hızlı bir başlangıç yapmak için idealdir. Bu dokümana
BasicEnvelopeBuilder
adresinden ulaşabilirsiniz. - Gelişmiş PWLE API: Daha fazla kontrol ve esneklik sağlar. Dokunma teknolojisi bilgisi ve donanım hakkında bilgi sahibi olmayı gerektirir.
WaveformEnvelopeBuilder
adresinden ulaşabilirsiniz.
Bu API'leri desteklemek için cihazların aşağıdaki HAL API'lerini uygulaması gerekir:
- Sıklıktan çıkış hızına eşleme (FOAM): Cihaz için titreşim sıklığının, elde edilebilecek maksimum çıkış hızıyla eşlenmesini sağlar.
- PWLE oluşturma: Titreşim dalga biçiminin PWLE'si tarafından tanımlanan bir titreşim çalar.
Temel PWLE API
Geliştiriciler, donanıma veya insan algılamasının ayrıntılarına girmeden PWLE efektleri oluşturmanın hızlı bir yolu olarak 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ü temsil eder. Örneğin, 0,5 değeri cihaz tarafından elde edilebilecek 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 çiftinden) yeni noktaya geçiş için geçen süredir (milisaniye cinsinden).
Aşağıda, 500 ms boyunca yoğunluğu düşük perdeden yüksek perdeye kadar maksimum güçte titreşime çıkaran ve ardından 100 ms boyunca 0'a (kapalı) düşüren örnek bir dalga biçimi 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 dokunma deneyimi oluşturmak için PWLE efektleri 0,0 yoğunlukta başlayıp 0,0 yoğunlukta bitmelidir. API, başlangıç yoğunluğunu 0 olarak sabitleyerek bunu zorunlu kılar ve bitiş yoğunluğu 0 değilse bir istisna atar. Bu kısıtlama, kullanıcının dokunma algısını olumsuz yönde etkileyebilecek genlikteki kesintilerden dolayı titreşimlerde istenmeyen dinamik etkileri önler.
Android ekosisteminde tutarlı PWLE efekti oluşturma işlemini sağlamak için çerçeve, bu özelliği destekleyen cihazların PWLE noktaları arasında en az 10 ms ve PWLE efektleri için en az 16 nokta süresini işleyebilmesini gerektirir. Bu şartlar, VTS testleri ile zorunlu kılınarak Android cihazlarda güvenilir PWLE efektleri sağlanmasına yardımcı olur.
Gelişmiş PWLE API
Dokunma teknolojisi konusunda ileri düzey bilgi sahibi geliştiriciler, PWLE efektlerini şu ölçütleri kullanarak tanımlayabilir:
- [0, 1] aralığındaki amplitüd değeri, cihaz FOAM'ı tarafından belirlenen belirli bir frekansta elde edilebilecek gücü temsil eder. Örneğin, 0,5 değeri, belirli bir frekansta elde edilebilecek maksimum çıkış ivmesinin yarısını oluşturur.
- Sıklık doğrudan Hertz cinsinden belirtilir.
- Süre, son PWLE noktasından yenisine geçiş için geçen süredir (milisaniye cinsinden).
Aşağıda, bir titreştiriciyi 100 ms boyunca 120 Hz'de kapalı konumdan tam genliğe kadar kademeli olarak artıran, bu durumu 200 ms boyunca sabit tutan ve ardından 100 ms boyunca tekrar düşüren örnek bir dalga biçimi 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 genlik başlangıç noktası ekler.
Geliştiriciler, PWLE efektlerinde belirttikleri sıklık değerinin cihazın FOAM'ı tarafından tanımlanan cihazın desteklenen aralığına uymasını sağlamaktan sorumludur. Değerler bu sınırları aşarsa cihaz titreşim çaldırmaz.
Çıkış hızlandırması için sıklık eşleme (FOAM)
Bir cihazın çıkış hızlandırma özelliklerini gösteren frekansın doğru şekilde temsil edilmesi, PWLE API'lerinin desteklenmesi için gereklidir. 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ını (FOAM) çıkış için bir frekans sağlaması gerekir. FOAM, HAL tarafından oluşturulan bir veri yapısıdır. Bu yapı, titreşim frekansını (Hertz cinsinden) aktüatörün bu frekansta ulaşabileceği maksimum çıkış ivmesiyle (G tepe değeri cinsinden) eşleştirir. Bu harita, desteklenen frekans aralığı için titreşim çıkışının nasıl değiştiğini anlamak ve temel PWLE API'yi tanımlamak açısından çok önemlidir.
Aşağıdaki grafikte, motoru korumak için giriş voltajının rezonans frekansı etrafında sınırlandırıldığı tipik bir rezonanslı aktüatör için FOAM örneği gösterilmektedir:
Şekil 1. Tipik bir rezonanslı 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ılama ölçeğinde çalışır. Bu değerler daha sonra FOAM'daki çıkış ivme değerleri kullanılarak donanım frekansı ve genlik parametreleriyle eşlenir. Bu eşleme, dokunma etkilerinin donanım özelliklerine göre oluşturulmasını sağlar. Keskinlik aralığı, minimum algılanabilir eşik ile tanımlanır ve cihazın kullanıcıların hissedebileceği dokunma etkileri üretebileceği sıklıklara karşılık gelir. Çerçeve, seçilen sıklıktaki hedef çıkış ivmesine göre yoğunluk değerlerini genlikle eşler. Bu sayede, cihazın kapasitesi dahilinde kalarak seçilen yoğunluk seviyesine ulaşılabilir.
- Donanım özelliklerini gösterme: FOAM,
VibratorFrequencyProfile
içinde geliştiricilere gösterilir ve cihazın bazı dokunma özelliklerini ayrıntılı olarak açıklayan çıkış hızlandırma veri kümesinin tamamını sağlar. 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ını sağlar.
FOAM ve temel PWLE API
FOAM, titreşim efektlerini şekillendirmede önemli bir rol oynar. Temel zarf API'si için keskinlik aralığını hesaplamak amacıyla kullanılır ve titreşimlerin kullanıcı tarafından algılanmasını sağlar. Bu aralık, çıkış ivmesinin her bir frekans için insan algılama eşik değerinin (yani minimum algılanabilir seviye) en az 10 dB üzerinde olduğu frekanslara karşılık gelir. Bu sayede titreşimlerin hissedilebilecek kadar güçlü olması sağlanır.
Ayrıca çerçeve, temel PWLE API'de 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 dokunma geri bildirimi üretmenize yardımcı olur.
VTS testleri, zarfla ilgili efektleri destekleyen cihazların algılanabilir titreşimler üreten boş olmayan bir frekans aralığına sahip olmasını sağlamak için uygulanır. Bu sayede cihaz, kullanıcılar tarafından net bir şekilde hissedilecek kadar yoğunlukta titreşimler üretebilir.
FOAM ve gelişmiş PWLE API
FOAM, VibratorFrequencyProfile
tarafından aşağıdaki bilgilerle geliştiricilere sunulur:
- Frekans aralığı: Geliştiriciler, sırasıyla
getMinFrequencyHz
vegetMaxFrequencyHz
değerlerini kullanarak cihazın desteklenen minimum ve maksimum frekanslarını Hertz cinsinden alabilir. - Maksimum çıkış ivmesi: Cihazın ulaşabileceği maksimum çıkış ivmesi (G cinsinden)
getMaxOutputAccelerationGs
üzerinden kullanılabilir. - Sıklıktan çıkış hızlandırma eşlemesi:
getFrequenciesOutputAcceleration
, HAL'de uygulandığı şekilde sıklıktan çıkış hızlandırma eşlemesini sağlar.
Geliştiriciler, gelişmiş PWLE API ile zarf efektleri oluştururken bu bilgileri kullanabilir. Örneğin, çıkış ivmesini (G cinsinden) belirtirken bunu cihazın maksimum çıkış ivmesine göre [0,0; 1,0] aralığında 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 titreşim cihazı için güvenli olması ve cihazın kapasitesini aşmaması önemlidir.
İnsan algısı algılama eşiği
İnsan algılama eşik değeri, bir kişinin güvenilir bir şekilde algılayabileceği titreşimin minimum ivmesini ifade eder. Bu seviye, titreşim sıklığına göre değişir.
Aşağıdaki grafikte, insanlıktaki dokunma algılama eşik değeri1, zamansal frekansın bir işlevi olarak ivmelenme cinsinden gösterilmektedir:
Şekil 2. İnsan dokunma algısı algılama eşiği.
Kullanıcıların dokunma etkilerini tutarlı bir şekilde hissetmesi için VTS testleri, sarmalayıcı özelliklerine sahip cihazların, insan algılama eşik değerini 10 dB aşan titreşim genlikleri üretebilecek bir frekans aralığına sahip olduğunu doğrular.
Algılanan titreşim yoğunluğu ve titreşim ivmesi genliği
İnsanların titreşim yoğunluğu algısı (algı ölçümü), titreşim genliğiyle (fiziksel parametre) doğrusal olarak artmaz. PWLE API, bir tasarımcı veya geliştiricinin titreşim gücündeki değişiklikleri düşündüğünde, algılanan yoğunluğun bir PWLE'yi takip etmesini beklediğini varsayar. Algılanan yoğunluk, aynı frekansta algılama eşiğinin dB üzerinde olarak tanımlanan duyum düzeyi (SL) ile karakterize edilir. Bu nedenle, titreşim ivmesi genliği (G tepesinde) 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 grafikte ordinata boyunca değer) toplamıdır.
Bu sayede PWLE API, algılanan yoğunluğun art arda gelen kontrol noktası çiftleri arasında doğrusal olarak değişmesini sağlar.
Aşağıdaki grafikte, 10, 20, 30, 40 ve 50 dB SL'de titreşim ivme seviyeleri2 ile birlikte, zamansal frekansın bir işlevi olarak insan dokunma algısı algılama eşiği (0 dB SL) gösterilmektedir.
Şekil 3. Titreşim hızlanma seviyeleri.
Maksimum çıkış hızlandırma eğrisi için frekansı belirleme
Bu bölümde, cihazdan FOAM verilerini oluşturmak için kullandığınız maksimum çıkış ivmesi eğrisinin sıklığının nasıl elde edileceğine dair genel bir kılavuz sağlanmaktadır.
Maksimum voltaj eğrisini (V) elde edin
V
, titreşörün çalışma frekansı aralığında güvenli bir şekilde uygulanabilecek maksimum voltajdır. Bu sayede titreşimlerin güvenli sınırlar içinde çalışması sağlanı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 pik değeriyle 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
: Dokunma motoruna uygulanan gerçek voltaj seviyesi
BLsys
: Titreşim motorunun manyetik alan kuvveti (B
) ile iletken uzunluğunun (L
) çarpımı
Loc_coeff
: Modül düzeyindeki hızlandırmayı telefon düzeyindeki hızlandırmaya dönüştürmek için konum katsayısı
Rsys
: Titreşim motoru bobininin elektriksel direnci
MPhone
: Cihazın kütlesi (ör. telefon)
w
: Tahrik sinyalinin açısal frekansı (saniye başına radyan), şu şekilde hesaplanır:
\(w = 2 \pi f\)
Psys_abs
: İkinci dereceden bir kütle, sönümleyici ve yay sisteminin genlik yanıtı. Aşağıdaki şekilde hesaplanır:
\(\text{Psys_abs} = (\text{Wnsys}^2-w^2)^2+({w}\times(\text{Wnsys}/\text{Qsys}))^2\)
Wnsys
: Titreşimli sistemin doğal frekansı
Qsys
: Titreşimli sistemin 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 hızlanma ölçümlerini eşdeğer telefon düzeyindeki hızlanma ölçümlerine dönüştürmek için kullanılır. Telefon düzeyinde, modül hareketinin açısal ivmesi nedeniyle ivme artar 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 biriminde alır. Bu nedenle HAL'in, FOAM verilerini oluştururken frekans birimini saniyede radyan yerine Hertz'e 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ğrinizde ilgili maksimum voltajıV(f)
bulun. - Yukarıdaki denklemi kullanarak
Vsys
yerineV(f)
vew
yerine ilgilif
değerini koyarak bu frekansta maksimum ivmeyi hesaplayın. Bu sayedeM(V(f), f)
elde edersiniz. - Bu hesaplanan ivme,
FOAM(f)
değerinizdir.
FOAM verilerini gösterme
FOAM eğrisi oluşturulduktan sonra HAL, eğriyi FrequencyAccelerationMapEntry
nesnelerinin listesi olarak gösterir. Her giriş, eşlemede bir nokta tanımlar. Bu nokta, bir frekansı (Hertz cinsinden) ve buna karşılık gelen maksimum çıkış ivmesini (G tepe değeri cinsinden) belirtir.
FOAM'ın çözünürlüğü için katı şartlar olmasa da eğrileri tek bir maksimum zirveyle tanımlamanızı öneririz. Titreşim efektlerini haritalamak için temel zarf API'sinde yalnızca ilk tepe kullanılır. Ara hızlanma değerlerini belirlerken doğrusal enterpolasyonun doğruluğunu optimize etmek için zirvenin etrafında yüksek frekanslı bir çözünürlük tanımlamanızı öneririz. Örneğin, pik frekansın +/- 10 Hz aralığında 1 Hz 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 cihazın PWLE özelliklerini sorgulamak üzere HAL API'leri bulunur. Bu yöntemler, minimum veya maksimum PWLE ilkel süresi ve PWLE kompozisyonunda izin verilen ilkel sayısı gibi cihazın sınırlamaları 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
: Basit PWLE'ler için izin verilen minimum süreyi milisaniye cinsinden alır.getPwleV2PrimitiveDurationMaxMillis
: Basit PWLE'ler için izin verilen maksimum süreyi milisaniye cinsinden alır.getPwleV2CompositionSizeMax
:IVibrator.composePwleV2
tarafından desteklenen maksimum PWLE primitif sayısını alır.
Bu bilgiler, özellikle gelişmiş PWLE API'yi kullanırken geliştiricilerin efektlerini hedef cihazın belirli özelliklerine göre uyarlamalarına olanak tanımak için geliştiricilere sunulur.
Çerçeve, temel API ile oluşturulan efektleri işlerken de bu API'leri kullanır. Bir efekt cihazın sınırlarını aşarsa (örneğin, çok fazla PWLE noktası veya maksimum süreyi aşan bir süre) çerçeve, efekti izin verilen sınırlara sığacak şekilde otomatik olarak ayarlar. Bu ayarlama süreci, tasarımın orijinal amacını ve hissini mümkün olduğunca korumaya çalışır.
-
Eşik verileri, Bolanowski Jr., S. J., et al.. "Dört kanal, dokunmanın mekanik yönlerini yönetir." Journal of the Acoustical Society of America 84(5): 1680-1694 (1988). Bu online eğitim, ivme genliği ile yer değiştirme genliği arasındaki dönüşümü açıklar. ↩
-
Veriler, Verrillo, R.'deki 8. Şekil'den tahmin edilmiştir. T., ve diğerleri. "Titreme dokunma uyaranlarının duyum büyüklüğü." Perception & Psychophysics 6: 366-372 (1969). ↩