Ses odağı

Mantıksal yayın başlatmadan önce bir uygulama, aynı mantıksal akış için kullanılan ses özelliklerini ifade eder. Uygulama, odak noktasına saygı göstermelidir performans kaybına dayanıyor.

Odaklanma isteği gönderilmesi önerilir ancak bu, sistem tarafından zorunlu kılınmaz. Bu nedenle odaklanmayı dolaylı olarak kontrol etme ve çatışmadan kaçınma birincil ses kontrol mekanizması yerine oynatma sırasında kullanılabilir. Araç ses alt sisteminin çalışması için odak sistemine bağlı olmamalıdır.

Etkileşimlere odaklanın

AAOS'yi desteklemek için ses odağı istekleri, önceden tanımlanmış öğelere göre işlenir. isteğin CarAudioContext ile mevcut istek arasındaki etkileşimler odak tutucular. Üç tür etkileşim vardır:

  • Özel
  • Reddet
  • Eşzamanlı

Özel etkileşim

Bu, Android'de en yaygın olarak kullanılan etkileşim modelidir.

Özel etkileşimlerde, aynı anda yalnızca bir uygulamanın odaklanmasına izin verilir. Bu nedenle, gelen odak isteğine odaklanılırken mevcut odak odağı kaybeder. Her iki uygulama da medya oynattığından yalnızca bir uygulamanın muhafaza etmesine izin verilir odaklanacağız. Sonuç olarak, yeni başlatılan uygulamanın odaklanma isteği AUDIOFOCUS_REQUEST_GRANTED şu anda müzik çalan uygulama İstek türüne karşılık gelen kayıp durumuna sahip odak değişikliği etkinliği ne olduğunu öğreneceğiz.

Etkileşimi reddet

reject (reddet) etkileşimleri sayesinde, gelen istek her zaman reddedilir. Örneğin, Örneğin, çağrı devam ederken müzik çalmaya çalıştığınızda bunu yapabilirsiniz. Burada Çevirici, bir arama için ses odağını basılı tutuyorsa ve ikinci bir uygulama odaklamak istiyorsa müzik uygulaması, müzik çalmak için yanıt olarak AUDIOFOCUS_REQUEST_FAILED alır eklemesi gerekir. Odaklama isteği reddedildiğinden odak kaybı gönderilmez dokunarak ekleyebilirsiniz.

Eşzamanlı etkileşim

AAOS'ye özel olan, eş zamanlı etkileşimlerdir. Bu işlem, ses isteğinde bulunan uygulamalara arabanın diğer uygulamalarla eşzamanlı olarak odaklanma yeteneğine odaklanmasını sağlayın. Örneğin, eş zamanlı etkileşimin gerçekleşmesi için aşağıdaki koşulların karşılanması gerekir. :

Bu ölçütler karşılanırsa odaklanma isteği Geçerli odak sahibinde değişiklik olmasa da AUDIOFOCUS_REQUEST_GRANTED odaklanacağız. Ancak geçerli odak noktası, ördek etkinliklerini almayı veya bir duraklama olduğunda, geçerli odak noktasının odağı kaybolur, özel etkileşim.

Eşzamanlı akışları işleme

Eşzamanlı etkileşimin çok sayıda kullanım alanı olsa da içerikleri karıştırırken dikkatli olun. olduğu konusunda daha da hızlı çalışabilirsiniz. Şunu kesinlikle öneririz: Eş zamanlı olarak oynatılmasına izin verilen CarAudioContext öğeleri şuraya yönlendirilmelidir: farklı çıkış cihazları kullanılıyor.

Eşzamanlı akışlar için ayrı çıkış cihazlarının olması, HAL'nin akarsuları karıştırmadan önce ayırma veya fiziksel akarsuları yönlendirme araçtaki farklı hoparlörlere gönderebilirsiniz. Mantıksal akışlar Android, kazançlar değişmez ve aynı fiziksel akışın bir parçası olarak sunulur.

Örneğin, gezinme ve medya aynı anda sunulduğunda için geçici olarak azaltılabilir (veya küçülebilir). navigasyon talimatları daha net duyulabilir. Alternatif olarak, medya içeriği oynatılmaya devam ederken yayın sürücü tarafındaki hoparlörlere yönlendirilebilir. baştan sona oynayabilirsiniz.

Etkileşim matrisi

Aşağıdaki tabloda, CarAudioService tarafından tanımlanan etkileşim matrisi gösterilmektedir. Her satır, geçerli odak sahibinin CarAudioContext ve her bir sütunu, gelen isteği temsil eder.

Örneğin, bir müzik medya uygulaması, navigasyon uygulaması olarak odağı tutarken odaklanıyorsa, matris iki etkileşimin eş zamanlı olarak oynanabileceğini gösterir. diğer kriterleri de varsayarak eşzamanlı etkileşimlerin karşılanması gerekir.

Eşzamanlı etkileşimler nedeniyle, birden fazla odak tutucu. Bu durumda, gelen bir odaklanma isteği geçerli odak sahipleriyle birlikte bu aşamanın da dahil edilmesi gerekir. Burada en konservatif etkileşim kazanır. Reddet, ardından özel ve son olarak eşzamanlıdır.

Ses odağı etkileşim matrisi

Şekil 1. Ses odağı etkileşim matrisi.

Android 11'de kullanıcıların Navigasyon ve telefon aramaları arasındaki etkileşim davranışı Ayarlandığında, android.car.KEY_AUDIO_FOCUS_NAVIGATION_REJECTED_DURING_CALL, gelen NAVIGATION odak istekleri ile mevcut CALL arasındaki etkileşim eşzamanlı olan odağı reddet'e çevirdi. Kullanıcı bunu tercih ederse navigasyon talimatları aramayı kesintiye uğratmaz, ayarı etkinleştirebilir. Bu kullanıcı için kalıcıdır ve sonraki odak noktasının kullanıcı için yeni ayar geçerli olur.

Gecikmeli ses odağı

Android 11'de AAOS, gecikmeli ses odağı isteğinde bulunma desteği ekledi. Bu ile etkileşimleri sırasında, geçici olmayan odaklama isteklerinin geciktirilmesine mevcut odak sahipleri normalde reddedilir. Bir odaktaki değişiklik, geciken isteğe odaklanılan bir durumla sonuçlanır. istek kabul edildi.

Gecikmeli ses odağı istekleriyle ilgili kurallar

  • Yalnızca geçici olmayan istekler. Geciken istek yalnızca geçici bir sesin uzun süre oynatılmasını önlemek için geçici olmayan kaynakları alakalı hale getirmeyi deneyin.

  • Bir seferde yalnızca bir istek gecikebilir. Geciken bir istek Gecikmeli bir istek varken yapılan orijinal gecikmeli istek Bir AUDIOFOCUS_LOSS değişiklik etkinliği alır ve yeni istek bir AUDIOFOCUS_REQUEST_DELAYED için eşzamanlı yanıt.

  • Ertelenebilir isteklerde OnAudioFocusChangeListener Bir defa bir istek geciktiğinde dinleyici, isteği gönderen kişiye istek sonunda onaylanır (AUDIOFOCUS_GAIN) veya reddedilirse (AUDIOFOCUS_LOSS).

Gecikmeli odak iste

Gecikmeli olabilecek bir istek oluşturmak için:

  1. AudioFocusRequest.Builder#setAcceptsDelayedFocusGain hesabını kullan.

    mMediaWithDelayedFocusListener = new MediaWithDelayedFocusListener();
    
    mDelayedFocusRequest = new AudioFocusRequest
         .Builder(AudioManager.AUDIOFOCUS_GAIN)
         .setAudioAttributes(mMusicAudioAttrib)
         .setOnAudioFocusChangeListener(mMediaWithDelayedFocusListener)
         .setForceDucking(false)
         .setWillPauseWhenDucked(false)
         .setAcceptsDelayedFocusGain(true)
         .build();
    
  2. İstekte bulunurken AUDIOFOCUS_REQUEST_DELAYED yanıtını işleme alın:

    int delayedFocusRequestResults = mAudioManager.requestAudioFocus(mDelayedFocusRequest);
    if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
        // start audio playback
        return;
    }
    if (delayedFocusRequestResults == AudioManager.AUDIOFOCUS_REQUEST_DELAYED) {
         // audio playback delayed to audio focus listener
         return;
    }
    
  3. İstek geciktiğinde odak işleyici, odaklanılan değişiklikleri işler:

    private final class MediaWithDelayedFocusListener implements
    OnAudioFocusChangeListener {
           @Override
           public void onAudioFocusChange(int focusChange) {
               synchronized (mLock) {
                   switch (focusChange) {
                       case AudioManager.AUDIOFOCUS_GAIN:
                           … // Start focus playback
                       case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
                           … // Pause media transiently
                       case AudioManager.AUDIOFOCUS_LOSS:
                           … // Stop media
    

Çoklu alt bölge odak yönetimi

Birden fazla ses bölgesi olan araçlarda ses odağı bağımsız olarak yönetilir tıklayın. Dolayısıyla, bir alt bölgeye yapılan istekte veya diğer bölgelerdeki odaklanma sahiplerinin dikkati dağılacaktır. Bu şekilde, ana kabinin odağı arka koltuk eğlence sistemi olduğundan, yapılan değişikliklerle bir alt bölgeye geçirilebilir.

CarAudioService, tüm uygulamalarda odağı otomatik olarak yönetir. Odak noktası isteğin ses alt bölgesi, ilişkili UserId veya UID tarafından belirlenir (Ayrıntılar için Ses Yönlendirme başlıklı makaleye göz atın).

Aynı anda birden fazla alt bölgeden ses isteyin

Bir uygulama aynı anda birden fazla alt bölgede ses çalmak isterse istekte bulunmalıdır AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID her bir alt bölgeye odaklanarak grup:

//Create attribute with bundle and AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID
Bundle bundle = new Bundle();
bundle.putInt(CarAudioManager.AUDIOFOCUS_EXTRA_REQUEST_ZONE_ID,
               zoneId);

AudioAttributes attributesWithZone = new AudioAttributes.Builder()
     .setUsage(AudioAttributes.USAGE_MEDIA)
     .addBundle(bundle)
     .build();

//Create focus request using built attributesWithZone

Bu paket parametresi, istekte bulunanın otomatik ses bölgesini geçersiz kılmasına olanak tanır. eşlemeleri için belirtilen alt bölge kimliğini kullanın. Bu nedenle, bir uygulama Farklı ses bölgeleri için ayrı istekler.

HAL ses odağı

Android 11'den itibaren HAL, harici akışlar. İsteğe bağlı olsa da bu API'lerin kullanımı harici seslerin Android ekosisteminde optimum katılımcılar olmasını sağlamak ve sorunsuz bir kullanıcı deneyimi sağlamak için kullanılır.

Hangi seslere öncelik verileceğini HAL belirler. Bu kapsamda, acil durum ve güvenlikle ilgili kritik sesler cihazdan bağımsız olarak HAL'ye ses odağının verilip verilmediğini ve ve HAL, ses odağını kaybetse bile uygun şekilde çalınmalıdır. Aynı durum resmi düzenlemelerin gerektirdiği sesler.

HAL, oyun sırasında Android akışlarını proaktif olarak ve uygun şekilde kapatmalıdır net bir şekilde duyulmasını sağlamak için acil durum veya güvenlik açısından kritik sesler.

Ses Kontrolü@2.0

AudioControl HAL sürüm 2.0 şu yeni API'leri sunmaktadır:

API Amaç
IAudioControl#registerFocusListener IFocusListener örneğini AudioControl HAL. Bu dinleyici, HAL'nin ses isteğinde bulunmasını ve ses kaydını bırakmasını sağlar odaklanacağız. HAl,ICloseHandle Android'e giderek dinleyicinin kaydını iptal edebilirsiniz.
IAudioControl#onAudioFocusChange HAL tarafından yapılan odaklanma isteklerine yönelik durum değişikliklerini HAL'ye bildirir İlk yanıtlar da dahil olmak üzere IFocusListener aracılığıyla odaklanma istekleri.
IFocusListener#requestAudioFocus Belirli bir kullanım, alt bölge kimliği ve ve odak kazancı türü.
IFocusListener#abandonAudioFocus Belirtilen kullanım ve alt bölge için mevcut HAL odağı isteklerini iptal eder Kimlik

HAL'ye aynı anda birden çok odaklama isteği gönderilebilir, ancak bu istek tek bir HAL ile sınırlıdır istek sayısı ve alt bölge kimliği eşlemesi sayısı. Android, HAL'yi hemen varsayar bir istek yapıldıktan sonra bir kullanım için ses çalmaya başlar ve o odağı terk edene kadar devam eder.

registerFocusListener dışında bu istekler oneway Android, odaklanma isteği işlenirken HAL'yi ertelemez. HAL, dikkatinizi vermek için zaman kaybetmeyin. Bu kısım isteğe bağlıdır. ses odağındaki değişiklikleri dinlemesi ve bunlara yanıt vermesi için IAudioControl#onAudioFocusChange

OEM araç ses odak hizmeti

Android 14'te AAOS, aşağıdakileri sağlamak için araba OEM eklenti hizmetlerini kullanıma sundu: yapılandırılabilirlik özellikleri var. Örneğin, Car Audio Plugin Service (Araç Ses Eklentisi Hizmeti) Bu hizmet, OEM'lerin araç sesi tarafından kesilen odak isteklerini yönetmesine olanak tanır. geliştirmenizi sağlar. Bu, OEM'lere gerektiği şekilde odağı yönetme konusunda daha fazla esneklik sağlar tarafından kontrol edilmesi anlamına gelir. Bu nedenle, ses odağı etkileşimi ve bölgeden bölgeye değişiklik gösterir. Ses odağının temel prensibi uygulamaların daha iyi yönetim sesi için odaklanmayı istemesi gerekir. kullanarak kullanıcı deneyimini iyileştirebilirsiniz. Genel olarak, işitsel reklamlar için belirli kurallar geçerli olmaya devam eder. uygulamalar tarafından odaklanma isteği:

  • Ayakta değilken yüksek öncelikli ses odağı (telefon görüşmesi, acil durum uyarısı veya güvenlik bildirimi) kullanan uygulamalar ses odaklanmayı imkânsız kılıyor.

  • Medya odağı etkin durumdayken:

    • Arama kullanımı odağını isteyen uygulamalar aramayı iki şekilde de alabilir senkronize edebilirsiniz.

    • Navigasyon kullanımı odağı isteyen uygulamalar navigasyonu alabilmelidir odaklanabillirsiniz.

    • Asistan kullanım odağı isteyen uygulamalar, kullanım odağını alabiliyor olmalıdır elde edebilirsiniz.

  • Yüksek öncelikli ses odağı ayaktayken (telefon görüşmesi, veya güvenlik bildirimi) etkin olduğundan emin olun. Gecikmeli ses odağı isteği, gerektiği şekilde verilmelidir veya geciktirilmelidir.

Yukarıdaki öneriler olası her durumu içermez, ancak izin isteyen uygulamalara yardımcı olabilir. odaklanmayı ve odaklanmayı kolaylaştırır. Yüksek olsa bile öncelikli sesler etkin, gecikmeli odaklanma istekleri yine de dikkate alınmalıdır ve yüksek öncelikli ses durduğunda odaklanabilmelidir.