Birleştirilmiş ses cihazı yönlendirmesi

Birleştirilmiş ses cihazı yönlendirme özelliği, aynı anda birden fazla ses cihazına ses akışı desteği ekler. Ayrıcalıklı uygulamalar bu özelliği kullanarak Belirli bir strateji için birden fazla tercih edilen cihaz seçmek bunu sistem API'leri yoluyla yapabilirsiniz. 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ı türde birden çok ses cihazı için sınırlı destek (örneğin, 2 Bluetooth A2DP mikrofonlu kulaklıkları) aynı anda bağlandığında. 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 cihazına yönlendirme desteklenmiyor.

Android 14'ten itibaren USB çerçevesi USB cihazlarının farklı seslere sahip olması koşuluyla birden fazla USB cihazına yönlendirme Ayrıca, birden fazla USB cihazını bağlamak için çekirdek ve satıcı desteği de cihazlar arasında eş zamanlı olarak.

Bu sayfada, ve uygulamanızı doğrulamanın yolları gözden geçireceğiz.

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.
  • Tedarikçi firma tarafından ses HAL'sinin bir parçası olarak uygulanan HIDL arayüzü, cihaz özelliklerini raporlar.

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önetme

Ses Politika Yöneticisi, ses akışını daha iyi desteklemek için sistem API'leri sunar. aynı anda birden çok ses sistemi Bu sistem API'leri ayarı etkinleştirir. ve belirli bir strateji için birden fazla tercih edilen cihazı kaldırma. 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çılırken ses sistemi belirtilmelidir. Etkin medya cihazı, çıkış akışları bu bağlamda 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 aşağıdaki serileri kullanır sayısı:

  1. Medya için tercih edilen tüm cihazlar kullanılabilir durumdaysa bunların tümü etkin cihaz olarak seçilir.
  2. Aksi takdirde, son bağlanan çıkarılabilir cihaz seçilir.
  3. Bağlı çıkarılabilir cihaz yoksa varsayılan ses politikası kuralları etkin cihazları seçmek üzere, çıkış cihazlarını seçme işlemine yönelik adımlar 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.

Ses Politikası Yöneticisi, yeni bir cihaz seçimini uygulamak için çıkış akışı boştaysa cihaz bağlandığında çıkış akışını kapatıp yeniden açar veya çıkış akışı bekleme moduna alındığında bunu 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 veya setPreferredDevicesForStrategy ile ayarlanan tercih edilen ses cihazlarını kaldırır.

  • getPreferredDeviceForStrategy

    Önceden ayarlanmış ses stratejisi için tercih edilen cihazı döndürür setPreferredDeviceForStrategy veya setPreferredDevicesForStrategy.

  • setPreferredDevicesForStrategy

    Belirli bir strateji için tercih edilen cihazları ayarlar.

  • getPreferredDevicesForStrategy

    Daha önce setPreferredDeviceForStrategy veya setPreferredDevicesForStrategy ile 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

    Stratejik olarak tercih edilen seste yapılan değişikliklerle ilgili bildirim almak için bir dinleyici ekler olanak tanır.

  • 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 kullanılarak raporlanır. ve AudioTransport yapı içeriyor. AudioTransport yapısı, bilinen ses biçimleri için AudioProfile ses bağlantı noktası özelliğine sahip veya platform tarafından bilinmeyen biçimler için ham donanım tanımlayıcılarını kullanır. 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 açıklayan AudioTransport ve AudioProfile yapıları özellikler.

Ses HAL yöntemleri

Ses Politikası Yöneticisi cihazın özellikler:

  • 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 sağlayıcısından 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 çok ses profilini desteklemek için eski API'nin 3.2 sürümü, yeni bir audio_port_v7 yapısı. Kaynak koduna bakın. inceleyebilirsiniz.

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 sağlayıcısından 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'den düşük ve HIDL HAL sürümü 7 veya daha yeni olduğunda eski get_audio_port API'deki verilerin yeni AudioPort biçimine doldurulması gerekir. Bu durumda, raporlanan tüm örnek hızları ve kanal get_audio_port maskelerinin, döndürülen tüm raporlar için biçimlerinden yararlanarak get_audio_port değerlerinden AudioPort yapısı kullanılır.

Örnek API uygulamaları

Bu bölümde, API'leri kullanan yöntemler içeren çeşitli test paketleri açıklanmaktadır ele alınacaktır. Aşağıdaki yöntemlere başvurarak nasıl uygulandığını ve kullanıldığını gösterir.

setPreferredDevicesForStrategy, getPreferredDevicesForStrategy, removePreferredDeviceForStrategy ve OnPreferredDevicesForStrategyChangedListener sistem API'lerinin kullanımına örnek olarak GTS'deki PreferredDeviceRoutingTest yöntemi verilebilir.

AudioDeviceInfo kapsamındaki yeni yapının örneğini görmek için CTS'de bulunan AudioManagerTest#testGetDevices yöntemidir.

get_audio_port_v7 için uygulama örneği aşağıda verilmiştir. audio_hal.c ve özelliklerin birden fazla cihaz için nasıl sorgulandığını gösterir.

Doğrulama

Bu bölümde CTS hakkında bilgi verilmektedir ve Ses Yöneticisi için GTS (Google Mobil Hizmetleri Test Paketi) doğrulaması.

CTS testleri

CTS testleri android.media.cts.AudioManagerTest bölgesinde bulunmaktadır.

Aşağıda, kullanılabilir Ses Yöneticisi testlerinin listesi bulunmaktadır:

  • AudioManagerTest#testGetDevices

    Ses cihazının hassas özelliklerini doğrular. Aynı zamanda AudioDeviceInfo yapısında döndürülen ses profilleri içeriği eski, düzleştirilmiş dizi biçimindedir ancak yeni AudioProfile biçimindedir.

  • AudioManagerTest#testPreferredDevicesForStrategy ve AudioManagerTest#testPreferredDeviceForCapturePreset

    Strateji ve yakalama hazır ayarı için tercih edilen cihazların, API testleri başarıyla tamamlandı.

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.