Birleşik ses cihazı yönlendirme özelliği, aynı anda birden fazla ses cihazına ses akışı desteği sağlar. Bu özelliği kullanarak ayrıcalıklı uygulamalar, sistem API'leri aracılığıyla belirli bir strateji için birden fazla tercih edilen cihazı seçebilir. Uygulamalar, bu özelliğin sağladığı genel API'leri kullanarak ses cihazlarının yeteneklerini daha kesin bir şekilde keşfedebilir. Android 11 ve önceki sürümleri için, ses çerçevesi uygulamasının, aynı anda bağlanan aynı türden birden fazla ses cihazı (örneğin, 2 Bluetooth A2DP kulaklık) için sınırlı desteği vardır. Varsayılan ses yönlendirme kuralları, kullanıcıların belirli bir kullanım durumu için aynı türden birden fazla cihazı seçmesine de izin vermez.
Android 12'den başlayarak, ses yayını, bir grup BLE ses kulaklığına çoklu yayın yapma veya aynı anda birden fazla USB ses kartını seçme gibi yeni kullanım durumlarına izin vermek için bu sınırlamalar kaldırılmıştır. Aynı anda birden fazla USB cihazına yönlendirme desteklenmez.
Android 14'ten başlayarak USB çerçevesi, USB cihazlarının farklı ses cihazı türlerinde olması ve birden fazla USB cihazını aynı anda bağlamak için çekirdek ve satıcı desteği olması koşuluyla birden fazla USB cihazına yönlendirmeyi destekler.
Bu sayfada birden fazla ses cihazına ses akışı desteğinin nasıl uygulanacağı ve bu özelliğin uygulanmasının nasıl doğrulanacağı anlatılmaktadır.
Birden fazla ses cihazına ses akışını destekleme
Android 12'de bu özelliği destekleyen iki API grubu vardır:
- Sistem API'leri bir strateji için birden fazla tercih edilen cihazı yönetir.
- Satıcı tarafından ses HAL'nin bir parçası olarak uygulanan HIDL arayüzü, cihazın yeteneklerini rapor eder.
Aşağıdaki bölümlerde bu API'lerin her biri daha ayrıntılı olarak ele alınmaktadır.
Bir strateji için birden fazla tercih edilen cihazı kullanın
Ses Politikası Yöneticisi, aynı anda birden fazla ses cihazına ses akışını daha iyi desteklemek için sistem API'leri sunar. Bu sistem API'leri, belirli bir strateji için birden fazla tercih edilen cihazın ayarlanmasını, alınmasını ve kaldırılmasını sağlar. Android 12'ye kadar bu özellik yalnızca tek bir cihaz için destekleniyordu.
Ses Politikası Yöneticisi, medya oynatmak için seçilmesi en muhtemel cihazları tanımlamak üzere aktif medya cihazları kavramını sunar. Çıkarılabilir bir cihaz bağlandığında, bu cihaza yönlendirilebilecek ses HAL çıkış akışlarının açılması ve desteklenen özellikler açısından incelenmesi gerekebilir.
Bir çıkış akışını açarken bir ses cihazının belirtilmesi gerekir. Aktif medya cihazı bu bağlamda çıkış akışları açıldığında kullanılan cihazdır.
Etkin medya cihazı seçimi, bağlanan veya bağlantısı kesilen gerçek cihazlara bağlı olarak değişebilir. Ses Politikası Yöneticisi, etkin medya cihazlarını seçmek için aşağıdaki kural dizisini kullanır:
- Medya için tercih edilen cihazların tümü mevcutsa hepsi aktif cihaz olarak seçilir.
- Aksi takdirde son bağlanan çıkarılabilir cihaz seçilir.
- Bağlı çıkarılabilir aygıt yoksa, etkin aygıtları seçmek için çıkış aygıtlarını seçmeye ilişkin varsayılan ses politikası kuralları uygulanır.
Bir çıkış akışının, oynatma için en iyi konfigürasyonun seçilebilmesi amacıyla yeniden açılması ve aktif cihazlara yönlendirilmesi için aşağıdaki kriterleri karşılaması gerekir:
- Çıkış akışının aktif cihazları desteklemesi gerekir.
- Çıkış akışının dinamik profilleri desteklemesi gerekir.
- Çıkış akışının şu anda etkin cihazlara yönlendirilmemesi gerekir.
Yeni bir cihaz seçimi uygulamak için, Ses Politikası Yöneticisi, çıkış akışı boştaysa cihaz bağlantısı üzerine bir çıkış akışını kapatır ve yeniden açar veya çıkış akışının bekleme durumuna alınmasını erteler.
Ses Politikası Yöneticisi aşağıdaki sistem API'lerinin listesini sunar ( AudioManager.java
tanımlandığı gibi):
setPreferredDeviceForStrategy
Belirli bir strateji için ses yönlendirmesi için tercih edilen cihazı ayarlar. Tercih edilen cihaz ayarlandığında cihazın kullanılamayabileceğini, ancak kullanılabilir hale getirildikten sonra kullanılacağını unutmayın.
removePreferredDeviceForStrategy
setPreferredDeviceForStrategy
veyasetPreferredDevicesForStrategy
ile önceden ayarlanan tercih edilen ses aygıtlarını kaldırır.getPreferredDeviceForStrategy
setPreferredDeviceForStrategy
veyasetPreferredDevicesForStrategy
ile önceden ayarlanmış bir ses stratejisi için tercih edilen cihazı döndürür.setPreferredDevicesForStrategy
Belirli bir strateji için tercih edilen cihazları ayarlar.
getPreferredDevicesForStrategy
setPreferredDeviceForStrategy
veyasetPreferredDevicesForStrategy
ile önceden ayarlanmış bir ses stratejisi için tercih edilen cihazları döndürür.OnPreferredDevicesForStrategyChangedListener
Belirli bir ses stratejisi için ayarlanan tercih edilen ses cihazlarındaki değişikliklerin bildirilmesi için bir arayüz tanımlar.
addOnPreferredDevicesForStrategyChangedListener
Strateji tercihli ses cihazındaki değişikliklerden haberdar olmak için bir dinleyici ekler.
removeOnPreferredDevicesForStrategyChangedListener
Strateji tercihli ses cihazına yapılan değişikliklerin önceden eklenmiş bir dinleyicisini kaldırır.
Cihaz yeteneklerini bildirme
Ses HAL uygulamasının bir parçası olarak satıcılar, raporlama cihazı özelliklerini destekleyen API'leri uygular. Bu bölümde cihaz yeteneklerini raporlamak için kullanılan veri türleri ve yöntemler açıklanmakta ve birden fazla cihazı desteklemek için ses HIDL HAL V7'de yapılan bazı değişiklikler listelenmektedir.
Veri tipleri
Audio HIDL HAL V7'de cihaz yetenekleri AudioProfile
ve AudioTransport
yapıları kullanılarak raporlanır. AudioTransport
yapısı, bilinen ses formatları için AudioProfile
sahip bir ses bağlantı noktasının veya platform tarafından bilinmeyen formatlar için ham donanım tanımlayıcılarına sahip bir ses bağlantı noktasının yeteneğini açıklar. AudioProfile
yapısı, types.hal
aşağıdaki kod bloğunda gösterildiği gibi ses formatını, profil tarafından desteklenen örnekleme hızlarını ve kanal maskelerinin listesini içerir:
/**
* Configurations supported for a certain audio format.
*/
struct AudioProfile {
AudioFormat format;
/** List of the sample rates (in Hz) supported by the profile. */
vec<uint32_t> sampleRates;
/** List of channel masks supported by the profile. */
vec<AudioChannelMask> channelMasks;
};
Audio HIDL HAL V7'de AudioPort
veri türü, cihazın yeteneklerini açıklamak için AudioTransport
ve AudioProfile
yapılarıyla tanımlanır.
Ses HAL yöntemleri
Ses Politikası Yöneticisi, cihazın yeteneklerini sorgulamak için aşağıdaki yöntemleri kullanır:
-
getParameters:
Desteklenen ses formatları ve ilgili örnekleme hızları gibi satıcıya özgü parametre değerlerini almak için genel bir yöntem. -
getAudioPort:
Belirli bir ses bağlantı noktası için desteklenen özelliklerin (örnekleme oranları, formatlar, kanal maskeleri, kazanç denetleyicileri gibi) listesini döndürür.
IDevice.hal
aşağıdaki kod, getAudioPort
yönteminin arayüzünü gösterir:
/**
* Returns the list of supported attributes for a given audio port.
*
* As input, 'port' contains the information (type, role, address etc...)
* needed by the HAL to identify the port.
*
* As output, 'resultPort' contains possible attributes (sampling rates,
* formats, channel masks, gain controllers...) for this port.
*
* @param port port identifier.
* @return retval operation completion status.
* @return resultPort port descriptor with all parameters filled up.
*/
getAudioPort(AudioPort port)
generates (Result retval, AudioPort resultPort);
Eski API'de yapılan değişiklikler
Birden fazla ses profilini desteklemek için eski API'nin 3.2 sürümü, audio_port_v7
adı verilen yeni bir yapı ekler. Daha fazla ayrıntı için kaynak koduna bakın.
audio_port_v7
eklenmesi nedeniyle, eski API'nin 3.2 sürümü, audio_port_v7
yapısını kullanarak cihazların yeteneklerini sorgulamak için get_audio_port_v7
adlı yeni bir API ekler.
audio.h
aşağıdaki kod get_audio_port_v7
API'sinin tanımını gösterir:
/**
* Fills the list of supported attributes for a given audio port.
* As input, "port" contains the information (type, role, address etc...)
* needed by the HAL to identify the port.
* As output, "port" contains possible attributes (sampling rates,
* formats, channel masks, gain controllers...) for this port. The
* possible attributes are saved as audio profiles, which contains audio
* format and the supported sampling rates and channel masks.
*/
int (*get_audio_port_v7)(struct audio_hw_device *dev,
struct audio_port_v7 *port);
Eski API sürümü 3.2'nin altında ve HIDL HAL sürümü 7 veya üstü olduğunda, eski get_audio_port
API'sinden gelen verilerin yeni AudioPort
biçimine doldurulması gerekir. Bu durumda, get_audio_port
rapor edilen tüm örnek hızların ve kanal maskelerinin, döndürülen tüm formatlar için desteklendiği varsayılır ve böylece get_audio_port
değerlerinden yeni AudioPort
yapısına basit bir eşleme sağlanır.
Örnek API uygulamaları
Bu bölümde, önceki bölümlerde ele alınan API'leri kullanan yöntemleri içeren çeşitli test paketleri açıklanmaktadır. Bu API'lerin nasıl uygulandığına ve kullanıldığına ilişkin bazı örnekler için bu yöntemlere bakın.
setPreferredDevicesForStrategy
, getPreferredDevicesForStrategy
, removePreferredDeviceForStrategy
ve OnPreferredDevicesForStrategyChangedListener
sistem API'lerinin kullanımına bir örnek, GTS'de bulunan PreferredDeviceRoutingTest
yöntemindedir.
Kullanılan AudioDeviceInfo
yeni yapının bir örneğini görmek için CTS'de bulunan AudioManagerTest#testGetDevices
yöntemine bakın.
get_audio_port_v7
uygulamasının bir örneği audio_hal.c
bulunur ve birden fazla cihaz için yeteneklerin nasıl sorgulandığını gösterir.
Doğrulama
Bu bölümde Ses Yöneticisinin CTS ve GTS (Google Mobil Hizmetler Test Paketi) doğrulaması hakkında bilgi verilmektedir.
CTS testleri
CTS testleri android.media.cts.AudioManagerTest
dosyasında bulunur.
Aşağıda mevcut Ses Yöneticisi testlerinin listesi yer almaktadır:
AudioManagerTest#testGetDevices
Ses cihazının kesin yeteneklerini doğrular. Ayrıca
AudioDeviceInfo
yapısındaki döndürülen ses profillerinin eski, düzleştirilmiş dizi biçimindeki içeriği koruduğunu ancak yeniAudioProfile
biçiminde olduğunu da doğrular.AudioManagerTest#testPreferredDevicesForStrategy
andAudioManagerTest#testPreferredDeviceForCapturePreset
Strateji ve yakalama için tercih edilen cihazların önceden ayarlanmış API testlerinin başarıyla tamamlandığını doğrulayın.
GTS testleri
GTS testleri com.google.android.gts.audioservice.AudioServiceHostTest
adresinde bulunur.
Strateji ve yakalama ön ayarına yönelik tercih edilen cihazlara yönelik API'lerin doğru çalışıp çalışmadığını doğrulamak için AudioServiceHostTest#testPreferredDeviceRouting
ve AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset
testlerini çalıştırın.