Android ses özelliğinde, ses sistemi türünü temsil etmek için audio_devices_t
kullanılır. İnsanların
ses kaynak kodunda bir veya daha fazla öğeyi filtrelemek veya seçmek için bit alanı olarak yaygın bir şekilde kullanılır
belirtilen cihazlar. Android 11'den önce bu sınır 30'du
ses giriş/çıkış cihazı türlerine sahip olabilir, yeni ses cihazı türleri eklemek için yedek yuva yoktur. Biz
izin verilecek ses cihazı türü sayısı sınırlaması kaldırıldı
yeni ses sistemi türü eklenecek.
Ses cihazı türlerinin sayısıyla ilgili sınırı kaldırmak için ses cihazı türleri artık numaralandırılmış değerleri kullanır.
Mevcut tüm ses sistemi türleri olduğu gibi korunur. AUDIO_DEVICE_BIT_IN
giriş veya çıkış cihazlarını ayırt etmek için kullanılmaya devam eder. Yeni ses sistemi türleri eklenirken, bu türler
Numaralanmış değerleri mevcut değerler arasındaki boşluklarda bulabilirsiniz.
audio_devices_t
, OEM'ler tarafından bit maskesi olarak kullanılmamalıdır.
yeni numaralandırılmış ses cihazı türleri eklendiğinde beklenmedik sonuçlar alınır.
Örnekler ve kaynak
Android 11'den önce ses sistemleri iki tipik kullanılıyordu olarak tanımlıyor.
- Birden çok ses cihazını temsil etmek için
audio_devices_t
değeri kullanılıyor. audio_devices_t
değerinin ses sistemi türleri içerip içermediği kontrol ediliyor belirli bir kategoriden seçebilirsiniz.
Birden çok ses sistemi türünü temsil etmek için, DeviceTypeSet
/libaudiofoundation/include/media/AudioContainers.h
, audio_devices_t
öğesinin std::set
kapsayıcısı olan kullanılır. İlgili içeriği oluşturmak için kullanılan
sınıfı, tedarikçi firma tarafından kullanılabilir durumda
libaudiofoundation
kitaplığı. Temsil etmek için
birden çok ses
C kodundaki cihaz türleri, bir dizi veya audio_devices_t
listesi kullanılabilir.
Tek bir cihaz türünün belirli bir kategoride olup olmadığını kontrol etmek için yardımcı işlevleri kullanın
içinde audio_is_.*_device
/system/media/audio/include/system/audio.h
.
Birden fazla ses sistemi türü durumu için libaudiofoundation
içindeki yardımcı işlevleri kullanın. Örneğin,
örnek olarak,
areAllOfSameDeviceType (DeviceTypeSet, std::function
içinde
AudioContainers.h
ile belirtilen tüm ses sistemi türlerinin
aynı türdedir.
Uygulama
OEM'lerin, ses cihazı türü bit alanı temsilini ses HAL uygulamasından kaldırması gerekir.
- Bir bit alanındaki tüm cihaz depolamalarını kaldırın.
audio_devices_t
, birden çok ses cihazını temsil etmek için kullanılmamalıdır bulunur. Bunun yerine bir liste veya vektör kullanın. - Cihaz türü karşılaştırmaları için bit işlemleri kullanmayı durdurun.
Android 11'den önceki sürümlerde ses sistemi türleri, bitfield'ı kullanır. Bu durumda, cihaz türleri için bit işlemleri yaygındır. en iyi uygulamaları görelim. Yeni, numaralandırılmış ses cihazı türleri eklendiğinde bit işlemleri, beklenmedik sonuçlar. Bunun yerine, yardımcı işlevleri kullanabilirsiniz. Tek bir ses cihazı türünü seçin, ardından iki değeri karşılaştırmak için doğrudan karşılaştırmayı kullanın. Sesin yayınlanıp yayınlanmadığını cihaz türü belirli bir kategorideyse,
/system/media/audio/include/system/audio.h
değerleridir. Örneğin,audio_is_output_device(audio_devices_t device)
- Ses sistemi türü grupları için önceden tanımlanmış değerleri kullanmayı durdurun.
Ses sistemi türü grupları için önceden tanımlanmış değerler vardır.
AUDIO_DEVICE_OUT_ALL
, inçsystem/media/audio/include/system/audio-base-utils.h
. Tüm bu değerler ayrılmış ancak yeni numaralandırma yapıldığında doğru olmayacağı için kullanımdan kaldırılabilir ses cihazı türleri eklendi. Şurada tanımlanmış yeni ses cihazı türü grupları var:audio-base-utils.h
, şunlar gibi ses cihazı türleri dizisidir:AUDIO_DEVICE_OUT_ALL_ARRAY
. create_audio_patch()
verelease_audio_patch()
uygulayın yönlendirme yöntemleri içinset_parameters
yöntemini kullanmalısınız.set_parameters
yöntemi, ses cihazı türlerini bit alanı olarak kullanır. Dolayısıyla, yeni numaralandırılmış ses cihazı türleri eklenirse beklenmedik sonuçlar alınır.Şu anda iki tür ses yaması gerekmektedir:
- Oynatmak için Mix to cihaz yamalarını kullanın
- Yamaları karıştırarak kayıt için kullanılacak cihaz
Sonraki güncellemelerde cihazlar arası yamalar gerekebilir.
Ses yaması oluştururken yama herkese açık kullanıcı adı belirtildiğinde, ses HAL'sinin kullanılması gereken benzersiz bir yama tanımlamasına yardımcı olur. Aksi halde ses HAL'si, ses yamasını güncellemek için belirtilen ses yaması tutma yerini kullanmalıdır.
Eski bir ses HAL'si ve AOSP HIDL sarmalayıcı kullanıyorsanız eski ses HAL'si ayarlanmalıdır. ana HAL sürümünü 3.0'a yükseltin.
Ses yaması özelliğini etkinleştirmek için ses HAL'sinin ayarlanması gerekir. ana HAL sürümünü 3.0 veya daha yüksek.
Device::supportsAudioPatches()
bölümüne bakın varsayılan HIDL uygulaması bakın.
Özelleştirme
Özelliğin kapatılması veya olanak tanıyan temel çerçevedir.
Eklenen tüm ses sistemi türleri, tek bir bit grubu ile cihaz türünün temsil edilmesine olanak tanır. mevcut HAL uygulamaları çalışmaya devam ediyor.
Yeni ses cihazı türleri eklenirse ve OEM'ler bunları kullanmak isterse
ses HAL uygulamasını yükseltmeleri ve HIDL 6.0 veya daha yeni bir sürüme geçmeleri gerekiyor. İnsanların
ana HAL sürümünü 3.0'a yükseltmek ve
create_audio_patch
ve release_audio_patch
yöntemleri, çünkü
Akışı yönlendirmek için set_parameters
kullanılması, şu durumlarda beklenmedik sonuçlara neden olabilir:
yeni ses sistemi türü eklendiğinde.
Doğrulama
OEM'lerin yapması gereken işlem, HAL uygulamalarını güncellemektir. Şunun için VTS: ses HAL'si, uygulamanın istenen şekilde çalışıp çalışmadığını doğrulamak için kullanılabilir. Tümü tüm ayrıntıları VTS dosyaları.