Android 11'den itibaren cihaz üreticileri, belirli ses efektlerini otomatik olarak eklemek ve etkinleştirmek için Ses yakalama veya oynatma için seçildi. En büyük gelişmelerden biri de ses efektlerinin, tamamen ses HAL'nin altında uygulanan bir ses yolunda (bir giriş arasındaki doğrudan bağlantı cihaz ve çıkış cihazı) ses efektleri çerçevesi ile kontrol edilebilir.
Bu özellik, öncelikli olarak otomotiv OEM'leri hedeflemektedir ancak diğer Android cihazlarda da kullanılabilir. olabilir. Örnek bir uygulama, FM alıcıya ses geliştirme efekti ekliyor. ses DSP'si üzerinden hoparlöre doğrudan bağlandığında çıkış yapılır.
Ön koşullar
- Diğer ses efektlerinde olduğu gibi efekt bir tedarikçi kitaplığı tarafından uygulanmalı ve listelenmelidir.
audio_effects.xml
yapılandırma dosyasında mevcuttur. - Efekt, ön işleme veya son işleme türünde olmalıdır
(
TYPE_PRE_PROC
veyaTYPE_POST_PROC
'ı işaretleyinEffectDescriptor.flags
içinde ayarlandı). - Efekt uygulaması HW hızlandırılmışsa
(
HW_ACC_TUNNEL
işaretiEffectDescriptor.flags
içinde ayarlandı), tamamen HAL'nin altında bağlı bir ses yoluna eklenebilir (çalma yok veya ses HAL'sinde açılmış olan ses akışını yakalamayı deneyin).
Cihaz efekti oluşturup etkinleştirme
Cihaza özgü ses efektleri, aşağıdaki iki yöntemden biri kullanılarak örneklenebilir.
Ses efektleri yapılandırma dosyası kullanma
Bu yöntem, sistematik olarak eklenen ses efektlerinin statik oluşturulmasına olanak tanır. ve belirli bir cihazı havuz veya kaynak olarak seçen herhangi bir ses yoluna etkinleştirilir.
Bu işlem, audio_effects.xml
uygulamasına belirli bir bölüm ekleyerek
dosyası olarak oluşturmanız gerekir:
<deviceEffects> <devicePort type="AUDIO_DEVICE_IN_BUILTIN_MIC" address="bottom"> <apply effect="agc"/> </devicePort> </deviceEffects>
Sistem API'si kullan
Yeni bir @SystemApi kurucusu
Bir cihaz efekti oluşturmak ve etkinleştirmek için android.media.audiofx.AudioEffect
sınıfı:
AudioEffect(@NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
Benzersiz ses efekti kimliği ve ses cihazı tanımlayıcısı belirtilerek efekt oluşturulduktan sonra mevcut AudioEffect API'leriyle etkinleştirilebilir veya devre dışı bırakılabilir.
Uygulamanın belirli bir cihaz/efekt kombinasyonunu destekleyip desteklemediğini sorgulamak için de bir API kullanılabilir.
static boolean isEffectSupportedForDevice( @NonNull UUID uuid, @NonNull AudioDeviceAttributes device);
Yeni HAL API'leri
Ses efekti HAL'si
Ses efekti HAL V6.0, createEffect()
yöntemi için yeni bir imzaya sahip
Cihaza ekli bir efekt oluşturulmasına izin verir:
IEffectFactory::createEffect(Uuid uid, AudioSession session, AudioIoHandle ioHandle, AudioPortHandle device)
- Belirtilen
AudioSession
,AudioSessionConsts.DEVICE
olmalıdır. session
değeri şuysaAudioIoHandle
yoksayılır:AudioSessionConsts.DEVICE
.device
, cihaz şu konumda seçildiğinde ses çerçevesi tarafından atanan benzersizAudioPortHandle
ile tanımlanırIDevice::createAudioPatch()
yöntemiyle ses HAL'si.
Ses HAL'si
Cihaz efekti özelliğinin desteklenmesi için ses HAL'sinin ses yönlendirmeyi uygulaması gerekir.
kontrolü için IDevice::createAudioPatch()
API'yi kullanın. Bu,
IDevice::supportsAudioPatches()
yöntemi true
raporluyor.
İki yeni API yöntemi,
IDevice::addDeviceEffect(AudioPortHandle device, uint64_t effectId)
ve
IDevice::removeDeviceEffect(AudioPortHandle device, uint64_t effectId)
HAL uygulamasına, şurada bir cihaz etkisinin etkinleştirildiğini veya devre dışı bırakıldığını bildirin:
karar verebilirsiniz.
Cihaz, ses çaldığında kullanılan AudioPortHandle
kimliğiyle tanımlanır.
yama, IDevice::createAudioPatch()
yöntemiyle oluşturulur.
Bir efekt etkinleştirildiğinde veya devre dışı bırakıldığında ses ve efekt HAL'leri.