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.
Ş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
veIPrimaryDevice.hal
,setMasterVolume
veyaopenInputStream
gibi yöntemler içerir. - Akışlar tek yönlüdür ve AudioFlinger tarafından IStream.hal,
IStreamOut.hal
veIStreamIn.hal
aracılığıylaIStream.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.
Ş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.
Şekil 3. String enum değerlerinin iletilmesi
Örnek olarak, çerçeveden satıcıya bir ses formatı türü değeri iletmek için:
- AudioFormat'ın enum değeri,
AudioFormat
bir dize değerine dönüştürülür velibaudiohal
iletilir. - 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ırAudioProfile := <format, {sampling rates}, {channel masks}>
AudioPort/PortConfig
gevşek koleksiyonların yerini alırAudioPortExtendedInfo := 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 |