Üç boyutlu ses ve baş hareketi izleme

Android 13, OEM'lerin tedarikçiye özel özelleştirmelere veya SDK'lara gerek kalmadan uzamsal ses ve kafa takibini desteklemesi için standart bir yöntem sunar.

Üç boyutlu ses, dinleyeni çevreleyen bir ses alanı oluşturmak için kullanılan bir teknolojidir. Uzamsal ses, kullanıcıların kanalları ve tek tek sesleri, oynatma için kullanılan ses cihazının dönüştürücülerinin fiziksel konumlarından farklı konumlarda algılamasına olanak tanır. Örneğin, üç boyutlu ses özelliği, kullanıcının kulaklıkla çok kanallı bir film müziği dinlemesine olanak tanır. Kulaklık kullanıcıları, oynatma için yalnızca iki dönüştürücüye sahip olmalarına rağmen, uzamsal ses kullanarak diyalogları önlerinde, surround efektlerini ise arkalarında algılayabilir.

Baş takibi, kullanıcının başının etrafında simüle edilen uzamsallaştırılmış ses sahnesinin yapısını anlamasına yardımcı olur. Bu deneyim yalnızca gecikme süresi düşük olduğunda etkilidir. Gecikme süresi, kullanıcının başını hareket ettirmesiyle sanal hoparlör konumunun buna göre hareket ettiğini duyması arasında geçen süre olarak ölçülür.

Android 13, mümkün olan en düşük gecikme süresini elde etmek için ses işlem hattında mümkün olan en düşük düzeyde üç boyutlu ses işleme sunarak üç boyutlu ses ve baş takibi için optimizasyon yapar.

Mimari

Android 13'teki değiştirilmiş Android ses çerçevesi ve API, ekosistemde üç boyutlu ses teknolojisinin kullanılmasını kolaylaştırır.

Aşağıdaki şekilde, Android 13 ile ses işlem hattı mimarisinde yapılan uzamsal sesle ilgili değişiklikler gösterilmektedir:

spatial-audio

1. şekil. Üç boyutlu ses efektli ses işlem hattı mimarisi

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

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

spatial-sys-arch

Şekil 2. Uzamsallaştırıcı ve baş hareketini izleme özelliklerine 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 hizmeti arayüzlerindeki 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şime girer. Ses politikası hizmetindeki yeni Spatializer sınıfı, Spatializer çok kanallı miksaj ve uzamsallaştırma için gereken uzamsal ses grafiğini oluşturur ve kontrol eder. Bu sınıf, OEM tarafından ifade edilen özelliklere, bağlı cihazlara ve etkin kullanım alanlarına göre çalışır. 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'ye stereo çıkış veren bir post-processing FX motoruna aktarır. Baş takibi için SpatializerPoseController sınıfı, baş takibiyle ilgili işlevleri, sensör yığınıyla arayüz oluşturmayı ve efekt motoruna beslenen sensör sinyallerini birleştirip filtrelemeyi gruplandırır. Baş izleme sensörü verileri, Bluetooth sürücüsünden HID protokolü üzerinden taşınır.

Android 13'teki ses işlem hattı mimarisinde yapılan değişiklikler aşağıdaki alanlarda iyileştirmeler sunar:

  • Uzamsallaştırıcı ile kulaklık arasındaki gecikmeyi azaltma
  • Uygulama geliştiricilere hizmet vermek için birleştirilmiş API'ler sağlama.
  • Sistemin API'leri aracılığıyla baş takibi durumunu kontrol etme.
  • Kafa hareketi izleme sensörlerini keşfetme ve etkin ses cihazlarıyla ilişkilendirme
  • Çeşitli sensörlerden gelen sinyalleri birleştirme ve uzamsallaştırma efekti motoru tarafından kullanılabilen baş pozunu hesaplama.

Önyargı telafisi, hareketsizlik algılama ve hız sınırlama gibi işlevler baş takibi 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ı özelliklerin kullanılabilirliğine ve sistem API'leri tarafından belirlenen etkinleştirilmiş durumuna göre uyarlayabilir. Uygulamalar, estetik nedenlerle üç boyutlu sesi devre dışı bırakmak veya ses akışının üç boyutlu ses için zaten işlendiğini belirtmek üzere ses özelliklerini de yapılandırabilir.

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

OEM'ler, Ses ve Bluetooth ayarları kullanıcı arayüzünü uygulamak için sistem API'lerini kullanabilir. Bu sayede kullanıcı, cihazında uzamsal ses ve kafa takibi özelliğinin durumunu kontrol edebilir. Kullanıcı, Ses ayarları kullanıcı arayüzünde hoparlör ve kablolu kulaklık için üç boyutlu sesi etkinleştirebilir veya devre dışı bırakabilir. Hoparlörün üç boyutlu ses ayarı yalnızca üç boyutlu ses efekti uygulaması, transaural modu destekliyorsa kullanılabilir.

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

Üç boyutlu ses özelliği destekleniyorsa varsayılan ayarlar her zaman AÇIK'tır. Sistem API'lerinin tam listesi için Spatializer.java sayfasına bakın.

Yeni baş takibi sensörü türü Sensor.TYPE_HEAD_TRACKER, Sensor Framework'e eklenir ve Bluetooth veya USB üzerinden dinamik bir sensör olarak Sensor HAL tarafından kullanıma sunulur.

Üç boyutlu sesi entegre etme

OEM'ler, uzamsallaştırıcı efekt motorunu uygulamanın yanı sıra platformlarını üç boyutlu ses desteği için yapılandırmalıdır.

Şartlar

Üç boyutlu ses özelliğini entegre etmek için aşağıdaki koşulların karşılanması gerekir:

  • Ses HAL'si ve ses DSP'si, uzamsal ses için özel bir çıkış yolunu desteklemelidir.
  • Baş hareketini izleyen dinamik üç boyutlu ses için kulaklıklarda yerleşik baş hareketi izleme sensörleri bulunmalıdır.
  • Uygulama, Bluetooth kulaklıktan telefona HID protokolü üzerinden baş takibi için önerilen standarda uygun olmalıdır.
  • Üç boyutlu ses desteği için Audio HAL v7.1 gerekir.

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

  1. device.mk dosyanızda üç boyutlu ses desteğini aşağıdaki şekilde beyan edin:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

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

  2. audio_policy_configuration.xml içinde üç boyutlu ses miksi için özel çıkış bildirin.

    <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. Uzamsallaştırıcı efekt kitaplığını audio_effects.xml içinde aşağıdaki şekilde bildirin:

    <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. Uzamsallaştırma efektini uygulayan tedarikçiler aşağıdakilere uymalıdır:

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

      • 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 özelliğini kullanın.
  • Sensör hareket algılamadan kulaklıklara ses ulaşmasına kadar olan gidiş dönüş gecikmesi, iyi bir kullanıcı deneyimi için 150 ms'den az olmalıdır.
  • Gelişmiş Ses Dağıtım Profili (A2DP) ile Bluetooth (BT) Classic için:
    • Opus gibi düşük gecikmeli bir codec kullanın.
    • Gecikme kontrolü işlevlerini Audio HAL'de uygulayın. Bu, baş takibi kapalıyken güç ve performans optimizasyonunu sağlar ve uygun olmayan koşullarda baş takibini devre dışı bırakır.

Doğrulama

Uzamsal ses özelliğinin işlevselliğini doğrulamak için SpatializerTest.java adresinde bulunan CTS testlerini kullanın.

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