Android Automotive OS (AAOS), temel Android ses yığınını temel alarak , bir araçta bilgi-eğlence sistemi olarak çalışmaya ilişkin kullanım alanlarını desteklemelidir. AAOS, bilgi-eğlence seslerinden (yani medya, navigasyon ve uyarı alır ancak bunlarla ilgili herhangi bir şey yapan zillerden ve katı kullanılabilirlik ve zamanlama gereksinimleri vardır. AAOS hem sinyal hem de sesi yönetmesine yardımcı olacak mekanizmalar bulmaktır. Sonuçta bu, aracın sürücü için hangi seslerin çalınması gerektiği ve güvenlikle ilgili önemli seslerin ve mevzuat seslerinin düzgün şekilde çalışmasını; hiçbir kesinti olmaksızın duyuldu.
Android, aracın medya deneyimini yönettiğinden Örneğin, radyo alıcısı, sesi işleyebilen uygulamalarla temsil edilmelidir. odak ve medya önemli etkinliklerini gösterir.
Android 11'de otomotivle ilgili seste yapılan aşağıdaki değişiklikler destek:
- İlişkili User-ID'ye göre otomatik ses bölgesi seçimi
- Otomobile özgü sesleri destekleyen yeni sistem kullanımları
- HAL ses odağı desteği
- Geçici olmayan yayınlar için gecikmeli ses odağı
- Navigasyon ve aramalar arasındaki etkileşimi kontrol eden kullanıcı ayarı
Android sesleri ve akışları
Otomotiv ses sistemleri aşağıdaki sesleri ve akışları işler:
Şekil 1. Akış merkezli mimari diyagramı
Android, Android uygulamalarından gelen sesleri yöneterek bu uygulamaları kontrol eder ve seslerini HAL'deki çıkış cihazlarına yönlendirerek ses:
- Temel sesteki kaynaklar olarak bilinen mantıksal akışlar Ses Özellikleri ile etiketlenir.
- Fiziksel yayınlar: Temel sesteki cihazlar olarak bilinir. bağlam bilgisi sunmaz.
Güvenilirlik için harici sesler (bağımsız emniyet kemeri uyarı zilleri gibi kaynaklar) Android dışında, HAL veya ayrı donanımlarda bile kullanılabilir. Sistem uygulayıcıları, aşağıdaki özelliklere sahip bir mikser sağlamalıdır: Android'den bir veya daha fazla ses girişi akışı kabul eder ve ardından bunları birleştirir harici ses kaynaklarından uygun şekilde yararlanabilirsiniz. kullanabilirsiniz.
HAL uygulaması ve harici karıştırıcı, güvenlik açısından kritik harici sesler duyuluyor ve Android tarafından sağlanan uygun konuşmacılara yönlendirmenize yardımcı olur.
Android sesleri
Uygulamalarda, standart Android üzerinden etkileşimde bulunan bir veya daha fazla oynatıcı olabilir API'ler (ör. AudioManager) odak denetimi veya MediaPlayer için akış için) kullanarak bir veya daha fazla mantıksal ses verisi akışı yayınlar. Bu veriler tek kanallı mono veya 7.1 surround olabilir ancak tek bir kaynak olarak kullanın. Uygulama akışı, AudioAttributes ile ilişkilidir sesin nasıl ifade edilmesi gerektiğiyle ilgili sistem ipuçları veren bir e-posta alırsınız.
Mantıksal akışlar AudioService üzerinden gönderilir ve bir akışa yönlendirilir (ve yalnızca biri) mevcut fiziksel çıkış akışlarının her biri (her biri çıktı) bir mikserin birleşimidir. Ses özellikleri karıştırıldıktan sonra atlanırsa artık kullanılamazlar.
Daha sonra her fiziksel yayın, oluşturma için Ses HAL'ye iletilir. donanım da dahil değil. Otomotiv uygulamalarında, oluşturma donanımı yerel codec'ler olabilir (mobil cihazlara benzer) ya da aracın fiziksel fiziksel ağ. Her iki durumda da, içeriği iletmek için Ses HAL uygulamasının işi ve sesli hâle gelmesine neden olabilir.
Harici akışlar
Android üzerinden yönlendirilmemesi gereken ses akışları (sertifikasyon veya zamanlama nedenleri) doğrudan harici miksere gönderilebilir. Android 11 itibarıyla HAL artık Android'e bilgi vermek için bu harici seslere odaklanmayı isteyebiliyor uygun işlemleri (ör. medyayı veya içeriği engelleme) odaklanmayı zorlaştırır.
Harici akışlar, sesle etkileşimde bulunması gereken medya kaynaklarıysa (örneğin, bir kod çalıştırıldığında MP3 çalmayı harici kanal varsa), bu harici akışlar bir Android uygulaması. Bu tür bir uygulama, medya kaynağı adına ses odağı ister seçiyor ve odak bildirimleriyle ilgili e-postalara Android odağına uymak için harici kaynağı gerektiği şekilde başlatma/durdurma politikası. Uygulama ayrıca aşağıdakiler gibi medya önemli etkinlikleri yönetmekten de sorumludur: Oynat/duraklat. Bu tür harici cihazları kontrol etmek için önerilen mekanizmalardan biri HwAudioSource'tur.
Çıkış cihazları
Ses HAL düzeyinde, cihaz türü AUDIO_DEVICE_OUT_BUS
Araç ses sistemlerinde kullanılmak üzere genel bir çıkış cihazı sağlar. Otobüs
adreslenebilir bağlantı noktalarını destekler (her bağlantı noktası bir cihazın
fiziksel akış) ve şurada desteklenen tek çıkış cihazı türünün olması beklenmektedir:
araç.
Bir sistem uygulaması,
Android her şeyi bir araya getirerek tek bir akış olarak sunar.
Alternatif olarak, HAL, izin vermek üzere her CarAudioContext
için bir otobüs bağlantı noktası sağlayabilir.
her ses türünde eşzamanlı yayın Bu, HAL'nin
seslerin istenen şekilde karıştırılıp azaltılması için
uygulanması gerekir.
Ses bağlamları, çıkış cihazlarına atanır.
car_audio_configuration.xml
Mikrofon girişi
Ses kaydederken Ses HAL'si bir openInputStream
alır
çağrısının nasıl yapılacağını gösteren AudioSource
argümanı
mikrofon girişinin işlenmesi gereklidir.
VOICE_RECOGNITION
kaynağı
özellikle Google Asistan, ses ve görüntü kalitesine
sahip olan stereo mikrofon akışı bekler
yankı giderme efektidir (varsa) ancak başka bir işleme uygulanmaz.
Işınlamanın Asistan tarafından yapılması beklenir.
Çok kanallı mikrofon girişi
İkiden fazla kanalı (stereo) olan bir cihazdan ses yakalamak için bir
kanal dizini maskesi (örneğin,
CHANNEL_IN_LEFT
) bilgileri gösterilir. Örnek:
final AudioFormat audioFormat = new AudioFormat.Builder() .setEncoding(AudioFormat.ENCODING_PCM_16BIT) .setSampleRate(44100) .setChannelIndexMask(0xf /* 4 channels, 0..3 */) .build(); final AudioRecord audioRecord = new AudioRecord.Builder() .setAudioFormat(audioFormat) .build(); audioRecord.setPreferredDevice(someAudioDeviceInfo);
Hem setChannelMask
hem de setChannelIndexMask
olduğunda
ayarlanırsa AudioRecord
, yalnızca
setChannelMask
(en fazla iki kanal).
Eş zamanlı yakalama
Android 10 sürümünden itibaren Android çerçevesi, eşzamanlı yakalama özelliğini desteklemektedir.
kullanıcı gizliliğini korumak için kısıtlamalarla
uygulanabilir. Parçası
Bu kısıtlamalar,
AUDIO_SOURCE_FM_TUNER
yoksayılır ve bu nedenle
normal bir girişle (mikrofon gibi) eş zamanlı olarak yakalanır.
HwAudioSources
, eş zamanlının bir parçası olarak da kabul edilmez.
yakalama kısıtlamalarını kullanabilirsiniz.
AUDIO_DEVICE_IN_BUS
veya şu cihazlarla çalışacak şekilde tasarlanmış uygulamalar:
ikincil AUDIO_DEVICE_IN_FM_TUNER
cihazlarda açık bir şekilde
bu cihazları tanımlayıp AudioRecord.setPreferredDevice()
kullanmak
.
Ses kullanımları
AAOS esas olarak
AudioAttributes.AttributeUsages
kullanıyor
ses ayarları ve odak yönetimi gibi özellikler sunar. Kullanımlar
"neden” sorusunun cevabını akış oynatılıyor. Dolayısıyla tüm akışlar
ve ses odağı isteklerinde ses çalınmaları için bir kullanım biçimi belirtilmelidir. Zaman
AudioAttributes nesnesi oluştururken özellikle ayarlanmadıysa kullanım
varsayılan olarak USAGE_UNKNOWN
değerine ayarlandı. Şu an için aynı şekilde ele alınsa da
USAGE_MEDIA
gibi medyalar için bu davranışa güvenilmemelidir
oynatmaya devam edebilirsiniz.
Sistem kullanımları
Android 11'de sistem kullanımları kullanıma sunuldu. Bu kullanımlar,
sistem API'leri gerektirmesi dışında, önceden yapılan kullanımlara benzer şekilde
ve android.permission.MODIFY_AUDIO_ROUTING
gibi kullanılacak. Yeni
sistem kullanımları şunlardır:
USAGE_EMERGENCY
USAGE_SAFETY
USAGE_VEHICLE_STATUS
USAGE_ANNOUNCEMENT
Sistem kullanımıyla bir AudioAttributes
oluşturmak için şunu kullanın:
AudioAttributes.Builder#setSystemUsage
(setUsage
yerine) Sistem dışı kullanımla bu yöntemi çağırma
bir IllegalArgumentException
atılır. Ayrıca,
bir derleyicide hem sistem kullanımı hem de kullanımı ayarlanmışsa
Derleme sırasında IllegalArgumentException
.
AudioAttributes
ile hangi kullanımın ilişkili olduğunu kontrol etmek için
AudioAttributes#getSystemUsage
yöntemini çağırın.
Bu, ilişkilendirilmiş kullanımı veya sistem kullanımını döndürür.
Ses bağlamları
AAOS seslerin yapılandırmasını kolaylaştırmak için benzer kullanımlar gruplandırıldı
CarAudioContext
hedefine. Bu ses bağlamları proje boyunca
Yönlendirme, ses düzeyi grupları ve ses odağını tanımlamak için CarAudioService
üzerine konuşalım.
Android 11'deki ses bağlamları şunlardır:
CarAudioContext | İlişkilendirilmiş Özellik Kullanımları |
---|---|
MUSIC |
UNKNOWN, GAME, MEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT, ASSISTANCE_ACCESSIBILITY |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATION, VOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATION, NOTIFICATION_* |
SYSTEM_SOUND |
ASSISTANCE_SONIFICATION |
EMERGENCY |
EMERGENCY |
SAFETY |
SAFETY |
VEHICLE_STATUS |
VEHICLE_STATUS |
ANNOUNCEMENT |
ANNOUNCEMENT |
Ses bağlamları ve kullanımları arasında eşleme. Vurgulanan satırlar yeni satır öğeleri içindir .
Çok bölgeli ses
Otomotiv, aynı anda kullananlara yönelik yeni bir dizi kullanım alanı sunar platformla etkileşimde bulunan ve ayrı medya tüketen Örneğin, örnek, bir sürücü arka koltukta oturan yolcular kabinde müzik çalabilir arka ekranda YouTube videosu izliyor. Çok bölgeli ses şu işlevi sağlar: Farklı ses kaynaklarının farklı alanlarda eşzamanlı olarak çalınmasına olanak tanıyarak görebilirsiniz.
Android 10'dan itibaren çok bölgeli ses, OEM'lerin sesi yapılandırmasına olanak tanır alt bölümlere ayrılabilir. Her bölge, araç içindeki cihazlardan oluşan bir koleksiyondur kendi birim grupları, bağlamlar için yönlendirme yapılandırması ve odak noktası üzerine konuşalım. Bu şekilde, ana kabin tek bir ses sistemi arka ekranın kulaklık jakı ikinci bölge olarak yapılandırılmalıdır.
Alt bölgeler, car_audio_configuration.xml
kapsamında tanımlanır.
CarAudioService
, daha sonra yapılandırmayı okur ve AudioService'e yardımcı olur
Ses akışlarını ilişkili bölgelerine göre yönlendirir. Her alt bölge hâlâ
bağlamlara ve uygulama kimliğine dayalı yönlendirme kurallarını. Oyuncunun
CarAudioService
, oynatıcının hangi alt bölgede yer aldığını belirler
ve ardından, AudioFlinger uygulamasının hangi cihazla ilişkili olduğunu ve hangi
yönlendirmesi gerekir.
Odak, her ses bölgesi için bağımsız olarak da korunur. Bu durumda,
ses üretmek için farklı bölgelerdeki uygulamalarla
ve uygulamaların birbirlerine olan
değişikliklere uymaya devam etmesini
odaklanabildikleri anlamına gelir. CarZonesAudioFocus
içinde
CarAudioService
her biri için odağı yönetmekten sorumludur
bölge.
Şekil 2. Çok bölgeli sesi yapılandırma
Ses HAL'si
Automotive ses uygulamaları, standart Android Audio HAL'yi kullanır. ve şunları içerir:
IDevice.hal
Giriş ve çıkış akışları oluşturur. ana ses düzeyini ve sessize almayı yönetir ve şunları kullanır:createAudioPatch
Cihazlar arasında harici-harici yamalar oluşturmak için.- Her fiziksel yayının ses düzeyini sağlamak için
IDevice.setAudioPortConfig()
.
IStream.hal
Giriş ve çıkış varyantlarıyla birlikte donanımla ses örneklerinin akışını yönetir.
Otomotiv cihaz türleri
Aşağıdaki cihaz türleri, otomotiv platformları için geçerlidir.
Cihaz türü | Açıklama |
---|---|
AUDIO_DEVICE_OUT_BUS |
Android'den birincil çıkış (Android'den gelen tüm sesler bu şekilde teslim edilir). Akışları belirginleştirmek için adres olarak kullanılır her bağlam için. |
AUDIO_DEVICE_OUT_TELEPHONY_TX |
İletim için hücresel radyoya yönlendirilen seslerde kullanılır. |
AUDIO_DEVICE_IN_BUS |
Başka şekilde sınıflandırılmamış girişler için kullanılır. |
AUDIO_DEVICE_IN_FM_TUNER |
Yalnızca radyo yayını girişi için kullanılır. |
AUDIO_DEVICE_IN_TV_TUNER |
Varsa TV cihazı için kullanılır. |
AUDIO_DEVICE_IN_LINE |
AUX giriş jakı için kullanılır. |
AUDIO_DEVICE_IN_BLUETOOTH_A2DP |
Bluetooth üzerinden alınan müzik. |
AUDIO_DEVICE_IN_TELEPHONY_RX |
Telefonla ilişkilendirilmiş hücresel radyodan alınan sesler için kullanılır çağrısına bir tıklama URL'si eklemeniz gerekir. |
Ses cihazlarını yapılandırma
Android'in görebildiği ses sistemleri şurada tanımlanmalıdır:
/audio_policy_configuration.xml
, aşağıdaki bileşenleri içerir:
- modülünü kullanabilirsiniz. "Birincil"i destekler (otomotiv kullanım alanları için kullanılır),
"A2DP", "remote_submix" ve "USB". Modül adı ve ilgili ses
sürücüsünün
audio.primary.$(variant).so
olarak derlenmesi gerekir. - devicePorts'a ekleyin. Tüm giriş ve çıkışlar için cihaz tanımlayıcıları listesini içerir cihazlar (kalıcı olarak eklenmiş ve çıkarılabilir cihazlar dahil) bu modülden erişebilirsiniz.
- Her çıkış cihazı için şunları içeren kazanç kontrolü tanımlayabilirsiniz: Milibel cinsinden min/max/default/step değerleri (1 milibel = 1/100 dB = 1/1000 bel).
- Bir devicePort örneğindeki adres özelliği,
aynı cihaz türüne sahip birden çok cihaz olsa bile,
AUDIO_DEVICE_OUT_BUS
- mixPorts'u seçin. tarafından gösterilen tüm çıkış ve giriş akışlarının listesini içerir: ses HAL'si. Her mixPort örneği, gerçek bir akış olarak değerlendirilerek Android AudioService.
- gösterir. Giriş ve çıkış arasındaki olası bağlantıların listesini tanımlar akış ve cihaz arasında geçiş yapabilirsiniz.
Aşağıdaki örnekte, tüm cihazların içindeki bus0_phone_out adlı çıkış
Android ses akışları mixer_bus0_phone_out ile karıştırılır. Rota,
cihaza mixer_bus0_phone_out
çıkış akışı
bus0_phone_out
.
<audioPolicyConfiguration version="1.0" xmlns:xi="http://www.w3.org/2001/XInclude"> <modules> <module name="primary" halVersion="3.0"> <attachedDevices> <item>bus0_phone_out</item> <defaultOutputDevice>bus0_phone_out</defaultOutputDevice> <mixPorts> <mixPort name="mixport_bus0_phone_out" role="source" flags="AUDIO_OUTPUT_FLAG_PRIMARY"> <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> </mixPort> </mixPorts> <devicePorts> <devicePort tagName="bus0_phone_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="BUS00_PHONE"> <profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/> <gains> <gain name="" mode="AUDIO_GAIN_MODE_JOINT" minValueMB="-8400" maxValueMB="4000" defaultValueMB="0" stepValueMB="100"/> </gains> </devicePort> </devicePorts> <routes> <route type="mix" sink="bus0_phone_out" sources="mixport_bus0_phone_out"/> </routes> </module> </modules> </audioPolicyConfiguration>