Ses Tetikleyici

Ses Tetikleyici özelliği, uygulamalara özel kelimeler gibi belirli akustik etkinlikleri düşük güçle ve gizliliğe duyarlı bir şekilde dinleme yeteneği sağlar. 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:

sound_trigger_stack

Şekil 1: Ses Tetikleyici grubu

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 satıcıya özgü kod 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) sistemi, orta katmanın üzerinde bulunur. Telefon ve pil etkinlikleri gibi diğer sistem özellikleriyle entegrasyonu kolaylaştırır. Ayrıca benzersiz kimliklere göre dizine eklenen bir ses modeli veritabanı da tutar.

  • SoundTriggerService katmanının üzerindeki grup (kahverengi), Asistan'a ve genel uygulamalara özgü özellikleri ayrı olarak işler.

Ses Tetikleyici paketinin işlevi, akustik tetikleyici etkinliklerini temsil eden ayrı etkinlikler yayınlamaktır. Çoğu durumda, Ses Tetikleyici grubu sesi işlemez. Tetikleyici etkinlikleri alındıktan sonra uygulamalar, ses çerçevesi üzerinden bir AudioRecord nesnesi açarak etkinliklerin zamanıyla ilgili gerçek ses akışına erişim sağlar. Ses Tetikleyici HAL API'leri, Ses Çerçevesi ile kullanılan tetiklenmiş etkinliğin bulunduğu bir tutamaç 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 belirtilmiştir.

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:

sthal_state

Şekil 2: STHAL durum diyagramı

Aşağıdaki adımlarda her durum ayrıntılı olarak açıklanmaktadır:

  1. HAL istemcisi, loadSoundModel() veya loadPhraseSoundModel() kullanarak bir model yükler. Sağlanan model nesnesi, hangi uygulamaya özgü algılama algoritmasının (motor) kullanılacağını ve bu algoritma için geçerli parametreleri gösterir. 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.

  2. 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:

    1. Bu modelde bir stopRecognition() çağrıldı.
    2. Bir algılama gerçekleşti.
    3. 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. Bu durumlardan 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.

  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ı 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.