Ses Tetikleyici özelliği, uygulamalara belirli akustik olayları (ör. etkin kelimeler) düşük güçle ve gizliliğe duyarlı bir şekilde dinleme olanağı sunar. Ses Tetikleyici'nin kullanım alanı örnekleri arasında Asistan ve Ne Çalıyor yer alı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: Sound Trigger yığını
Aşağıdaki listede, Şekil 1'de gösterilen her katman daha ayrıntılı olarak açıklanmaktadır:
HAL katmanı (yeşil renkte), Sound Trigger HAL (STHAL) arayüzünü uygulayan tedarikçiye özel kodu içerir.
SoundTriggerMiddleware
(sarı renkte) HAL arayüzünün üzerinde yer alır. HAL ile iletişim kurar ve HAL'ı farklı istemciler arasında paylaşma, günlük kaydı, izinleri zorunlu kılma ve eski HAL sürümleriyle uyumluluğu sağlama gibi işlevlerden sorumludur.SoundTriggerService
(mavi) sistemi, ara yazılımı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 eklenmiş ses modelleri veritabanını da korur.SoundTriggerService
katmanının üzerinde, yığın (kahverengi) Asistan'a özgü özellikleri ve genel uygulamaları ayrı ayrı işler.
Ses Tetikleyici yığınının işlevi, akustik tetikleyici etkinlikleri temsil eden ayrı etkinlikler sunmaktır. Çoğu durumda, Sound Trigger yığını sesle ilgilenmez. Tetikleyici etkinlikler alındığında uygulamalar, Audio çerçevesi aracılığıyla bir AudioRecord
nesnesi açarak etkinliklerin gerçekleştiği zaman aralığındaki gerçek ses akışına erişir. Sound Trigger HAL API'leri, tetiklenen etkinlikle birlikte bir işleyici sağlar. Bu işleyici, Audio Framework ile kullanılır. Bu nedenle, Sound Trigger HAL ve Audio HAL arka planda bağlı olduğundan genellikle aynı işlemi paylaşırlar.
Sound Trigger HAL arayüzü
Sound Trigger HAL (STHAL) arayüzü, Sound Trigger yığınının tedarikçiye özel kısmıdır ve tetikleyici kelimelerin ve diğer seslerin donanım tanıma işlemini gerçekleştirir. 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()
işlevine yapılan bir çağrı, uygulama açıklaması ve özellikleri içeren bir Properties
yapısı döndürür.
Oturum oluşturmanın temel akışı Şekil 2'de şu şekilde açıklanmıştır:
Şekil 2: STHAL durum diyagramı
Aşağıdaki adımlarda her durum daha ayrıntılı olarak açıklanmaktadır:
HAL istemcisi,
loadSoundModel()
veyaloadPhraseSoundModel()
kullanarak bir model yükler. Sağlanan model nesnesi, hangi uygulamaya özel algılama algoritmasının (motor) kullanılacağını ve bu algoritma için geçerli olan parametreleri belirtir. Başarılı olursa bu yöntemler, sonraki çağrılarda bu modele referans vermek için kullanılan bir tutma yeri döndürür.Model başarıyla yüklendikten sonra HAL istemcisi, algılamayı başlatmak için
startRecognition()
çağrılarını yapar. Aşağıdaki etkinliklerden biri gerçekleşene kadar tanıma işlemi arka planda çalışmaya devam eder:- Bu modelde
stopRecognition()
hatası tespit edildi. - Bir algılama gerçekleşti.
- Örneğin, daha yüksek öncelikli bir kullanım alanı başlatıldığında kaynak kısıtlamaları nedeniyle algılama işlemi iptal edilir.
Son iki durumda, HAL istemcisi tarafından yükleme sırasında kaydedilen geri çağırma arayüzü aracılığıyla bir tanıma etkinliği gönderilir. Her durumda, bu olaylardan herhangi biri gerçekleştiğinde algılama devre dışı kalır ve başka 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
Son olarak, artık gerekli olmayan etkin olmayan bir model,
unloadModel()
aracılığıyla HAL istemcisi tarafından kaldırılır.
HAL hatalarını işleme
Sürücü uygulamaları arasında güvenilir ve tutarlı davranış sağlamak için Android 11'de HAL'den döndürülen tüm başarı dışı hata kodları programlama hatası olarak değerlendirilir. Bu hatalardan kurtulmak için HAL işleminin 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.