Ses Tetikleyici

Ses Tetikleyici özelliği, uygulamalara özel kelimeler gibi belirli akustik olayları düşük güçte ve gizliliğe duyarlı bir şekilde dinleme yeteneği sağlar. Ses Tetikleyici'nin örnek kullanım durumları Asistan ve Şu An Çalınan'dır.

Bu sayfada Sound Trigger mimarisine ve HAL (Donanım Soyutlama Katmanı) arayüzüne genel bir bakış sunulmaktadır.

Ses Tetikleyici yığını

Sound Trigger alt sistemi, Şekil 1'de gösterildiği gibi katmanlar halinde oluşturulmuştur:

sound_trigger_stack

Şekil 1: Ses Tetikleyici yığını

Aşağıdaki liste, Şekil 1'de gösterilen her katmanı daha ayrıntılı olarak açıklamaktadır:

  • HAL katmanı (yeşil), Sound Trigger HAL (STHAL) arayüzünü uygulayan satıcıya özel kodu içerir.

  • SoundTriggerMiddleware (sarı renkte) HAL arayüzünün üzerinde bulunur. HAL ile iletişim kurar ve HAL'in farklı istemciler arasında paylaşılması, günlüğe kaydedilmesi, izinlerin uygulanması ve eski HAL sürümleriyle uyumluluğun yönetilmesi gibi işlevlerden sorumludur.

  • SoundTriggerService (mavi) sistemi ara yazılımın üzerinde bulunur. Telefon ve pil olayları gibi diğer sistem özellikleriyle entegrasyonu kolaylaştırır. Ayrıca benzersiz kimliklerle indekslenen ses modellerinden oluşan bir veritabanı da tutar.

  • SoundTriggerService katmanının üzerindeki yığın (kahverengi renkte), Assistant'a ve genel uygulamalara özel özellikleri ayrı ayrı ele alır.

Ses Tetikleyici yığınının işlevi, akustik tetikleyici olayları temsil eden ayrı olaylar sunmaktır. Çoğu durumda Sound Trigger yığını sesle ilgilenmez. Tetikleyici olayların alınması üzerine uygulamalar, Audio çerçevesi aracılığıyla bir AudioRecord nesnesi açarak olayların zamanını çevreleyen gerçek ses akışına erişebilir. Sound Trigger HAL API'leri, Audio Framework ile kullanılan tetiklenen olaya yönelik bir tanıtıcı sağlar. Bu nedenle, Ses Tetikleyici HAL ve Ses HAL, başlık altında birbirine bağlı olduğundan, genellikle bir süreci paylaşırlar.

Ses Tetikleyici HAL arayüzü

Sound Trigger HAL (STHAL) arayüzü, Sound Trigger yığınının satıcıya özel bir parçasıdır ve özel sözcüklerin ve diğer seslerin donanım tarafından tanınmasını yönetir. STHAL, her biri belirli bir ses sınıfını tespit etmek 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 olay gönderir ve ardından algılamayı durdurur.

STHAL arayüzü /hardware/interfaces/soundtrigger/ altında belirtilmiştir.

ISoundTriggerHw arayüzü, belirli bir zamanda bir veya daha fazla algılama oturumunun çalıştırılması ve akustik olayların dinlenmesi yeteneğini destekler. ISoundTriggerHw.getProperties() çağrısı, uygulama açıklamasını ve yeteneklerini içeren bir Properties yapısını döndürür.

Bir oturumu ayarlamanın temel akışı Şekil 2'de şu şekilde açıklanmaktadır:

sthal_state

Şekil 2: STHAL durum şeması

Aşağıdaki adımlar her durumu daha ayrıntılı olarak açıklamaktadır:

  1. HAL istemcisi, loadSoundModel() veya loadPhraseSoundModel() kullanarak bir model yükler. Sağlanan model nesnesi, hangi uygulamaya özgü tespit algoritmasının (motorun) kullanılacağını ve ayrıca bu algoritma için geçerli parametreleri belirtir. Başarı üzerine bu yöntemler, sonraki çağrılarda bu modele referans vermek için kullanılan bir tanıtıcı döndürür.

  2. Model başarıyla yüklendikten sonra HAL istemcisi algılamayı başlatmak için startRecognition() öğesini çağırır. Tanıma, aşağıdaki olaylardan biri gerçekleşene kadar arka planda çalışmaya devam eder:

    1. Bu modelde stopRecognition() çağrıldı.
    2. Bir tespit meydana geldi.
    3. Kaynak kısıtlamaları nedeniyle, örneğin daha yüksek öncelikli bir kullanım durumu başlatıldığında, algılama 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 olayı gönderilir. Her durumda, bu olaylardan herhangi biri meydana geldikten sonra algılama devre dışı kalır ve artık tanıma geri aramalarına izin verilmez.

    Aynı model daha sonra tekrar başlatılabilir ve bu işlem gerektiği kadar tekrarlanabilir.

  3. 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ı davranış sağlamak için Android 11'de, HAL'den döndürülen herhangi bir başarısız hata kodu, programlama hataları olarak kabul edilir ve bu hatalardan kurtulmak için HAL sürecinin yeniden başlatılması gerekir. Bu, son çare kurtarma stratejisidir ve beklenti, bu tür durumların düzgün çalışan bir sistemde meydana gelmeyeceği yönündedir.