Üç boyutlu ses ve baş hareketini izleme

Android 13, OEM'lerin tedarikçiye özel özelleştirmelere veya SDK'lara ihtiyaç duymadan uzamsal sesi ve kafa izlemeyi desteklemesi için standart bir yöntem sunar.

Üç boyutlu ses, dinleyiciyi çevreleyen bir ses alanı oluşturmak için kullanılan bir teknolojidir. Üç boyutlu ses, kullanıcıların kanalları ve sesleri, oynatma için kullanılan ses cihazının dönüştürücülerinin fiziksel konumlarından farklı konumlarda algılamasını sağlar. Örneğin, üç boyutlu ses özelliği, kullanıcıya ç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 izleme 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 ifade edilen özelliklere, bağlı cihazlara ve etkin kullanım alanlarına göre çok kanallı miksleme ve uzamsallaştırma için gereken uzamsal ses grafiğini oluşturup 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. Baş izleme sensör verileri, Bluetooth sürücüsünden HID protokolü üzerinden taşını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 vermek için birleşik API'ler sunma
  • 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ünde hoparlör ve kablolu kulaklıklar için Üç Boyutlu Ses özelliğini etkinleştirebilir veya devre dışı bırakabilir. Hoparlör için üç boyutlu ses ayarı yalnızca üç boyutlu ses efekti uygulaması transaural 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 kafa hareketi 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 bir sensör olarak gösterilir.

Üç boyutlu sesi entegre etme

OEM'lerin, üç boyutlu ses desteği için platformlarını yapılandırmasının yanı sıra üç boyutlu ses efekt motorunu da uygulaması gerekir.

Şartlar

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

  • Ses HAL'i ve ses DSP'si, uzamsal 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.
    • Audio HAL'de gecikme denetimi işlevlerini 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.