Android seste, ses cihazı türünü temsil etmek için audio_devices_t
kullanılır. Belirtilen bir veya daha fazla cihazı filtrelemek veya seçmek için ses kaynak kodunda bir bit alanı olarak yaygın olarak kullanılır. Android 11'den önce, 30 ses giriş/çıkış cihazı türü sınırı vardı ve yeni ses cihazı türleri eklemek için yedek yuva yoktu. Yeni ses cihazı türlerinin eklenmesine izin vermek için ses cihazı türü sayısındaki sınırı kaldırdık.
Ses cihazı türlerinin sayısındaki sınırı kaldırmak için, ses cihazı türleri artık bit maskeleri yerine numaralandırılmış değerlerdir.
Mevcut tüm ses cihazı türleri olduğu gibi tutulur. AUDIO_DEVICE_BIT_IN
hala giriş veya çıkış cihazlarını ayırt etmek için kullanılıyor. Yeni ses cihazı türleri eklenirken, bunlar mevcut değerler arasındaki boşluklarda numaralandırılır.
OEM'ler audio_devices_t
bit maskesi olarak kullanmamalıdır; çünkü bu, yeni numaralandırılmış ses aygıtı türleri eklendiğinde beklenmeyen sonuçlara neden olabilir.
Örnekler ve kaynak
Android 11'den önce ses cihazı türlerinin bit maskeleri olarak iki tipik kullanımı vardı.
- Birden fazla ses cihazını temsil etmek için
audio_devices_t
değerinin kullanılması. -
audio_devices_t
değerinin belirli bir kategorideki ses cihazı türlerini içerip içermediği kontrol ediliyor.
Birden çok ses cihazı türünü temsil etmek için, /libaudiofoundation/include/media/AudioContainers.h
dosyasındaki DeviceTypeSet
adlı bir sınıf kullanılır; bu, audio_devices_t
öğesinin std::set
kapsayıcısıdır. Sınıf, satıcının sunduğu libaudiofoundation
kütüphanesinde bildirildi. C kodunda birden fazla ses cihazı tipini temsil etmek için audio_devices_t
dizisi veya listesi kullanılabilir.
Tek bir cihaz türünün belirli bir kategoride olup olmadığını kontrol etmek için /system/media/audio/include/system/audio.h
dosyasındaki audio_is_.*_device
yardımcı işlevlerini kullanın. Birden fazla ses cihazı türü durumunda libaudiofoundation
yardımcı işlevleri kullanın. Örneğin, areAllOfSameDeviceType (DeviceTypeSet, std::function )
kullanınareAllOfSameDeviceType (DeviceTypeSet, std::function )
verilen tüm ses cihazı türlerinin aynı türde olup olmadığını kontrol etmek için AudioContainers.h
.
Uygulama
OEM'lerin ses cihazı türü bit alanı temsilini ses HAL uygulamasından kaldırması gerekir.
- Bir bit alanındaki tüm aygıt depolama alanlarını kaldırın.
audio_devices_t
birden fazla ses cihazı türünü temsil etmek için kullanılmamalıdır. Bunun yerine bir liste veya vektör kullanın. - Cihaz türleri karşılaştırmaları için bit işlemlerini kullanmayı bırakın.
Android 11'den önce ses cihazı türleri bit alanı olarak kullanılabiliyordu. Bu durumda, cihaz türleri karşılaştırmaları için bit işlemlerinin kullanılması yaygındır. Yeni, numaralandırılmış ses aygıtı türleri eklendiğinde bit işlemleri beklenmeyen sonuçlara neden olabilir. Bunun yerine alternatif olarak yardımcı işlevleri kullanın. Tek bir ses cihazı türü varsa iki değeri karşılaştırmak için doğrudan karşılaştırmayı kullanın. Bir ses cihazı türünün belirli bir kategoride olup olmadığını kontrol etmek için
/system/media/audio/include/system/audio.h
dosyasındaki yardımcı işlevleri kullanın. Örneğin,audio_is_output_device(audio_devices_t device)
. - Ses cihazı türleri grupları için önceden tanımlanmış değerleri kullanmayı bırakın.
system/media/audio/include/system/audio-base-utils.h
ses cihazı türleri grupları içinAUDIO_DEVICE_OUT_ALL
önceden tanımlanmış bazı değerler vardır. Bu değerlerin tümü ayrılmıştır ancak yeni numaralandırılmış ses aygıtı türleri eklendiğinde doğru olmayacağından kullanımdan kaldırılabilir.audio-base-utils.h
dosyasında tanımlanan,AUDIO_DEVICE_OUT_ALL_ARRAY
gibi ses cihazı türlerinin dizileri olan yeni ses cihazı türleri grupları vardır. - Yönlendirme için
set_parameters
yerinecreate_audio_patch()
release_audio_patch()
yöntemlerini uygulayın.set_parameters
yöntemi ses aygıtı türlerini bir bit alanı olarak kullanır; bu nedenle yeni numaralandırılmış ses aygıtı türleri eklenirse beklenmeyen sonuçlar ortaya çıkabilir.Şu anda iki tür ses yaması gereklidir:
- Oynatma için cihaz yamalarına karıştırın
- Kayıt için yamaları karıştırmaya yönelik cihaz
Sonraki güncellemelerde cihazdan cihaza ek yamalar gerekebilir.
Bir ses yaması oluştururken, yama tanıtıcısı belirtilmemişse, ses yamasını tanımlayabilecek benzersiz bir yama tanıtıcısı oluşturmak için ses HAL'i gerekir. Aksi takdirde, ses HAL'inin, ses yamasını güncellemek için verilen ses yaması tanıtıcısını kullanması gerekir.
Eski bir ses HAL ve AOSP HIDL sarıcı kullanılıyorsa eski ses HAL, ana HAL sürümünü 3.0'a ayarlamalıdır.
Ses yaması özelliğini etkinleştirmek için ses HAL'inin ana HAL sürümünü 3.0 veya daha yükseğe ayarlaması gerekir. Daha fazla bilgi için varsayılan HIDL uygulamasında
Device::supportsAudioPatches()
konusuna bakın; bu bilgilere ayrıca Mürekkepbalığı için ses HAL'sinde de ulaşılabilir.
Özelleştirme
Özelliği kapatmak veya ses cihazı türlerinin eklenmesini mümkün kılan çerçevede ses cihazının yeniden düzenlenmesini geri almak mümkün değildir.
Eklenen ses cihazı türlerinin tümü, bir cihaz türünün tek bir bit kümesiyle temsil edilmesine olanak tanır; dolayısıyla mevcut HAL uygulamaları çalışmaya devam eder.
Yeni ses cihazı türleri eklenirse ve OEM'ler bunları kullanmak isterse ses HAL uygulamalarını yükseltmeleri ve HIDL sürüm 6.0 veya üstüne geçmeleri gerekir. Ana HAL sürümünü 3.0'a yükseltmek ve create_audio_patch
release_audio_patch
yöntemlerini uygulamak zorunludur; çünkü akışı yönlendirmek için set_parameters
kullanmak, yeni ses cihazı türleri eklendiğinde beklenmeyen sonuçlara neden olabilir.
Doğrulama
OEM'lerin yapması gereken iş HAL uygulamalarını güncellemektir. Ses HAL'si için VTS, uygulamanın amaçlandığı gibi çalışıp çalışmadığını doğrulamak için kullanılabilir. Tüm testler VTS dosyalarında bulunabilir.