Uzamsal ses ve kafa takibi

Android 13, OEM'lerin satıcıya özel özelleştirmelere veya SDK'lara ihtiyaç duymadan uzamsal ses ve kafa takibini desteklemesi için standart bir yol sunuyor.

Uzamsal ses, dinleyiciyi çevreleyen bir ses alanı oluşturmak için kullanılan bir teknolojidir. Uzamsal ses, kullanıcıların, oynatma için kullanılan ses cihazının dönüştürücülerinin fiziksel konumlarından farklı konumlardaki kanalları ve bireysel sesleri algılamasına olanak tanır. Örneğin, uzamsal ses, kullanıcıya kulaklık üzerinden çok kanallı bir film müziğini dinleme yeteneği sunar. 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 önlerindeki diyaloğu ve arkalarındaki surround efektlerini algılayabiliyor.

Kafa takibi, kullanıcının başının etrafında simüle edilen mekansallaştırılmış ses sahnesinin doğasını anlamasına yardımcı olur. Bu deneyim yalnızca gecikme düşük olduğunda etkilidir; burada gecikme, kullanıcının başını hareket ettirdiği an ile sanal hoparlör konumunun buna göre hareket ettiğini duyduğu zaman arasındaki süre olarak ölçülür.

Android 13, mümkün olan en düşük gecikmeyi elde etmek için ses hattında mümkün olan en düşük seviyede uzamsal ses işleme sunarak uzamsal ses ve kafa takibini optimize eder.

Mimari

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

Aşağıdaki şekil, Android 13 ile ses hattı mimarisinde yapılan uzamsal sesle ilgili değişiklikleri göstermektedir:

spatial-audio

Şekil 1. Uzamsallaştırıcılı ses hattı mimarisi

Yeni modelde, mekansallaştırıcı ses çerçevesinin bir parçasıdır ve kod çözücüden ayrılmıştır. Uzamsallaştırıcı, karışık ses içeriğini alır ve Audio HAL'e bir stereo akışı işler. 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ı satıcıları seçmesine ve kafa takibi için istenen gidiş-dönüş gecikmesini elde etmesine olanak tanır. Bu yeni model aynı zamanda kafa takibi için sensör çerçevesine kancalar da içerir.

Aşağıdaki şekil, mekansallaştırıcı ve kafa izleme efekti için ses çerçevesinin sistem mimarisini göstermektedir:

spatial-sys-arch

Şekil 2. Uzaylaştırıcı ve kafa takibine sahip sistem mimarisi

Tüm uzamsal ses API'leri uygulama düzeyinde genel Spatializer sınıfında gruplandırılmıştır. Ses hizmetindeki SpatializerHelper sınıfı, platform ve bağlı cihaz özelliklerine dayalı olarak mekansallaştırıcıyla ilgili işlevselliği yönetmek için Sistem Kullanıcı Arayüzü bileşenleriyle arayüz oluşturur. Ses ilkesi hizmetindeki yeni Spatializer sınıfı , OEM, bağlı cihazlar ve aktif kullanım durumları tarafından ifade edilen yeteneklere dayalı olarak çok kanallı miksaj ve uzamsallaştırma için gereken uzamsal ses grafiğini oluşturur ve kontrol eder. Yeni bir mikser sınıfı SpatializerThread çok kanallı parçaları karıştırır ve elde edilen karışımı, Audio HAL'e stereo çıkış veren bir işlem sonrası FX motoruna besler. Kafa takibi için SpatializerPoseController sınıfı, kafa takibi, sensör yığınına arayüz oluşturma ve efekt motoruna beslenen sensör sinyallerini birleştirme ve filtreleme ile ilgili işlevleri gruplandırır. Kafa takip sensörü verileri, Bluetooth sürücüsünden HID protokolü üzerinden taşınır.

Android 13 ses hattı mimarisindeki değişiklikler aşağıdaki konularda iyileştirme sağlar:

  • Uzamsallaştırıcı ve kulaklıklar arasındaki gecikmenin azaltılması.
  • Uygulama geliştiricilerine hizmet vermek için birleşik API'ler sağlamak.
  • Sistem API'leri aracılığıyla kafa izleme durumunu kontrol etme.
  • Kafa takip sensörlerini keşfetme ve bunları aktif ses cihazlarıyla ilişkilendirme.
  • Çeşitli sensörlerden gelen sinyallerin birleştirilmesi ve mekansallaştırıcı efekt motoru tarafından tüketilebilecek kafa pozunun hesaplanması.

Önyargı telafisi, hareketsizlik tespiti ve hız sınırlaması gibi işlevler , kafa izleme yardımcı program kütüphanesi kullanılarak uygulanabilir.

Uzamsal ses API'leri

Android 13, mekansal ses sistemi ve geliştirici API'leri sunar.

OEM'ler, sistem API'leri tarafından belirlenen özellik kullanılabilirliği ve etkin duruma göre uygulama davranışını uyarlayabilir. Uygulamalar ayrıca estetik nedenlerle uzamsal sesi devre dışı bırakmak veya ses akışının uzamsal ses için zaten işlendiğini belirtmek için ses niteliklerini de yapılandırabilir.

Geliştiriciye yönelik API'ler için Spatializer bakın.

OEM'ler, kullanıcının cihazlarının uzamsal ses durumunu ve kafa izleme özelliğini kontrol etmesini sağlayan 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 uzamsal sesi etkinleştirebilir veya devre dışı bırakabilir. Hoparlörün uzamsal ses ayarı yalnızca uzamsallaştırıcı efekti uygulamasının transaural modu desteklemesi durumunda kullanılabilir.

Kullanıcı ayrıca her cihaz için Bluetooth cihaz ayarında uzamsal ses ve kafa takibini etkinleştirebilir veya devre dışı bırakabilir. Kafa izleme ayarı yalnızca Bluetooth kulaklığın bir kafa izleme sensörünü açığa çıkarması durumunda kullanılabilir.

Özellik destekleniyorsa, uzaysal sesin varsayılan ayarları her zaman AÇIK durumdadır. Sistem API'lerinin tam listesi için Spatializer.java bakın.

Yeni kafa takip sensör tipi Sensor.TYPE_HEAD_TRACKER , Sensor çerçevesine eklenir ve Sensor HAL tarafından Bluetooth veya USB üzerinden dinamik bir sensör olarak kullanıma sunulur.

Uzamsal sesi entegre edin

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

Gereksinimler

Uzamsal sesi entegre etmek için aşağıdaki gereksinimlerin karşılanması gerekir:

  • Ses HAL ve ses DSP'si, uzamsal ses için özel bir çıkış yolunu desteklemelidir.
  • Kafa izleme özelliğine sahip uzamsal ses için kulaklıkların yerleşik kafa izleme sensörlerine sahip olması gerekir.
  • Uygulamanın, Bluetooth kulaklıktan telefona HID protokolü üzerinden kafa takibi için önerilen standarda uygun olması gerekiyor.
  • Uzamsal ses desteği için Ses HAL v7.1 gereklidir.

Aşağıdaki adımları kullanarak uzamsal sesi entegre edin:

  1. device.mk dosyanızda uzamsal ses desteğini aşağıdaki şekilde bildirin:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Bu, AudioService mekansallaştırıcı desteğini başlatmasına neden olur.

  2. audio_policy_configuration.xml dosyasında uzamsal ses karışımı için özel çıkışı aşağıdaki şekilde 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 dosyasında aşağıdaki gibi 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. Uzaylaştırıcı efektini uygulayan satıcıların aşağıdakilere uyması gerekir:

    • Temel konfigürasyon ve kontrol, Efekt HAL'deki diğer efektlerle aynıdır.
    • Çerçevenin desteklenen yetenekleri ve yapılandırmayı keşfetmesi için gereken belirli parametreler, örneğin:

      • 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 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 sesini kullanın.
  • İyi bir kullanıcı deneyimi için sensör hareketi algılamasından kulaklıkların aldığı sese kadar gidiş-dönüş gecikmesi 150 ms'den az olmalıdır.
  • Gelişmiş Ses Dağıtım Profiline (A2DP) sahip Bluetooth (BT) Classic için:
    • Opus gibi düşük gecikmeli bir codec bileşeni kullanın.
    • Ses HAL'inde gecikme kontrolü işlevlerini uygulayın. Bu, kafa takibi kapalıyken güç ve performans optimizasyonuna olanak tanır ve optimum olmayan koşullar sırasında kafa takibini devre dışı bırakır.

Doğrulama

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

Uzamsallaştırma veya kafa izleme algoritmalarının kötü uygulanması, Öneriler'de listelenen gidiş-dönüş gecikme önerisinin karşılanamamasına neden olabilir.