Ses HAL'i

Android'in ses Donanım Soyutlama Katmanı (HAL), android.media üst düzey, sese özel çerçeve API'lerini temel ses sürücülerine ve donanımına bağlar. 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 arabirimi, .hal dosyalarında HIDL ve aşağıda gösterildiği gibi yapılandırma dosyaları için XSD şemaları kullanılarak tanımlanır.

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'ını uygulamanın bir parçası olarak, ses topolojisini açıklayan bir ses ilkesi yapılandırma dosyası oluşturmalısınız. Çerçevenin bunları kullanabilmesi için ses HAL yetenekleri audio_policy_configuration.xml dosyasında bildirilmelidir.

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'ye giriş noktasıdır.
  • IDevice.hal ve IPrimaryDevice.hal , setMasterVolume veya openInputStream gibi yöntemler içerir.
  • Akışlar tek yönlüdür ve AudioFlinger tarafından IStream.hal, IStreamOut.hal ve IStreamIn.hal aracılığıyla IStream.hal ses göndermek veya almak için kullanılır.

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

Core HAL API'sinin ( /hardware/interfaces/audio/core/all-versions/default/ ) varsayılan uygulaması, eski paylaşılan kitaplıkları kullanan Tiz öncesi HAL uygulaması etrafındaki bir sarmalayıcıdır. 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, Effects HAL API aracılığıyla otomatik kazanç denetimi ve gürültü bastırma gibi ön işleme efektlerini de yapılandırabilirsiniz.

Aşağıdaki tablo, yararlı 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, Effects HAL API'sinin ( /hardware/interfaces/audio/effect/all-versions/default/ ) örnek uygulamasına ve Ses Efektleri bölümüne bakın.

Ortak HAL

Ortak HAL, Core ve Effects HAL API'leri tarafından kullanılan ortak veri türlerinin bir kitaplığıdı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:

  • Core ve Effect API'leri tarafından paylaşılan tanımlar ( /hardware/interfaces/audio/common/6.0/types.hal )
  • Uygulamalar, istemciler ve testler için HIDL API'lerine karşı kodlamaya yardımcı olmak için kullanılan yardımcı programlar ( /hardware/interfaces/audio/common/all-versions )

Gereksinimler

Ses HAL'sini 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.
  • Eşzamanlı Yakalama sayfasında ayrıntılı olarak açıklandığı gibi, sesli arama TX ve uygulama işlemcisinden yakalama eşzamanlılığı.

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'da, types.hal içindeki enum türlerinin ( AudioFormat gibi) değerleri de ses ilkesi yapılandırma dosyası XSD şemasında tanımlanarak bir çoğaltma oluşturulur. V7'de bundan kaçınmak için, numaralandırma türleri string olarak değiştirilir ve bunun yerine tüm olası numaralandırma değerleri XSD şemasında listelenir.

AudioFormat numaralandırma türündeki bazı değişikliklerin karşılaştırması için şekil 2'ye bakın.

audioformat-change

Şekil 2. AudioFormat enumdaki bazı değişikliklerin karşılaştırılması

String dönüştürülmüş enum türleri için aşağıdaki listeye bakın:

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

dize numaralandırma değerlerini iletin

Dize değerleri, bilgileri HAL arabirim sınırı boyunca numaralandırma değerleri olarak aktarmak için kullanılır. Hem çerçeve hem de HAL sarmalayıcı, iş mantığını uygulamak için tamsayı enum değerlerini kullanır ve şekil 3'te gösterilen dönüştürme yaklaşımını kullanır.

audio-passing-values

Şekil 3. String enum değerlerinin iletilmesi

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

  1. AudioFormat'ın enum değeri, AudioFormat bir dize değerine dönüştürülür ve libaudiohal iletilir.
  2. HAL tarafında, varsayılan sarmalayıcı, dizeyi eski HAL'e geçirilen bir numaralandırma değerine dönüştürür.

XML şeması değişiklikleri

XML şema tanımı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'de, özniteliklerdeki (örnekleme oranları, kanal maskeleri ve bayraklar gibi) değer listelerini sınırlamak için , (virgül) ve | yerine standart bir (boşluk) karakteri kullanılır. (dikey çubuk) V6 ve altında kullanılan semboller. Aşağıdaki örnekte görüldüğü gibi, channelMasks değer listesini sınırlamak için bir boşluk kullanılır:

<profile channelMasks="AUDIO_CHANNEL_OUT_STEREO AUDIO_CHANNEL_OUT_MONO" … />

Sembol değişiklikleri yapmak için update_audio_policy_config.sh adlı otomatik dönüştürme komut dosyasını kullanın. 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, V6 ve altında, HIDL arayüzlerinde ve türlerinde genellikle <format, sampling rate, channel mask> üçlüsü kullanılır. Bu fazlalığı kaldırmak için V7'de AudioConfigBase veri türü ve diğer veri türleri aşağıdaki gibi tanımlanır:

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

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

    AudioConfig , AudioOffloadInfo , AudioPortConfig tarafından kullanılır

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

    AudioPort/PortConfig gevşek koleksiyonların yerini alır

  • AudioPortExtendedInfo := device | mix | session

    AudioPort/PortConfig içindeki sendikaların yerini alır

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'e ses G/Ç akışlarına nitelik 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 izi meta verilerine özel etiketler eklenerek benzer bir şekilde uygulanır.

Satıcı uzantıları ad alanı

HAL V7'den başlayarak, satıcı uzantıları, V6'da gerekli olmayan ek bir {vendor} öneki gerektirir. {vendor} önekinin geçerli olması için üç veya daha fazla alfasayısal karakterden oluşması gerekir.

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

VX_{ vendor }_{ letters/numbers }

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