Ses seviyesi yönetimi, CarAudioService
içinde bulunur. Bu API, ses seviyelerinin yazılımda değil, HAL'in altında bir donanım amplifikatörü tarafından uygulanması beklentisiyle sabit ses seviyeleri kullanır. CarAudioService
, bir ses seviyesi grubuyla ilişkili tüm cihazlara aynı kazançları uygulamak için çıkış cihazlarını ses seviyesi gruplarına ayırır.
Sabit birimler
AAOS uygulamaları, ses seviyesini kontrol etmek için yazılım karıştırıcı yerine donanım amplifikatörü kullanır. Yan etkileri önlemek için config_useFixedVolume
işaretini true
olarak ayarlayın (gerekirse yer paylaşımı yapın):
<resources>
<!-- Car uses hardware amplifier for volume. -->
<bool name="config_useFixedVolume">true</bool>
</resources>
config_useFixedVolume
işareti ayarlanmadığında (veya false
değerine ayarlandığında) uygulamalar, yazılım karıştırıcıda ses seviyesini akış türüne göre değiştirmek için AudioManager.setStreamVolume()
işlevini çağırabilir. Bu, diğer uygulamalar üzerindeki olası etkiler ve yazılım karıştırıcıdaki ses azaltmanın, donanım amplifikatörü tarafından alındığında sinyaldeki önemli bit sayısının azalmasına neden olabileceği gerçeği nedeniyle her zaman istenmeyebilir.
Ses seviyesi grupları
Ses grupları, bir ses bölgesindeki cihaz koleksiyonunun ses düzeylerini yönetir. Her ses grubu için ses seviyesi bağımsız olarak kontrol edilebilir. Elde edilen kazançlar, ilişkili cihazlarda aracın amplifikatörü tarafından uygulanacak şekilde yapılandırılır. Ses ayarları kullanıcı için kalıcı olur ve kullanıcı oturum açtığında yüklenir.
Hacim gruplarını tanımlama
CarAudioService, car_audio_configuration.xml
içinde tanımlanan ses gruplarını kullanır:
<audioZoneConfiguration version="2.0">
<zones>
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
...
</volumeGroups>
</zone>
</zones>
</audioZoneConfiguration>
Her ses grubu, ilişkili adreslere sahip bir veya daha fazla çıkış cihazı içermelidir. Adresler, audio_policy_configuration.xml
dosyasında tanımlanan çıkış cihazlarına karşılık gelmelidir.
Hacim grubu kazançlarını yapılandırma
Her ses grubu, minimum, maksimum ve varsayılan kazanç değerlerinin yanı sıra ses grubuyla ilişkili cihazlar için audio_policy_configuration.xml
'te yapılandırılan değerlere dayalı bir adım boyutuna sahiptir.
<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
Hacim grubu, başlatma sırasında ilişkili cihazların kazanç değerlerini kontrol eder ve grubu aşağıdaki gibi yapılandırır:
- Adım boyutu. Ses grubu tarafından kontrol edilen tüm cihazlar için aynı olmalıdır.
- Minimum kazanç. Gruptaki cihazlar arasında en küçük minimum kazanç.
- Maksimum kazanç. Gruptaki cihazlar arasında en yüksek maksimum kazanç.
- Varsayılan kazanç. Gruptaki cihazlar arasında en yüksek varsayılan kazanç.
Bu değerlerin yapılandırılma şekli göz önüne alındığında, bir ses grubuyla ilişkili bir cihaz için ses grubunun kazancını desteklenen aralığın dışında ayarlamak mümkündür. Bu durumda, ilgili cihaz için kazanç, ses grubu değerinin aralığın altında veya üstünde olup olmadığına bağlı olarak cihazın minimum veya maksimum kazanç değerine ayarlanır.
Ses grubu tanımlayıcılar
Ses grupları, XML dosyasında tanımlanan sırada çalışma zamanında tanımlanır.
Ses bölgesindeki kimlikler 0
ile N-1
arasındadır. Burada N
, söz konusu bölgedeki ses seviyesi gruplarının sayısıdır. Bu nedenle, kitap grubu kimlikleri bölgeler arasında benzersiz değildir. Bu tanımlayıcılar, birim gruplarıyla ilişkili CarAudioManager
API'leri için kullanılır. zoneId
olmadan groupId
alan tüm API'ler varsayılan olarak birincil ses bölgesini kullanır.
Çoklu bölgeli birim yönetimi
Her ses bölgesinin bir veya daha fazla ses seviyesi grubuna sahip olması ve her ses seviyesi grubunun yalnızca tek bir ses bölgesiyle ilişkilendirilmesi gerekir. Bu ilişki, car_audio_configuration.xml
kapsamında tanımlanır. Daha fazla bilgi için Ses seviyesi gruplarını tanımlama bölümündeki yukarıdaki örneği inceleyin.
Her bölgenin mevcut ses seviyeleri, ilgili bölgeyle ilişkili kullanıcı için korunur. Bu ayarlar bölgeye özeldir. Yani bir kullanıcı birincil bölgeyle ilişkili bir ekranda oturum açıp daha sonra ikincil ses bölgesiyle ilişkili bir bölgede oturum açarsa ilk bölge için yüklenen ve kalıcı olan ses seviyeleri ikincil bölgeninkilerden farklıdır.
Ses seviyesi tuşu etkinliklerini işleme
Android, ses seviyesi kontrolü için aşağıdakiler gibi çeşitli tuş kodları tanımlar:
KEYCODE_VOLUME_UP
KEYCODE_VOLUME_DOWN
KEYCODE_VOLUME_MUTE
Android varsayılan olarak ses tuşu etkinliklerini uygulamalara yönlendirir. Otomotiv uygulamalarında bu önemli etkinliklerin CarAudioService
tarafından işlenmesi zorunlu kılınmalıdır. CarAudioService
daha sonra uygun şekilde setGroupVolume
veya setMasterMute
'yi çağırır. Bu davranışı zorlamak için config_handleVolumeKeysInWindowManager
işaretini true
olarak ayarlayın:
<resources>
<bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>
Ses seviyesi önemli etkinlikleri şu anda hangi bölge için tasarlandığını ayırt edemez ve hepsinin birincil ses bölgesiyle ilişkili olduğu varsayılır. Bir ses seviyesi tuşu etkinliği alındığında CarAudioService
, etkin oynatıcıların ses bağlamlarını getirerek ve ardından en yüksek öncelikli ses bağlamıyla ilişkili çıkış cihazını içeren ses seviyesi grubunu ayarlayarak hangi ses seviyesi grubunun ayarlanacağını belirler. Önceliklendirme, CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY
adresinde tanımlanan sabit bir sıralamaya göre belirlenir.
Karartma ve denge
AudioControl HAL'ın her iki sürümü de araçta fade ve denge ayarlamak için API'ler içerir. CarAudioManager için ilgili sistem API'leri, değerleri AudioControl HAL'e iletir. Bu API'ler için android.car.permission.CAR_CONTROL_AUDIO_VOLUME
gereklidir. AudioControl API'leri şunlardır:
setBalanceTowardRight(float value)
, hoparlör sesini aracın sağ (+) veya sol (-) tarafına kaydırır.- 0,0 merkezdedir
- +1,0 tamamen doğru
- -1,0 tamamen solda
- -1 ile 1 arasındaki aralığın dışındaki değerler hata olarak değerlendirilir.
setFadeTowardFront(float value)
, hoparlör ses seviyesini aracın ön tarafına (+) veya arka tarafına (-) doğru kaydırır.- 0,0 merkezdedir
- +1.0 tamamen ileri
- -1,0 tamamen arkaya doğrudur.
- -1 ile 1 arasındaki aralığın dışındaki değerler hata olarak değerlendirilir.
Bu değerlerin nasıl uygulanmasına ve kullanıcılara nasıl gösterileceğine siz karar verirsiniz. Bu ayarlar yalnızca medyaya veya tüm Android seslerine uygulanabilir. Android 11, çıkış cihazlarına ses efektleri uygulama desteği de sunmuştur. Bu sayede, sesin yavaşça azaltılması ve dengesi, bu API'ler yerine uygun çıkış cihazlarındaki ses efektleriyle yönetilebilir.
Sesi kısma
Ses kısma, araç aynı anda çalan başka bir sesin daha net duyulması için bir akıştaki kazancı azalttığında gerçekleşir. AAOS'te ses kısma özelliği HAL tarafından uygulanır. Android, işletim sistemi dışındaki sesler üzerinde hiçbir kontrole sahip değildir. Android 11'de HAL'in ses azaltma kararları vermesi için kullanabileceği temel bilgi, iki çıkış cihazının her ikisinde de etkin yayın olup olmadığıdır.
Ne zaman eğilmelisiniz?
Ses azaltmanın HAL tarafından nasıl ele alınacağını belirlemek OEM'ye bağlıdır ancak aşağıdaki yönergeleri uygulamanızı öneririz.
Android'de birden fazla yayının oynatılması genellikle iki uygulama veya hizmetin aynı anda ses odağına sahip olduğunda gerçekleşir. Android'in ne zaman eşzamanlı odaklanma izni verebileceğini öğrenmek için Kısıtlama türleri bölümündeki etkileşim matrisine bakın. Araç ses eklentisinin kullanıma sunulmasıyla birlikte bu durum, AudioFocus yönetiminize de bağlıdır.
Android tarafından karıştırılan tüm akışlar, kazançlar uygulanmadan önce yapılır. Bu nedenle, başka bir akışla eşzamanlı olarak oynatıldığında ses seviyesi azaltılması gereken tüm akışlar, HAL'in bunları karıştırmadan önce ses seviyesini azaltabilmesi için ayrı çıkış cihazlarına yönlendirilmelidir.
Önerilen eğme davranışı
Aşağıda, ses azaltmanın önerildiği olası eşzamanlı etkileşimler verilmiştir.
Etkileşim | İşlem |
---|---|
EMERGENCY
| SAFETY hariç her şeyi engeller veya sessize alır
|
SAFETY |
EMERGENCY hariç her şeyi engeller |
NAVIGATION |
SAFETY ve EMERGENCY hariç her şeyi atlar |
CALL |
SAFETY , EMERGENCY ve NAVIGATION dışındaki her şeyi atlar |
VOICE |
Ördekler CALL_RING |
VEHICLE_SOUNDS |
Etkin sesin önemini ve diğer sesleri kapatıp kapatmayacağını siz belirlersiniz. |
MUSIC ve ANNOUNCEMENT |
Her şeyden kaçtı. İstisnalar,
SYSTEM_SOUND olarak çalınan dokunma etkileşimi tonlarıdır.
|
Sessiz modu kullanırken dikkat edilmesi gereken noktalar
Navigasyon veya asistan gibi bazı uygulamalar ve hizmetler, işlem yapmak için birden fazla oynatıcı kullanabilir. Bir veri akışı çıkış cihazlarından akmayı durdurduğunda medya ses seviyesinin tam ses seviyesine dönmesini önlemek için sesin kısılmasını bekleyin. Bu sayede, navigasyondan veya bir yardımcı uygulamadan sonraki oynatma işlemine başlamadan önce ses kısılır.
Yeterince iyi yalıtılmış birden fazla ses aralığına sahip araçlarda, sesin sesini azaltmak yerine sesi aracın farklı bölgelerine yönlendirebilirsiniz. Örneğin, kabinde normal ses seviyesinde müzik çalmaya devam ederken navigasyon talimatları sürücünün kafalık hoparlörlerine yönlendirilebilir.
Güvenlik açısından kritik sesler
Android 11'de HAL ses odak API'leri kullanıma sunulmuştur. HAL, güvenlik açısından kritik seslere diğer seslere göre öncelik verilmesini sağlar. HAL, USAGE_EMERGENCY
için ses odağını elinde tutuyorsa Android'deki uygulama ve hizmetlerin ses çalmayacağı garanti edilmez. HAL, güvenlik açısından kritik seslerin çalınması için Android'deki hangi akışların karıştırılması veya sessize alınması gerektiğini belirler.
Ses ayarları kullanıcı arayüzünü yapılandırma
AAOS, ses ayarları kullanıcı arayüzünü ses grubu yapılandırmasından ayırır. Bunlar, Ses grubu kazançlarını yapılandırma bölümünde açıklandığı şekilde üste bindirilebilir. Bu ayrım, birim gruplarının yapılandırması değişirse herhangi bir değişiklik yapılmasını önler.
Araba ayarları kullanıcı arayüzünde packages/apps/Car/Settings/res/xml/car_volume_items.xml
, tanımlanan her AudioAttributes.USAGE
ile ilişkili kullanıcı arayüzü öğelerini (başlık ve simge kaynaklarını) içerir. Bu dosya, her VolumeGroup
içinde bulunan ilk tanınan kullanımla ilişkili kaynakları kullanarak tanımlanan VolumeGroups
için makul bir oluşturma sağlar.
Örneğin, aşağıdaki örnekte VolumeGroup
, voice_communication
ve voice_communication_signalling
içerecek şekilde tanımlanmıştır. Araba ayarları kullanıcı arayüzünün varsayılan uygulaması, dosyada ilk eşleşme olduğu için voice_communication
ile ilişkili kaynakları kullanarak VolumeGroup
öğesini oluşturur.
<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
<item car:usage="voice_communication"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="voice_communication_signalling"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="media"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="game"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="alarm"
car:title="@*android:string/volume_alarm"
car:icon="@*android:drawable/ic_audio_alarm"/>
<item car:usage="assistance_navigation_guidance"
car:title="@string/navi_volume_title"
car:icon="@drawable/ic_audio_navi"/>
<item car:usage="notification_ringtone"
car:title="@*android:string/volume_ringtone"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistant"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="notification"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_request"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_instant"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_delayed"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_event"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_accessibility"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_sonification"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="unknown"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>
Yukarıdaki yapılandırmada kullanılan özellikler ve değerler packages/apps/Car/Settings/res/values/attrs.xml
içinde tanımlanır. Ses ayarları kullanıcı arayüzü, aşağıdaki VolumeGroup
tabanlı CarAudioManager API'lerini kullanır:
getVolumeGroupCount()
'e giderek kaç kontrol çizilmesi gerektiğini öğrenin.getGroupMinVolume()
vegetGroupMaxVolume()
alt ve üst sınırları elde etmek için.getGroupVolume()
komutunu kullanarak mevcut ses seviyesini öğrenebilirsiniz.registerVolumeChangeObserver()
adresine gönderin.
Araba sesi grubu etkinliği
Ses seviyesi güncelleme ve sessize alma düğmesinin otomotiv kullanım alanları, ses seviyesi ayarları gibi belirli uygulamaların işlemlerini tanımlayabilecek bağlamsal temellere sahiptir. Araba ses grubu tarafından sağlanan mevcut ses seviyesi ve sessize alma geri çağırma işlevi, sınırlı bağlamsal bilgi sağlar. Otomotiv kullanım alanlarına ve gelecekteki ölçeklenebilirliğe daha iyi hizmet vermek için Android 14'e CarVolumeGroupEvent eklendi. Her etkinlik üç kritik bilgi türünü içerir:
CarVolumeGroupInfo
öğesinin listesiEventTypes
(bit eşlemeli)ExtraInfos
öğesinin listesi
CarVolumeGroupInfo
Etkinlik geri çağırmasının alıcısı, etkilenen araç ses grubu bilgilerinin listesine kolayca erişebilir. Bu, uygulamanın en son durumu almak için Car Audio çerçevesine ek çağrı yapması gerekmediği anlamına gelir. Kullanıcı arayüzünü veya dahili durumları güncellemek için yalnızca alınan CarVolumeGroupInfos
değerini kullanabilir. Uygulamaların işini kolaylaştırmak için, bir araç ses grubuyla ilgili değişen özellikler aşağıda açıklandığı şekilde EventTypes
kapsamında da sağlanır.
EventTypes
CarVolumeGroupInfo
öğesinin hangi yönünün değiştiğini tanımlar. Uygulamalar, değişiklikleri tespit etmek ve gerekli işlemleri yapmak için bunu kullanabilir. Örneğin, EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED
, ilgili CarVolumeGroups
maksimum hacim artışı dizininin değiştiğini ve CarVolumeGroupInfo.getMaxVolumeGainIndex()
tarafından sorgulanabilir olduğunu gösterir.
Aşağıdaki tabloda EventType
ile CarVolumeGroupInfo
arasındaki ilişki gösterilmektedir.
EventType | CarVolumeGroupInfo |
---|---|
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED | CarVolumeGroupInfo.getVolumeGainIndex() |
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED | CarVolumeGroupInfo.getMinVolumeGainIndex() |
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED | CarVolumeGroupInfo.getMaxVolumeGainIndex() |
EVENT_TYPE_MUTE_CHANGED | CarVolumeGroupInfo.isMuted() |
EVENT_TYPE_VOLUME_BLOCKED_CHANGED | CarVolumeGroupInfo.isBlocked() |
EVENT_TYPE_ATTENUATION_CHANGED | CarVolumeGroupInfo.isAttenuated() |
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED | CarVolumeGroupInfo.getAudioAttributes() |
ExtraInfos
CarVolumeGroup
değerinin neden değiştiği hakkında ek bilgi sağlar. Uygulamalar, kullanıcıyı işlem yapmaya veya bilgilendirmeye yönelik ek bağlam sağlamak için bu bilgileri kullanabilir. Örneğin, EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL
termal aşırı yüklenme nedeniyle etkin geçici bir zayıflama olduğunu gösterir. Uygulama, sesi artırmaya çalışan kullanıcıyı bilgilendirebilir.
ExtraInfos
için herhangi bir işlem uygulamıyoruz. ExtraInfos
'ye göre süreci belirleme konusunda takdir sizindir. Örneğin, EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED
nedeniyle ses azaltma etkinse kullanıcının sesi değiştirmesini önlemek için ses çubuğu kullanıcı arayüzünü başlangıçta soluklaştırmayı da seçebilirsiniz.
Diğerleri, ses azaltmanın etkin olduğunu belirten bir pop-up göstermeyi ve kullanıcının sesi değiştirmesine izin vermeyi tercih edebilir.
Araç ses çerçevesi, önerilen ExtraInfos
'yi sağlamak için AudioControl HAL IAudioGainCallback
'e bağlıdır. Daha fazla bilgi edinmek için Ses Kazancı Geri Çağırması başlıklı makaleyi inceleyin.
CarVolumeGroupEvent
, araç ses çerçevesinin gelecekteki ihtiyaçlarını karşılayacak şekilde ölçeklendirilir. Yeni özellikleri yalnızca CarVolumeGroupEvent
üzerinden desteklemeyi planlıyoruz. Uygulama geliştiricilerin grup ses düzeyini ve sessizleştirme değişikliklerini yönetmek için CarVolumeGroupEvent
kullanmasını önemle tavsiye ederiz.
Araç ses grubu etkinliği geri çağırma işlevi
Android 14, ayrıcalıklı ve platform uygulamalarının kaydolup CarVolumeGroupEvents
hakkında bildirim alması için yeni bir geri çağırma işlevi sağlar.
Geri arama için kaydolmak üzere
CarAudioManager#registerCarVolumeGroupEventCallback()
Geri aramanın kaydını iptal etmek için
CarAudioManager#unregisterCarVolumeGroupEventCallback()
Bir uygulama yeni CarVolumeGroupEventCallback
ve eski CarVolumeCallback
ile kaydolduğunda CarVolumeGroupEventCallbacks
etkinliğine öncelik verilir.
Araç ses grubu artık CarVolumeCallback
'ü tetiklemiyor. Bu, aynı etkinlik için aynı uygulamaya yinelenen tetikleyicilerin gönderilmesini önler.
Grup ses düzeyini yönetmek ve sessizleştirme değişikliklerini kontrol etmek için CarVolumeGroupEventCallback
simgesini kullanmanızı önemle tavsiye ederiz.
Ses kazancı geri çağırma işlevi
Android 13'ten beri AudioControl HAL, araç ses sisteminde yapılan değişiklikler nedeniyle ses seviyesi güncellemelerini yönetmek için ayarsız geri çağırma işlevi tetikleyebilir.
HAL API
AudioControl @2.0 AIDL
AudioControl AIDL HAL'ın 2.0 sürümü aşağıdaki API'yi ekler:
API | Amaç |
---|---|
IAudioControl#registerGainCallback |
AudioControl HAL ile bir IAudioGainCallback örneği kaydeder. |
IAudioGainCallback#onAudioDeviceGainsChanged |
Ses kazancı yapılandırmasında yapılan değişiklikleri bildirmek için ayarsız geri çağırma işlevi. |
AudioControl HAL geri çağırma işlevi, nedenlerin listelerini ve ilgili AudioGainConfigInfo
öğesini içerir. AudioGainConfigInfo
şuradan oluşur:
- Bölge Kimliği
- Cihaz bağlantı noktası adresi
- Hacim dizini > dizin, kısıtlanmış bir dizin veya güncelleme dizini olabilir.
Nedenler genel olarak şu şekilde sınıflandırılabilir:
- Kısıtlama nedenleri. Ses düzeyinde ve sessize alma davranışında geçici değişiklik.
- Nedeni güncelleyin. Ses davranışında kalıcı değişiklik.
Kısıtlama türleri
AudioControl
HAL AIDL
V3
itibarıyla desteklenen kısıtlama türleri şunlardır:
- Kapat
- Blokaj
- Sınırlama
- Zayıflama
Etkin kısıtlama | Kullanıcı tarafından tetiklenen ses düzeyi değişikliği | Kullanıcı tarafından tetiklenen sessize alma açma/kapatma düğmesi |
---|---|---|
Kapat | ❌ | ❌ (sesi aç) ✔ (sesi kapat) |
Blokaj | ❌ | ✔ |
Sınırlama | ❌ (sınırın üzerinde) ✔ (sınırın altında) |
✔ |
Zayıflama | ✔ | ✔ |
Kısıtlamalar arasında öncelik sırası şu şekildedir: Sesi kapatma > Engelleme > Sınırlama > Zayıflatma.
Sessize alma kısıtlamaları
Sessize alma kısıtlamaları şunlardır:
Reasons.TCU_MUTE
Reasons.REMOTE_MUTE
Araç ses sistemi çerçevesi, sessiz modu dahili olarak şu iki durumda tutar:
Kullanıcıyı susturma
CarAudioManager
veya önemli etkinlikler aracılığıyla kullanıcının isteğine göre açılıp kapatılır.HAL sessiz.
AudioGain
geri çağırma işlevi aracılığıyla alınan sessize alma kısıtlamalarına göre açılıp kapatılır.
Ayarlar uygulaması gibi dinleyiciler için ses grubu genel sessize alma (CarVolumeGroupInfo.isMuted()
) durumu, yukarıdaki sessize alma işlemlerinden birinin etkin olup olmadığına bağlıdır.
HAL sessize alma özelliği etkinleştirildiğinde, gelen tüm ses düzeyi değişikliği ve grup sessize alma istekleri kısıtlama süresi boyunca yok sayılır.
Etkileşim durumu: HAL sessize alma etkin ve kullanıcı sessize alma düğmesini açmak istiyor
HAL sessize alma etkinleştirildiğinde ve kullanıcı sessize alma devre dışı bırakıldığında:
- Ses grubu genel sessize alma durumu
true
olarak değiştirilir. - Kullanıcının sessize alma özelliğini etkinleştirme istekleri işlenir.
- Neden: Kullanıcı gizliliğini korumak için kullanıcıların sessize alma istekleri her zaman dikkate alınmalıdır.
HAL sessize alma özelliği ve kullanıcı sessize alma özelliği etkinleştirildiğinde:
Ses grubu genel sessize alma durumu
true
olarak değiştirilir.Kullanıcının sessize alma özelliğini devre dışı bırakma istekleri
NOT
işlenir. Önbelleğe alınan kullanıcı sessize alma durumu etkin kalır.Neden: Kullanıcının sesini açma istekleri yalnızca etkin kısıtlama yoksa kabul edilir.
Neden: Önbelleğe alınmış kullanıcının sesini açmak, istenmeyen ses patlamalarına neden olabilir ve kullanıcı güvenliğini tehlikeye atabilir. Bu durum, özellikle açma/kapatma döngülerinde sessiz mod etkinse geçerlidir. Bu durumda kullanıcıların ses seviyesi algısı azalır.
Etkileşim örneği: Kullanıcı sessize alma özelliğinde değişiklik olmamasına rağmen HAL sessize alma özelliği etkinleştirildi ve devre dışı bırakıldı
HAL sessize alma düğmesini açmak, ses grubu genel sessize alma durumunu değiştirir. Ancak bu işlem, kullanıcının sessize alma durumunu doğrudan güncellemez. Kullanıcının sesi kapatma özelliği devre dışıyken HAL sessize alma özelliğini etkinleştirmek için geri çağırma işlevi alındığında:
- Ses grubu genel sessize alma durumu
true
olarak değiştirilir. Kullanıcının ses seviyesini değiştirme istekleri, HAL sessize alma özelliği etkinken
NOT
işlenir.Neden: Kullanıcı, sessize alma özelliği etkinken sesi algılayamaz. Ses seviyesinin değiştirilmesine izin vermek, sesin aniden yükselmesine neden olarak kullanıcı güvenliğini tehlikeye atabilir.
Neden: Ses uygulamaları, geri çağırmalara kaydolabilir ve OEM tarafından beklenen davranış bu ise kullanıcı müdahalesi olmadan sessiz modu kaldırmayı (CarAudioManager.setVolumeGroupMute(...,/* mute=*/ true,..)) otomatik olarak tetikleyebilir.
Kullanıcı sessize alma özelliği devre dışıyken HAL sessize alma özelliği devre dışı bırakıldığında:
Ses grubu sessize alma durumu
false
olarak değiştirilir.Neden: Sessiz durumunun kalıcı hale getirilmesi ve kullanıcıdan sesi açmasını istemek, sessiz durumu sık sık değiştiğinde kullanıcının gereksiz yere kesintiye uğramasına neden olabilir.
Kullanıcılardan gelen ses seviyesi değiştirme istekleri normal şekilde işlenir.
Blokaj
Engelleme kısıtlamaları şunlardır:
Reasons.FORCED_MASTER_MUTE
Reasons.REMOTE_MUTE
Reasons.TCU_MUTE
.
Engelleme kısıtlamaları etkinken kullanıcıların aşağıdaki işlemleri yapması engellenir:
- Ses düzeyi değişiklikleri işleme alınmaz.
- Sesi aç/kapat işlemleri işlenir.
Sınırlama
Sınırlama kısıtlamaları şunlardır:
Reasons.THERMAL_LIMITATION
Reasons.SUSPEND_EXIT_VOL_LIMITATION
Sınırlama kısıtlamaları etkinken kullanıcılardan gelen aşağıdaki istekler:
Ses düzeyini değiştirme:
- Sınır dahilinde olanlar işlenir
- Yukarıdaki sınırlamalar işlenmez.
Sesi aç/kapat işlemleri işlenir.
Zayıflama
Zayıflama kısıtlamaları şunlardır:
Reasons.ADAS_DUCKING
Reasons.NAV_DUCKING
Reasons.PROJECTION_DUCKING
Zayıflatma kısıtlamaları etkinken kullanıcılardan gelen aşağıdaki istekler:
Ses düzeyini değiştirme işlemleri işlenir. Yeni mevcut ses seviyesi, eski ses seviyesi yerine azaltılmış ses seviyesine ayarlanır. Gelecekte ses düzeyinde yapılacak değişiklikler bu düzeyden yapılır.
Sesi aç/kapat işlemi işlenir.
Dizine ekleme güncellemesi
Aşağıdakiler, zaman uyumsuz cilt dizini güncellemesi olarak kabul edilir:
Reasons.EXTERNAL_AMP_VOL_FEEDBACK
.
Bu nedenle, AudioControl HAL ses grubu geçerli dizini belirtilen dizinle güncelleyebilir. Bu değer, öncelikle araç ses sistemi çerçevesinden gelen ses seviyesi değişikliği isteği için ses sisteminden geri bildirim olarak kullanılır. Dizin güncellemesi, dizini senkronize etmek için CarVolumeGroupEvent
geri çağırma olarak da uygulamalarla paylaşılır.
Örnekler
Kullanım alanı: Kullanıcı, ses düzeyi dizini değerini 30 olarak günceller
Kullanıcı, ses indeksini 30 olarak değiştirmek için Ses uygulamasını kullanır.
Bu dizin, ses kazancına dönüştürülür ve Audio HAL'e gönderilir.
Tedarikçi firmaların
Audio HAL
uygulamalarında yeni ses kazancı alınır ve ses sistemi (harici amplifikatör gibi) güncellenir.Ses sistemi, ses seviyesinin yalnızca 15. dizinle güncellendiğini yanıtlıyor (Android'in bilmediği nedenlerden dolayı).
AudioControl HAL
tetikleyicilerinin tedarikçi firma uygulamaları:IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {..., 15 /* New index */})
Araba ses hizmeti, kalıcılığa ve ses uygulamasına geri çağırmalar için kullanılan geri çağırmadaki yeni dizini tüketir. Kullanıcı tarafından istenen dizin 30'dur. Ancak ses sistemi eşzamansız geri bildirimi, dizini 15 olarak günceller.
Kullanım alanı: Askıya alma modundan çıktıktan sonra ilk ses çalma
Askıya alınmadan önceki ses seviyesi dizini 95 gibi yüksek bir seviyeye (aralık: [0-99]) ayarlanır.
Android askıya alınır.
Android askıya alındıktan sonra (örneğin, devam ettir):
Audio HAL/AudioControl HAL
tedarikçi firması, ses sistemine yerel olarak 30 değerinde güvenli bir dizin uygular.Tedarikçi firma
AudioControl HAL
, güvenli dizin için geri çağırma işlevini de tetikler:
IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {..., 30 /* safe index */})
Araba ses hizmeti, kalıcılığa yönelik olarak kullanılan geri çağırma işlevinden yeni dizini ve dizini senkronize eden ses uygulamasına yönelik kendi geri çağırma işlevlerini tüketir. Askıya alınmadan önceki ses düzeyi dizini 95'tir. Ancak devam ettikten sonra bu dizin,
AudioControl HAL
uygulayıcısı tarafından 30 değerinde güvenli bir ses düzeyine ayarlanır.
Dinamik ses düzeyi yapılandırması
Bu özellik için aşağıdaki birincil kullanım alanlarını göz önünde bulunduruyoruz:
Aracın kullanımdan kaldırma (EOL) yapılandırması.
Otomobil üreticileri, ses sistemi kurulumuna göre araç ses sistemi kurulumuna göre ses seviyesi yapılandırmalarını son kullanım tarihinde güncellemeyi tercih eder. Genellikle bu, Android SW imajını güncellemeden yan yüklemedir.
Otomobil üreticilerinin, servis planı sırasında ses yapılandırmasını güncellemesi gerekebilir.
Çalışma zamanı yapılandırması. Otomotiv ses sistemleri harici amplifikatör yapılandırmalarını destekler ve bu ECU'lar, önyükleme sırasında sorgulanan ses aralığı yapılandırmalarını barındırabilir.
İsteğe bağlı yapılandırma. Kullanıcıların belirli bir süre boyunca gelişmiş sinyal işlemeye abone olduğu, talep temelli ses özelliklerine yönelik artan ihtiyacı desteklemek için sunulur. Yeni ses aralığı yapılandırmaları, abonelik süresi boyunca geçerlidir.
Tasarım
Dinamik ses düzeyi yapılandırması üç aşamada gerçekleştirilir:
Discovery Tedarikçi firmanın AudioControl HAL uygulaması, tedarikçi firmaya ait özel bir IPC mekanizması aracılığıyla yeni ses seviyesi aralığı güncellemelerini keşfeder.
Tespit edildikten sonra
AudioControl::IModuleChangeCallback
üzerinden geri arama yapılır.Güncelleme. Araç ses grubu, ses grubu durumlarını yeni ses aralıkları ile günceller.
Ses aralığı güncellendikten sonra aynı ses düzeyinin korunması için gereken çaba gösterilir. Ancak dizin sınırları dışına çıkarsa mevcut ses seviyesi dizini güvenli bir değere ayarlanır. Örneğin, geri arama sırasında tedarikçi tarafından sağlanan varsayılan seviye.
Geri arama
Ses grubu aralığı güncellemelerinden sonra araç ses grubu,
CarVolumeGroupEventCallback
üzerinden kayıtlı uygulamalara geri çağırma çağrısı gönderir.CarVolumeGroupEvent
, güncellenmişCarVolumeGroupInfo
, Etkinlik-türü (ne değişti) ve Ek-bilgi (neden değişti) bilgilerini içerir.
Şekil 1. Dinamik ses düzeyi yapılandırması.
HAL API
AudioControl @ 3.0 AIDL
AudioControl AIDL HAL'nin 3.0 sürümünde aşağıdaki API'ler kullanıma sunulmuştur:
API | |
---|---|
IAudioControl#setModuleChangeCallback | AudioControl HAL ile IModuleChangeCallback örneği ayarlar. |
IAudioControl#clearModuleChangeCallback | Daha önce AudioControl HAL ile ayarlanan IModuleChangeCallback örneğini temizler. |
IModuleChangeCallback#onAudioPortsChanged | AudioPorts'ta yapılan değişiklikleri bildirmek için geri çağırma |
Sıra
Dinamik birim yapılandırmasının ardışık düzen şeması aşağıda gösterilmiştir.
Şekil 2. Dinamik ses düzeyi yapılandırması için akış şeması.
Önemli hususlar
Bu özelliği optimize etmek için aşağıdakileri göz önünde bulundurun.
Geri çağırma kapsamında sağlanan AudioPorts, AutomotiveBUS tanımı ile eşleşmelidir:
- Cihaz bağlantı noktası.
IN_DEVICE
,OUT_DEVICE
- Bağlantı.
BUS
- Adres. Ses HAL tanımında tanımlanmıştır
- Kazanç modu.
JOINT
- Cihaz bağlantı noktası.
Tedarikçi firmalar, ses HAL politikasında bir ses seviyesi aralığı tanımı süper kümesi tanımlamalı ve geri çağırma işlevini kullanarak bunu araç varyantları için özelleştirmelidir. Daha fazla bilgi için
IModuleChangeCallbac
AIDL tanımına bakın.Aynı ses grubuna birden fazla ses otobüsü aitse her birinin ses aralığı tanımı aynı olmalıdır. Aksi takdirde, araç ses çerçevesi yeni ses aralığı tanımını reddeder.