Birleşik ses cihazı yönlendirme özelliği, aynı anda birden fazla ses cihazına ses akışı desteği sağlar. Ayrıcalıklı uygulamalar, bu özelliği kullanarak sistem API'leri aracılığıyla belirli bir strateji için birden fazla tercih edilen cihaz seçebilir. Uygulamalar, bu özellik tarafından sağlanan herkese açık API'leri kullanarak ses cihazlarının özelliklerini daha doğru bir şekilde keşfedebilir. Android 11 ve önceki sürümlerde ses çerçevesi uygulaması, aynı anda bağlı olan aynı türden birden fazla ses cihazı (ör. 2 Bluetooth A2DP kulaklık) için sınırlı destek sunar. Varsayılan ses yönlendirme kuralları, kullanıcıların belirli bir kullanım alanı için aynı türden birden fazla cihaz seçmesine de izin vermez.
Android 12'den itibaren ses yayını, bir BLE ses kulaklığı grubuna çoklu yayın yapma veya aynı anda birden fazla USB ses kartı seçme gibi yeni kullanım alanlarına izin vermek için bu sınırlamalar kaldırıldı. Aynı anda birden fazla USB cihaza yönlendirme desteklenmez.
Android 14'ten itibaren USB çerçevesi, USB cihazların farklı ses cihazı türlerinde olması ve birden fazla USB cihazı aynı anda bağlamak için çekirdek ve tedarikçi desteğinin olması koşuluyla birden fazla USB cihazına yönlendirmeyi destekler.
Bu sayfada, birden fazla ses cihazına ses aktarımı desteğinin nasıl uygulanacağı ve bu özelliğin uygulamanızın nasıl doğrulanacağı açıklanmaktadır.
Birden fazla ses cihazına ses aktarımı desteği
Android 12'de bu özelliği destekleyen iki API grubu vardır:
- Sistem API'leri, bir strateji için birden fazla tercih edilen cihazı işler.
- Ses HAL'i kapsamında tedarikçi firma tarafından uygulanan HIDL arayüzü, cihaz özelliklerini bildirir.
Aşağıdaki bölümlerde bu API'lerin her biri daha ayrıntılı şekilde ele alınmıştır.
Bir strateji için birden fazla tercih edilen cihazı yönetin
Ses Politika Yöneticisi, birden fazla ses cihazına ses akışını aynı anda 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 cihazda destekleniyordu.
Ses Politikası Yöneticisi, medya oynatma için seçilme olasılığı en yüksek olan cihazları tanımlamak amacıyla etkin medya cihazları kavramını kullanır. Çıkarılabilir bir cihaz bağlandığında, bu cihaza yönlendirilebilecek ses HAL çıkış akışlarının açılması ve desteklenen özellikler için taranması gerekebilir.
Çıkış akışı açarken bir ses cihazı belirtilmelidir. Etkin medya cihazı, bu bağlamda çıkış akışları açıldığında kullanılan cihazdır.
Etkin medya cihazı seçimi, bağlı veya bağlı olmayan gerçek cihazlara bağlı olarak değişebilir. Ses Politikası Yöneticisi, etkin medya cihazlarını seçmek için aşağıdaki kurallar dizisini kullanır:
- Medya için tercih edilen tüm cihazlar kullanılabilir durumdaysa bunların tümü etkin cihaz olarak seçilir.
- Aksi takdirde, son bağlanan çıkarılabilir cihaz seçilir.
- Bağlı çıkarılabilir cihaz yoksa etkin cihazları seçmek için çıkış cihazlarını seçmeyle ilgili varsayılan ses politikası kuralları uygulanır.
Oynatma için en iyi yapılandırma seçildiğinden, çıkış akışının yeniden açılması ve etkin cihazlara yönlendirilmesi için aşağıdaki ölçütleri karşılaması gerekir:
- Çıkış akışı, etkin cihazları desteklemelidir.
- Çıkış akışı dinamik profilleri desteklemelidir.
- Çıkış akışı şu anda etkin cihazlara yönlendirilmemelidir.
Yeni bir cihaz seçimini uygulamak için, çıkış akışı boştaysa Ses Politikası Yöneticisi cihaz bağlantısı kurulduğunda çıkış akışını kapatıp yeniden açar veya çıkış akışı bekleme moduna alındığında bu akışı erteler.
Ses Politikası Yöneticisi, aşağıdaki sistem API'si listesini sunar(AudioManager.java
'te tanımlandığı şekilde):
setPreferredDeviceForStrategy
Belirli bir strateji için ses yönlendirme tercih edilen cihazını belirler. Tercih edilen cihaz ayarlandığında cihazın kullanılamayabileceğini ancak kullanıma sunulduğunda kullanılacağını unutmayın.
removePreferredDeviceForStrategy
Daha önce
setPreferredDeviceForStrategy
veyasetPreferredDevicesForStrategy
ile ayarlanan tercih edilen ses cihazlarını kaldırır.getPreferredDeviceForStrategy
Daha önce
setPreferredDeviceForStrategy
veyasetPreferredDevicesForStrategy
ile ayarlanmış ses stratejisi için tercih edilen cihazı döndürür.setPreferredDevicesForStrategy
Belirli bir strateji için tercih edilen cihazları ayarlar.
getPreferredDevicesForStrategy
Daha önce
setPreferredDeviceForStrategy
veyasetPreferredDevicesForStrategy
ile ayarlanmış 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 tarafından tercih edilen ses cihazındaki değişikliklerden haberdar olmak için bir dinleyici ekler.
removeOnPreferredDevicesForStrategyChangedListener
Strateji tercih edilen ses cihazındaki değişiklikleri dinleyen daha önce eklenen bir dinleyiciyi kaldırır.
Cihaz özelliklerini raporlama
Ses HAL'i uygulaması kapsamında tedarikçiler, cihaz özelliklerini raporlamayı destekleyen API'leri uygular. Bu bölümde, cihaz özelliklerini bildirmek için kullanılan veri türleri ve yöntemler açıklanmakta ve birden fazla cihazı desteklemek amacıyla ses HIDL HAL V7'de yapılan bazı değişiklikler listelenmektedir.
Veri türleri
Ses HIDL HAL V7'de cihaz özellikleri AudioProfile
ve AudioTransport
yapıları kullanılarak raporlanır. AudioTransport
yapısı, bilinen ses biçimleri için AudioProfile
içeren veya platform tarafından bilinmeyen biçimler için ham donanım tanımlayıcıları içeren bir ses bağlantı noktasının kapasitesini tanımlar. AudioProfile
yapısı, ses biçimini, profil tarafından desteklenen örnekleme hızlarını ve kanal maskelerinin listesini içerir. types.hal
kaynaklı aşağıdaki kod bloğunda gösterildiği gibi:
/**
* 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;
};
Ses HIDL HAL V7'de AudioPort
veri türü, cihazın özelliklerini tanımlamak için AudioTransport
ve AudioProfile
yapılarıyla tanımlanır.
Ses HAL yöntemleri
Ses Politikası Yöneticisi, cihazın özelliklerini sorgulamak için aşağıdaki yöntemleri kullanır:
getParameters:
Desteklenen ses biçimleri ve ilgili örnekleme hızları gibi tedarikçiye özgü parametre değerlerini almak için kullanılan genel bir yöntem.getAudioPort:
Belirli bir ses bağlantı noktası için desteklenen özelliklerin (ör. örnekleme hızları, biçimler, kanal maskeleri, kazanç kontrolörleri) listesini döndürür.
IDevice.hal
kaynaklı aşağıdaki kodda, getAudioPort
yönteminin arayüzü gösterilmektedir:
/**
* 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
Eski API'nin 3.2 sürümünde, birden fazla ses profilini desteklemek için audio_port_v7
adlı yeni bir yapı eklenmiştir. Daha fazla bilgi için kaynak koda bakın.
audio_port_v7
eklendiğinden eski API'nin 3.2 sürümünde, audio_port_v7
yapısını kullanarak cihazların özelliklerini sorgulamak için get_audio_port_v7
adlı yeni bir API eklendi.
audio.h
kaynaklı aşağıdaki kod, get_audio_port_v7
API'nin 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, HIDL HAL sürümü 7 veya üzeri olduğunda eski get_audio_port
API'den alınan veriler yeni AudioPort
biçiminde doldurulmalıdır. Bu durumda, get_audio_port
kaynaklı olarak bildirilen tüm örnek ücretlerinin ve kanal maskelerinin döndürülen tüm biçimler için desteklendiği varsayılır. Böylece get_audio_port
değerlerinden yeni AudioPort
yapısıyla kolayca eşleme elde edilir.
Örnek API uygulamaları
Bu bölümde, önceki bölümlerde bahsedilen 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 dair bazı örnekler için bu yöntemlere bakın.
setPreferredDevicesForStrategy
, getPreferredDevicesForStrategy
, removePreferredDeviceForStrategy
ve OnPreferredDevicesForStrategyChangedListener
sistem API'lerinin kullanımına örnek olarak GTS'deki PreferredDeviceRoutingTest
yöntemi verilebilir.
AudioDeviceInfo
'te kullanılan yeni yapının bir örneğini görmek için CTS'de bulunan AudioManagerTest#testGetDevices
yöntemine bakın.
get_audio_port_v7
için uygulama örneği, audio_hal.c
bölümünde yer alır ve birden fazla cihaz için özelliklerin nasıl sorgulandığını gösterir.
Doğrulama
Bu bölümde, Ses Yöneticisi'nin CTS ve GTS (Google Mobil Hizmetler Testi Paketi) doğrulaması hakkında bilgi verilmektedir.
CTS testleri
CTS testleri android.media.cts.AudioManagerTest
adresindedir.
Aşağıda, kullanılabilir Ses Yöneticisi testlerinin listesi bulunmaktadır:
AudioManagerTest#testGetDevices
Ses cihazının tam özelliklerini doğrular. Ayrıca,
AudioDeviceInfo
yapısında döndürülen ses profillerinin eski, düzleştirilmiş dizi biçimindeki içeriği koruduğunu ancak yeniAudioProfile
biçiminde olduğunu doğrular.AudioManagerTest#testPreferredDevicesForStrategy
veAudioManagerTest#testPreferredDeviceForCapturePreset
Strateji ve ön ayarlarla ilgili API testlerini yakalama için tercih edilen cihazların başarıyla tamamlandığını doğrulayın.
GTS testleri
GTS testleri com.google.android.gts.audioservice.AudioServiceHostTest
adresinde yer alır.
Strateji ve yakalama hazır ayarı için tercih edilen cihazlara ait API'lerin doğru şekilde çalışıp çalışmadığını doğrulamak üzere AudioServiceHostTest#testPreferredDeviceRouting
ve AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset
testlerini çalıştırın.