Ses Tetikleyici özelliği, uygulamalara kısayollar gibi belirli akustik etkinlikleri düşük güçte ve gizliliğe duyarlı bir şekilde dinleme olanağı sunar. Ses Tetikleyici'nin örnek kullanım alanları Asistan ve Şu Anda Çalanlar'dır.
Bu sayfada, Ses Tetikleyici mimarisine ve HAL (Donanım Soyutlama Katmanı) arayüzüne genel bir bakış sunulmaktadır.
Ses tetikleyici yığını
Ses Tetikleyici alt sistemi, Şekil 1'de gösterildiği gibi katmanlar halinde oluşturulur:
Şekil 1: Ses Tetikleyici yığını
Aşağıdaki listede, Şekil 1'de gösterilen her katman daha ayrıntılı olarak açıklanmıştır:
HAL katmanı (yeşil renkli), Ses Tetikleyici HAL (STHAL) arayüzünü uygulayan tedarikçiye özel kodu içerir.
SoundTriggerMiddleware
(sarı renkli) HAL arayüzünün üzerindedir. HAL ile iletişim kurar ve HAL'i farklı istemciler arasında paylaşma, günlük kaydı oluşturma, izinleri uygulama ve eski HAL sürümleriyle uyumluluğu yönetme gibi işlevlerden sorumludur.SoundTriggerService
(mavi renkli) sistemi, orta katmanın üzerinde yer alır. Telefon ve pil etkinlikleri gibi diğer sistem özellikleriyle entegrasyonu kolaylaştırır. Ayrıca, benzersiz kimliklere göre dizine eklenen ses modelleri veritabanı da tutar.SoundTriggerService
katmanının üzerindeki grup (kahverengi renkte), Asistan'a ve genel uygulamalara özgü özellikleri ayrı ayrı işler.
Ses Tetikleyici paketinin işlevi, akustik tetikleyici etkinliklerini temsil eden ayrı etkinlikler yayınlamaktır. Ses Tetikleyici paketi çoğu durumda sesle ilgilenmez. Tetikleyici etkinlikleri aldıktan sonra uygulamalar, Ses çerçevesi aracılığıyla bir AudioRecord
nesnesi açarak etkinliklerin zaman aralığını kapsayan gerçek ses akışına erişir. Ses Tetikleyici HAL API'leri, Ses Çerçevesi ile kullanılan tetiklenmiş etkinliğin bulunduğu bir tutamak sağlar. Bu nedenle, Sound Trigger HAL ve Audio HAL arka planda bağlı olduğundan genellikle bir işlemi paylaşırlar.
Ses Tetikleyici HAL arayüzü
Ses Tetikleyici HAL (STHAL) arayüzü, Ses Tetikleyici yığınının tedarikçiye özgü kısmıdır ve kısa kelimelerin ve diğer seslerin donanım tarafından tanınmasını yönetir. STHAL, her biri belirli bir ses sınıfını algılamak için tasarlanmış farklı bir algoritma çalıştıran bir veya daha fazla motor sağlar. STHAL bir tetikleyici algıladığında çerçeveye bir etkinlik gönderir ve ardından algılamayı durdurur.
STHAL arayüzü /hardware/interfaces/soundtrigger/
altında belirtilir.
ISoundTriggerHw
arayüzü, belirli bir zamanda bir veya daha fazla algılama oturumunun çalıştırılmasını ve akustik etkinliklerin dinlenmesini destekler.
ISoundTriggerHw.getProperties()
çağrısı, uygulama açıklamasını ve özelliklerini içeren bir Properties
yapısı döndürür.
Oturum oluşturma işleminin temel akışı Şekil 2'de aşağıdaki gibi açıklanmaktadır:
Şekil 2: STHAL durum diyagramı
Aşağıdaki adımlarda her durum ayrıntılı olarak açıklanmıştır:
HAL istemcisi,
loadSoundModel()
veyaloadPhraseSoundModel()
kullanarak bir model yükler. Sağlanan model nesnesi, kullanılacak uygulamaya özgü algılama algoritmasını (motoru) ve bu algoritma için geçerli parametreleri belirtir. Bu yöntemler başarılı olduğunda, sonraki çağrılarda bu modele referans vermek için kullanılan bir tutamaç döndürür.Model başarıyla yüklendikten sonra HAL istemcisi, algılamayı başlatmak için
startRecognition()
işlevini çağırır. Tanımlama, aşağıdaki etkinliklerden biri gerçekleşene kadar arka planda çalışmaya devam eder:- Bu modelde bir
stopRecognition()
çağrısı yapıldı. - Bir algılama gerçekleşti.
- Algılama, kaynak kısıtlamaları nedeniyle (ör. daha yüksek öncelikli bir kullanım alanı başlatıldığında) iptal edilir.
Son iki durumda, yükleme sırasında HAL istemcisi tarafından kaydedilen geri çağırma arayüzü aracılığıyla bir tanıma etkinliği gönderilir. Tüm durumlarda, bu olaylardan herhangi biri gerçekleştikten sonra algılama devre dışı bırakılır ve tanıma geri çağırmalarına izin verilmez.
Aynı model daha sonra tekrar başlatılabilir ve bu işlem gerektiği kadar tekrarlanabilir.
- Bu modelde bir
Son olarak, artık ihtiyaç duyulmayan etkin olmayan bir model, HAL istemcisi tarafından
unloadModel()
aracılığıyla kaldırılır.
HAL hatalarını işleme
Sürücü uygulamaları arasında güvenilir ve tutarlı bir davranış sağlamak için Android 11'de HAL'den döndürülen başarı olmayan tüm hata kodları programlama hatası olarak değerlendirilir. Bu hataların kurtarılması için HAL sürecinin yeniden başlatılması gerekir. Bu, son çare olarak kullanılan bir kurtarma stratejisidir ve düzgün çalışan bir sistemde bu tür durumların yaşanmaması beklenir.