Ses HAL'ı

Android'in ses Donanım Soyutlama Katmanı (HAL) yüksek seviyeli, görsel-spesifik çerçeve API'leri bağlayan android.media yatan ses sürücüleri ve donanım. Audio HAL, ses servislerinin çağırdığı standart arabirimi tanımlar. Ses donanımının doğru çalışması için uygulanması gerekir.

Bu sayfa, sesli HAL'a genel bir bakış sunar ve API'si ve uygulama gereksinimlerinin ayrıntılarını sağlar.

Ses HAL arayüzü

Ses HAL arayüzü kullanılarak tanımlanır HIDL içinde .hal dosya ve XSD aşağıda gösterilen konfigürasyon dosyaları için şemalar:

audio_hal

Şekil 1: Ses HAL arayüzü

Yapılandırma dosyaları

Ses ilkesi ve ses efektleri XML yapılandırma dosyalarının Audio HAL arabiriminin parçası olduğu kabul edilir. Bu dosyalar şemalarına uygun olmalıdır ve uygunluk VTS testleri ile doğrulanır.

Ses HAL uygulamasının bir parçası olarak, bir oluşturmalısınız ses ilke yapılandırma dosyası ses topoloji açıklanmaktadır. Ses HAL yetenekleri beyan edilmelidir audio_policy_configuration.xml bunları kullanmak için çerçeve için dosyanın.

Ses HAL API'sı

Ses HAL'i aşağıdaki API'leri içerir:

  • çekirdek HAL
  • Etkiler HAL
  • Ortak HAL

Bu API'lerin her biri aşağıdaki bölümlerde açıklanmıştır.

çekirdek HAL

Core HAL, AudioFlinger tarafından ses çalmak ve ses yönlendirmesini kontrol etmek için kullanılan ana API'dir. Anahtar arayüzlerden bazıları aşağıdaki gibidir:

  • IDeviceFactory.hal API içine giriş noktasıdır.
  • IDevice.hal ve IPrimaryDevice.hal gibi yöntemler içerir setMasterVolume veya openInputStream .
  • Akışları tek yönlüdür ve göndermek için AudioFlinger tarafından kullanılan veya ve içinden HAL'ye ses almak IStream.hal , IStreamOut.hal ve IStreamIn.hal .

Aşağıdaki tablo, yararlı Core HAL bileşenlerinin konumunu listeler:

Çekirdek HAL bileşeni Konum
API'nin en son sürümü /hardware/interfaces/audio/6.0
En son Core HAL API'sine özgü türler /hardware/interfaces/audio/6.0/types.hal
Ses ilkesi yapılandırma dosyası XSD şeması /hardware/interfaces/audio/6.0/config/audio_policy_configuration.xsd

Çekirdek HAL API (varsayılan uygulaması /hardware/interfaces/audio/core/all-versions/default/ ) olan bir sarıcı kullanarak etrafında önceden Tiz HAL uygulama mirası paylaşılan kütüphaneleri . Varsayılan uygulama, doğrudan çekirdek sürücüleriyle etkileşime giren ses HAL'lerinin yeni sürümlerini uygularken bir referans olarak kabul edilebilir.

Etkiler HAL

Effects HAL API, efekt çerçevesi tarafından ses efektlerini kontrol etmek için kullanılır. Ayrıca yapılandırmak için önceden işleme etkilerini böyle Etkileri HAL API aracılığıyla otomatik kazanç kontrolü ve gürültü bastırma gibi.

Aşağıdaki tablo, faydalı Effects HAL bileşenlerinin konumunu listeler:

HAL bileşenini etkiler Konum
API'nin en son sürümü /hardware/interfaces/audio/effect/6.0/
Efekt yapılandırma dosyası XSD şeması /hardware/interfaces/audio/effect/6.0/xml/audio_effects_conf.xsd

Daha fazla bilgi için, Etkileri API (bir örnek uygulama görmek /hardware/interfaces/audio/effect/all-versions/default/ ) ve Ses Efektleri bölümünde.

Ortak HAL

Ortak HAL, Core ve Effects HAL API'leri tarafından kullanılan ortak veri türlerinden oluşan bir kitaplıktır. Yalnızca veri yapılarını tanımladığı için arabirimleri ve ilişkili VTS testleri yoktur. Ortak HAL API aşağıdakileri içerir:

  • Tanımlar ( /hardware/interfaces/audio/common/6.0/types.hal ) Çekirdek ve Efekt API'larının paylaştı.
  • Kamu ( /hardware/interfaces/audio/common/all-versions uygulamaları, müşteri ve testler için HIDL API'leri karşı kodlama yardım için kullanılır).

Gereksinimler

Ses HAL'ını uygulamaya ve ses ilkesi yapılandırma dosyasını oluşturmaya ek olarak, aşağıdaki HAL gereksinimlerine uyulmalıdır:

  • Sound Trigger için yakalama (hotword DSP arabelleğinden yakalama) bir giriş profili tarafından destekleniyorsa, uygulamanın Sound Trigger HAL tarafından desteklenen eşzamanlı oturum sayısına karşılık gelen bu profildeki etkin akış sayısını desteklemesi gerekir.
  • Ayrıntıları gibi uygulama işlemcisi gelen sesli arama TX eşzamanlılık ve yakalama Eşzamanlı Yakalama sayfası.

Audio HAL V7 güncellemeleri

Geriye dönük uyumluluk sorunlarını gidermek için, Android T'yi başlatan tüm HAL değişiklikleri için Kararlı AIDL zorunludur. Android T ve sonraki sürümlerde AIDL'nin benimsenmesini desteklemek ve geliştirmek için Audio HAL V7 aşağıdakileri yapar:

  • Çerçeve ve HAL tarafından kullanılan veri modellerini birleştirir.
  • HIDL veri türleri (sayılar) ile ses ilkesi yapılandırması için kullanılan XML şeması arasındaki yinelemeyi en aza indirir.

Özellikle, ses HAL V7'de aşağıdaki alanlarda değişiklikler yapılmıştır:

Bu değişiklikler ilgili bölümlerinde daha ayrıntılı olarak tartışılmaktadır.

numaralandırmalar

Audio HAL V7'den başlayarak, Audio Policy Configuration dosyasında kullanılan numaralandırılmış türler HIDL'de değil, yalnızca XSD şemasında tanımlanmıştır.

Ses HAL V6 yılında değerleri enum (gibi tipler AudioFormat olarak) types.hal zamanda bir tekrarını yaratmak, ses ilke yapılandırma dosyası XSD şemada tanımlanmıştır. V7 içinde Bundan kaçınmak için, enum türleri değiştirilir string ve tüm olası numaralandırma değerleri yerine XSD şemada listelenmiştir.

Bkz şekil 1 değişiklikler bazılarının bir karşılaştırma için AudioFormat enum V7 tip:

audioformat-change

Şekil 1: Bazı değişiklikler Karşılaştırılması AudioFormat enum

Aşağıdaki listede bakın enum dönüştürülmüş türleri String :

  • AudioChannelMask
  • AudioContentType
  • AudioDevice : satıcıya genişletilebilir
  • AudioFormat : satıcıya genişletilebilir
  • AudioGainMode
  • AudioSource
  • AudioStreamType
  • AudioUsage

Geçme String enum değerleri

Dize değerleri, bilgileri HAL arabirim sınırı boyunca numaralandırma değerleri olarak aktarmak için kullanılır. Çerçevesi ve de gösterilen dönüşüm yaklaşım iş mantığı uygulanması ve istihdam için kullanımı tam sayı numaralandırma değerleri sarma HAL Hem Şekil 2 .

audio-passing-values

Şekil 2: Geçme string enum değerleri

Örnek olarak, çerçeveden satıcıya bir ses formatı türü değeri iletmek için:

  1. enum değeri AudioFormat bir dönüştürülür string değeri libaudiohal ve HAL geçirilir.
  2. HAL tarafında, default wrapper dönüştürür string bir etmek enum eski HAL geçirilir değeri.

XML Şeması değişiklikleri

XML Şemasında (XSD) enum değerlerinin tam listelerine sahip olmak, VTS tarafından daha iyi ses politikası yapılandırması XML dosyası doğrulaması sağlar. HAL V7 ile kullanılan ses ilkesi yapılandırma dosyasında XSD'ye uyum sağlamak için değişiklikler yapıldı.

V7, standart (boşluk) karakteri yerine, (örnekleme oranları, kanal maskeleri ve bayraklarla gibi) özniteliklerde sınırlandırmaktadır değer listelerine kullanılır , (virgül) ve | (dikey çubuk) V6 ve altında kullanılan semboller. Aşağıdaki örnekte görüldüğü gibi bir boşluk için değerler listesi ayırmak için kullanılır channelMasks :

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

Sembol değişiklikleri yapmak için denilen bir otomatik dönüştürme komut dosyasını kullanmak update_audio_policy_config.sh . Pixel 5 (“Redfin”) cihazı için bir V6 ses ilkesi yapılandırma dosyasını V7 sürümüne dönüştürmek için aşağıdaki komuta bakın:

hardware/interfaces/audio/7.0/config/update_audio_policy_config.sh \
device/google/redfin/audio/audio_policy_configuration.xml 6.0

Veri tipleri

Yinelenen tanımları en aza indirmek için bazı veri yapıları V7'de yeniden tanımlanmıştır. Tekrarlanan veri öğeleri demetleri, yeniden kullanılabilir yapılar halinde gruplandırılır. Bu veri yapıları, güvenli birleşimler gibi en son HIDL özelliklerini kullanır.

Örneğin, aşağıda V6 ve bir üçlü <format, sampling rate, channel mask> HIDL arayüzleri ve tipler, sıklıkla kullanılmaktadır. V7 olarak, bu fazlalık kaldırmak için, AudioConfigBase aşağıdaki gibi veri tipi ve diğer veri tipi tanımlanmıştır:

  • AudioConfigBase := <format, sampling rate, channel mask>

  • AudioConfigBaseOptional := <[fmt], [sampl. rate], [chan. mask]>

    tarafından kullanılan AudioConfig , AudioOffloadInfo , AudioPortConfig

  • AudioProfile := <format, {sampling rates}, {channel masks}>

    içinde gevşek koleksiyonları yerini AudioPort/PortConfig

  • AudioPortExtendedInfo := device | mix | session

    sendikalar yerini AudioPort/PortConfig

Satıcı Etiketleri

Cihaz türleri ve biçimlerine ek olarak, satıcılar ses parçası meta verileri için özel etiketler ekleyebilir.

Parça meta verilerini oynatmak ve kaydetmek için satıcılar, uygulamalardan HAL'a ses G/Ç akışlarına nitelikler eklemek için kullanılan kendi etiketlerini iletebilir.

Oynatma parçası meta verileri için satıcı etiketleri aşağıdaki örnekte görüldüğü gibi eklenir:

struct PlaybackTrackMetadata {
…
    /** Tags from AudioTrack audio attributes */
    vec<AudioTag> tags;
};

RecordTrackMetadata yapısı kayıt parça meta etiketleri özgü ekleyerek benzer bir şekilde uygulanmaktadır.

Satıcı Uzantıları Ad Alanı

HAL V7 başlayarak, satıcı uzantıları ek gerektirir {vendor} V6 gerekli değildir önek. İçin {vendor} önek geçerli olabilmesi için, üç veya daha fazla alfanümerik karakter olmalıdır.

V7'de aşağıdaki formatı kullanın:

VX_ {satıcı} _ {harfler / sayılar / _}

Aşağıdakiler, geçerli V7 satıcı uzantılarının bazı örnekleridir:

  • VX_ GOOGLE _VR
  • VX_ QCI _AMBIENT_MIC

Versiyon bilgisi

Aşağıdaki tablo, her Android sürümü için HAL sürüm numarasını listeler.

Android sürümü HAL sürümü
Android 12 7.0
Android 11 6.0
Android 10 5.0
Android 9 4.0
Android 8 2.0