Parçalı doğrusal zarf efektleri uygulama

Parçalı doğrusal zarf (PWLE) efektleri, titreşim frekansını ve zaman içindeki 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ı olmak için iki uygulama geliştirici API'si bulunur:

  • Temel PWLE API: Basit ancak sınırlamaları vardır. Hızlı bir başlangıç için idealdir. Bu özellik, BasicEnvelopeBuilder adresinde kullanılabilir.
  • Gelişmiş PWLE API: Daha fazla kontrol ve esneklik sunar. Dokunma teknolojisi bilgisi ve donanım konusunda biraz deneyim gerektirir. WaveformEnvelopeBuilder adresinde mevcuttur.

Bu API'leri desteklemek için cihazların aşağıdaki HAL API'lerini uygulaması gerekir:

  • Rezonans frekansı: Aktüatörün rezonans frekansını sağlar.
  • Çı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şimler sağlarken yüksek değerler daha keskin bir his yaratır.
  • 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();

Sınırlamalar

Sorunsuz ve kesintisiz bir dokunsal deneyim oluşturmak için PWLE efektleri 0.0 yoğunlukla başlamalı ve bitmelidir. API, başlangıç harcanan efor düzeyini 0 olarak sabitleyerek bunu zorunlu kılar ve bitiş harcanan efor düzeyi 0 değilse hata verir. 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ı bir PWLE efekti oluşturulmasını sağlamak için çerçeve, bu özelliği destekleyen cihazların PWLE noktaları arasında minimum 20 ms süre ve PWLE efektleri için en az 16 nokta işleyebilmesini gerektirir. Bu şartlar, VTS testleri ile uygulanır ve Android cihazlarda güvenilir PWLE efektleri elde edilmesine yardımcı olur.

Advanced PWLE API

Dokunma teknolojisi konusunda ileri düzeyde bilgi sahibi olan geliştiriciler, aşağıdaki ö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ü temsil eder. Örneğin, 0,5 değeri, belirli bir frekansta elde edilebilecek maksimum çıkış hızı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 azaltan 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();

Sınırlamalar

Ç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 tarafından desteklenen 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, çıkış hızlandırma haritası (FOAM) için bir frekans sağlaması gerekir. FOAM, titreşim frekansını (Hertz cinsinden) bu frekansta aktüatörün ulaşabileceğ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ünün FOAM örneği gösterilmektedir:

Örnek
FOAM

Şekil 1. 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 genliğe 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ümesini 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 efektlerinin şekillendirilmesinde ö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, çıkış ivmesinin insan algısı tespit eşiğinin (yani minimum algılanabilir seviye) 10 dB üzerine ilk kez çıktığı frekanslardan, çıkış ivmesinin bu eşiğin üzerinde son kez çıktığı frekanslara kadar olan frekansları kapsar. Bu aralık, aktüatörün rezonans frekansını içermelidir.

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 geribildirim üretilmesine yardımcı olur.

Zarf efektlerini destekleyen cihazların, algılanabilir titreşimler üreten boş olmayan bir frekans aralığına sahip olmasını ve bu aralığın aktüatörün rezonans frekansını içermesini sağlamak için VTS testleri uygulanır. Bu sayede cihazın, kullanıcılar tarafından net bir şekilde hissedilebilecek kadar güçlü titreşimler üretebilmesi sağlanır.

FOAM ve gelişmiş PWLE API'si

FOAM, geliştiricilere VibratorFrequencyProfile tarafından aşağıdaki bilgilerle sunulur:

  • Frekans aralığı: Geliştiriciler, cihazın desteklediği minimum ve maksimum frekansları Hertz cinsinden almak için sırasıyla getMinFrequencyHz ve getMaxFrequencyHz yöntemlerini kullanabilir.
  • 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'si 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 titreşim motoru için güvenli olması ve ö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ı eşiğini1 göstermektedir:

İnsanın dokunma algısı algılama eşiği

Şekil 2. İnsanın dokunsal algılaması için algılama eşiği.

Kullanıcıların dokunsal efektleri tutarlı bir şekilde hissedebilmesi için VTS testleri, zarf özelliklerine sahip cihazların, titreşim genliklerini insan algısı algılama eşiğini 10 dB aşacak şekilde üretebilen bir frekans aralığına sahip olduğunu doğrular.

Algılanan titreşim yoğunluğu ile titreşim ivmesi 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 harcanan efor düzeyi, 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 değer) toplamıdır.

Bu şekilde, PWLE API, algılanan yoğunluğun ardışık kontrol noktaları 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ı algılama eşiğini (0 dB SL) göstermektedir.

Titreşim ivmesi
seviyeleri

Şekil 3. Titreşim hızlanma düzeyleri.

Maksimum çıkış hızlanma eğrisinin frekansını belirleme

Bu bölümde, FOAM verilerini oluşturmak için kullandığınız cihazdan maksimum çıkış hızlanma eğrisinin frekansı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ığı boyunca 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 ivmeyi telefon düzeyindeki ivmeye dönüştürmek için kullanılan konum katsayısı

Rsys: Titreşim motoru bobininin elektriksel direnci

MPhone: Cihazın kütlesi (ör. 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çer okumalarını eşdeğer telefon düzeyi ivme ölçer okumalarına dönüştürmek için kullanılır. Telefon düzeyinde, modül hareketinin açısal ivmesi nedeniyle ivme yükseltilir 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'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ğrinizden karşılık gelen maksimum voltajı (V(f)) bulun.
  • Yukarıdaki denklemi kullanarak bu frekanstaki maksimum ivmeyi hesaplayın. Vsys yerine V(f) değerini, w yerine de ilgili f değerini kullanın. Bu sayede M(V(f), f).
  • Hesaplanan bu 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şlemedeki bir noktayı tanımlar ve bir frekansı (Hertz cinsinden) ve buna karşılık gelen maksimum çıkış ivmesini (G cinsinden) belirtir.

Ara hızlanma değerleri belirlenirken doğrusal enterpolasyonun doğruluğunu optimize etmek için maksimum çıkış hızlanmasına sahip frekansın etrafında yüksek frekanslı bir çözünürlük tanımlamanızı öneririz. Örneğin, bu frekansı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ğinde IVibrator.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 efektlerini hedef cihazın belirli özelliklerine göre uyarlamasına olanak tanımak için (özellikle gelişmiş PWLE API'si kullanılırken) 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ı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.


  1. Eşik verileri, Bolanowski Jr.'ın Şekil 1'indeki yer değiştirme eşiğinden dönüştürülür. S. J., et al.. "Dört kanal, dokunmanın mekanik yönlerini düzenler." 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. 

  2. Veriler, Verrillo, R. (2012) adlı çalışmadaki Şekil 8'den tahmin edilmiştir. T., ve diğerleri. "Vibrotaktil uyarıların duyusal büyüklüğü." Perception & Psychophysics 6: 366-372 (1969).