Üç boyutlu ses ve baş hareketini izleme

Android 13, OEM'lerin satıcıya özel özelleştirmelere veya SDK'lara gerek kalmadan üç boyutlu ses ve kafa hareketini desteklemesi için standart bir yol sunar.

Üç boyutlu ses, dinleyiciyi çevreleyen bir ses alanı oluşturmak için kullanılan bir teknolojidir. Üç boyutlu ses, kullanıcıların kanalları ve bağımsız sesleri, oynatma için kullanılan ses cihazındaki dönüştürücülerin fiziksel konumlarından farklı konumlardaki sesleri algılamasına olanak tanır. Örneğin, üç boyutlu ses özelliği kullanıcılara çok kanallı bir ses parçasını kulaklıktan dinleme olanağı sunar. Kulak içi kulaklık kullanıcıları, oynatma için yalnızca iki dönüştürücüye sahip olmalarına rağmen, mekansal ses özelliğini kullanarak önlerindeki diyalogları ve arkalarındaki surround efektleri algılayabilir.

Baş takibi, kullanıcının başının etrafında simüle edilen uzamsal ses sahnesinin doğasını anlamasına yardımcı olur. Bu deneyim yalnızca gecikme düşük olduğunda etkilidir. Gecikme, kullanıcının kafasını hareket ettirmesi ile sanal hoparlör konumunun buna göre hareket ettiğini duyması arasındaki süre olarak ölçülür.

Android 13, mümkün olan en düşük gecikmeyi elde etmek için ses ardışık düzeninde üç boyutlu ses işlemeyi mümkün olan en düşük düzeyde sunarak üç boyutlu ses ve kafa takibi için optimizasyon yapar.

Mimari

Android 13'teki değiştirilmiş Android ses çerçevesi ve API'si, üç boyutlu ses teknolojisinin ekosistem genelinde benimsenmesini kolaylaştırır.

Aşağıdaki şekilde, Android 13 ile ses ardışık düzeni mimarisinde yapılan ve uzamsal sesle ilgili değişiklikler gösterilmektedir:

spatial-audio

Şekil 1. Üç boyutlu seslendirici içeren ses ardışık düzen mimarisi

Yeni modelde, uzamsallaştırıcı ses çerçevesinin bir parçasıdır ve kod çözücüden ayrılmıştır. Üç boyutlulaştırıcı, karma ses içeriğini alır ve Audio HAL'e stereo akış oluşturur. Uzamsallaştırıcının kod çözücüden ayrılması, OEM'lerin kod çözücü ve uzamsallaştırıcı için farklı tedarikçiler seçmesine ve kafa izleme için istenen gidiş dönüş gecikmesini elde etmesine olanak tanır. Bu yeni model, kafa izleme için sensör çerçevesine bağlantı noktaları da içerir.

Aşağıdaki şekilde, üç boyutlu ses ve baş hareketini izleme efekti için ses çerçevesinin sistem mimarisi gösterilmektedir:

spatial-sys-arch

Şekil 2. Üç boyutlu ses ve baş hareketi izleme özelliğine sahip sistem mimarisi

Tüm uzamsal ses API'leri, uygulama düzeyinde herkese açık Spatializer sınıfında gruplandırılır. Ses hizmetindeki SpatializerHelper sınıfı, platforma ve bağlı cihaz özelliklerine göre uzamsallaştırıcıyla ilgili işlevleri yönetmek için Sistem Kullanıcı Arayüzü bileşenleriyle etkileşim kurar. Ses politikası hizmetindeki yeni Spatializer sınıfı, OEM tarafından belirtilen özelliklere, bağlı cihazlara ve etkin kullanım alanlarına dayalı olarak çok kanallı karıştırma ve konumsallaştırma için gereken uzamsal ses grafiğini oluşturur ve kontrol eder. Yeni bir karıştırıcı sınıfı SpatializerThread, çok kanallı parçaları karıştırır ve ortaya çıkan karışımı, Audio HAL'e stereo çıkış oluşturan bir son işlem efekt motoruna besler. Baş takibi için SpatializerPoseController sınıfı, baş takibi ile ilgili işlevleri gruplandırır, sensör yığınıyla arayüz oluşturur ve efekt motoruna beslenen sensör sinyallerini birleştirip filtreler. Kafa hareketi izleme sensörü verileri, Bluetooth sürücüsünden HID protokolü üzerinden aktarılır.

Android 13 ses ardışık düzeni mimarisinde yapılan değişiklikler aşağıdakileri iyileştirir:

  • Mekansallaştırıcı ile kulaklık arasındaki gecikmeyi azaltma.
  • Uygulama geliştiricilere hizmet sunmak için birleştirilmiş API'ler sağlama.
  • Sistem API'leri aracılığıyla kafa izleme durumunu kontrol etme.
  • Kafa hareketi izleme sensörlerini keşfetme ve bunları etkin ses cihazlarıyla ilişkilendirme.
  • Çeşitli sensörlerden gelen sinyalleri birleştirme ve uzamsallaştırıcı efekt motoru tarafından kullanılabilecek kafa duruşunu hesaplama.

Yanlış hizalama telafisi, hareketsizlik algılama ve hız sınırlaması gibi işlevler baş izleme yardımcı kitaplığı kullanılarak uygulanabilir.

Üç boyutlu ses API'leri

Android 13, üç boyutlu ses sistemi ve geliştirici API'leri sunar.

OEM'ler, uygulama davranışını sistem API'leri tarafından ayarlanan özellik kullanılabilirliğine ve etkin duruma göre uyarlayabilir. Uygulamalar, estetik nedenlerle üç boyutlu sesi devre dışı bırakmak veya ses akışının üç boyutlu ses için zaten işlenmiş olduğunu belirtmek amacıyla ses özelliklerini de yapılandırabilir.

Geliştiricilere yönelik API'ler için Spatializer bölümüne bakın.

OEM'ler, kullanıcıların cihazlarındaki Üç Boyutlu Ses ve kafa hareketi izleme özelliğinin durumunu kontrol etmesine olanak tanıyan Sesler ve Bluetooth ayarları kullanıcı arayüzünü uygulamak için sistem API'lerini kullanabilir. Kullanıcı, Ses ayarları kullanıcı arayüzünden hoparlör ve kablolu kulaklıkta üç boyutlu sesi etkinleştirebilir veya devre dışı bırakabilir. Hoparlörün uzamsal ses ayarı, yalnızca mekansalleştirici efekti uygulaması çevrimsel modu destekliyorsa kullanılabilir.

Kullanıcı, her cihazın Bluetooth cihaz ayarlarından üç boyutlu sesi ve kafa izlemeyi de etkinleştirebilir veya devre dışı bırakabilir. Kafa hareketi izleme ayarı yalnızca Bluetooth kulaklıkta kafa hareketi izleme sensörü varsa kullanılabilir.

Özellik destekleniyorsa Üç Boyutlu Ses için varsayılan ayarlar her zaman AÇIK olur. Sistem API'lerinin tam listesi için Spatializer.java sayfasına bakın.

Yeni baş izleme sensörü türü Sensor.TYPE_HEAD_TRACKER, Sensör çerçevesine eklenir ve Sensör HAL tarafından Bluetooth veya USB üzerinden dinamik sensör olarak açığa çıkar.

Üç boyutlu sesi entegre etme

OEM'lerin, mekansalleştirici efekt motorunu uygulamanın yanı sıra platformlarını uzamsal ses desteği için de yapılandırması gerekir.

Şartlar

Üç boyutlu sesi entegre etmek için aşağıdaki koşulların karşılanması gerekir:

  • Audio HAL ve ses DSP'si, üç boyutlu ses için özel bir çıkış yolunu desteklemelidir.
  • Baş hareketini izleyen dinamik üç boyutlu ses özelliğini kullanmak için kulaklığın yerleşik baş hareketi izleme sensörlerine sahip olması gerekir.
  • Uygulama, Bluetooth kulaklıktan telefona HID protokolü üzerinden kafa hareketi izleme için önerilen standarda uygun olmalıdır.
  • Üç boyutlu ses desteği için Audio HAL v7.1 gereklidir.

Aşağıdaki adımları uygulayarak üç boyutlu sesi entegre edin:

  1. device.mk dosyanızda üç boyutlu ses desteğini aşağıdaki gibi belirtin:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Bu, AudioService'ün uzamsallaştırıcı desteğini başlatmasına neden olur.

  2. audio_policy_configuration.xml içinde üç boyutlu ses karışımı için özel çıkışı aşağıdaki gibi tanımlayın:

    <audioPolicyConfiguration>
      <modules>
       <module>
         <mixPorts>
         <mixPort name="spatializer" role="source"   flags="AUDIO_OUTPUT_FLAG_SPATIALIZER">
           <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT"
             samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
    
  3. audio_effects.xml içinde uzamsallaştırıcı efekt kitaplığını aşağıdaki gibi tanımlayın:

    <audio_effects_conf>
          <libraries>
             <library name="spatializer_lib" path="libMySpatializer.so"/>
              
             </libraries>
          <effects>
           <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
    
  4. Mekansallaştırıcı efekti uygulayan tedarikçiler aşağıdakilere uymalıdır:

    • Effect HAL'deki diğer efektlerle aynı temel yapılandırma ve kontrol.
    • Çerçevenin desteklenen özellikleri ve yapılandırmayı keşfetmesi için gereken belirli parametreler şunlardır:

      • SPATIALIZER_PARAM_SUPPORTED_LEVELS
      • SPATIALIZER_PARAM_LEVEL
      • SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
      • SPATIALIZER_PARAM_HEADTRACKING_MODE
      • SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
      • SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
      • SPATIALIZER_PARAM_HEAD_TO_STAGE

    Daha fazla bilgi için effect_spatializer.h sayfasına bakın.

Öneriler

OEM'lerin uygulama sırasında aşağıdaki yönergeleri kullanmasını öneririz:

  • Birlikte çalışabilirliği kolaylaştırmak ve gecikme hedeflerine ulaşmak için mümkün olduğunda LE ses kullanın.
  • İyi bir kullanıcı deneyimi için sensör hareket algılamasından kulaklıkların aldığı sese kadar olan gidiş dönüş gecikmesi 150 ms'den az olmalıdır.
  • Gelişmiş Ses Dağıtım Profili (A2DP) özellikli Bluetooth (BT) Klasik için:
    • Opus gibi düşük gecikmeli bir codec kullanın.
    • Gecikme denetimi işlevlerini Ses HAL'sinde uygulayın. Bu sayede, kafa hareketi takibi kapalıyken güç ve performans optimizasyonu etkinleştirilir ve optimum olmayan koşullarda kafa hareketi takibi devre dışı bırakılır.

Doğrulama

Üç boyutlu ses özelliğinin işlevini doğrulamak için SpatializerTest.java'da bulunan CTS testlerini kullanın.

Mekansallaştırma veya kafa izleme algoritmalarının kötü bir şekilde uygulanması, Öneriler bölümünde listelenen gidiş dönüş gecikmesi önerisinin karşılanamamasına neden olabilir.