Birleşik ses cihazı yönlendirmesi

Birleşik ses cihazı yönlendirme özelliği, aynı anda birden fazla ses cihazını kullanabilir. 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, ses cihazlarının özelliklerini daha çok keşfedebilir bu özelliğin sağladığı herkese açık API'leri kullanarak hassas bir şekilde çalışmanızı sağlar. 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ı ayrıca kullanıcıların belirli bir sorgu için aynı türde birden fazla cihaz bir şablon görevi görür.

Android 12'den itibaren bu sınırlamalar kaldırılmıştır ses yayını, bir gruba çoklu yayın yapma gibi yeni kullanım alanlarına olanak sağlamak için ya da birden fazla USB ses kartını aynı anda seçebilirsiniz. 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 akışı 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ı yönetir.
  • 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ı olarak ele alınmaktadır.

Bir strateji için birden fazla tercih edilen cihazı yönetin

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'e kadar 12. Bu özellik yalnızca tek bir cihazda destekleniyordu.

Ses Politikası Yöneticisi, kullanıcılara etkin medya cihazları kavramını medya oynatma için seçilme olasılığı en yüksek olan cihazları tanımlar. Zaman çıkarılabilir bir cihazın bağlandığında, ses HAL çıkış akışlarının desteklenen özellikler için açılması ve kontrol edilmesi 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 gerçek cihazlara bağlı olarak değişebilir bağlı olabilir. Ses Politikası Yöneticisi aşağıdaki serileri kullanır sayısı:

  1. Medya için tercih edilen cihazların tümü kullanılabiliyorsa tümü seçilir etkin cihaz olarak ayarlayın.
  2. Aksi takdirde, en 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.

Çıkış akışının yeniden açılıp yönlendirilmesi için aşağıdaki ölçütleri karşılaması gerekir oynatma için en iyi yapılandırmayı seçmek üzere uygulamayı etkin cihazlara ekleyin:

  • Çıkış akışı etkin cihazları desteklemelidir.
  • Çıkış akışı dinamik profilleri desteklemelidir.
  • Çıkış akışı şu anda etkin cihazlara yönlendirilmemelidir.

Yeni cihaz seçiminin uygulanması için Ses Politikası Yöneticisi Çıkış akışı boştaysa cihaz bağlantısı kurulduğunda çıkış akışını yeniden açar veya bu, çıkış akışının bekleme moduna alındığı zamana erteler.

Ses Politika Yöneticisi, aşağıdaki sistem API'lerinin listesini sunar: AudioManager.java):

  • setPreferredDeviceForStrategy

    Belirli bir stratejide ses yönlendirme için tercih edilen cihazı ayarlar. Not cihazın, tercih edilen cihaz şu anda kullanılamayabileceğini ayarlanır, ancak kullanıma sunulduğunda kullanılır.

  • removePreferredDeviceForStrategy

    Daha önce şu cihazda ayarlanmış tercih edilen ses cihazlarını kaldırır: setPreferredDeviceForStrategy veya setPreferredDevicesForStrategy.

  • 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 ses stratejisi için tercih edilen cihazları döndürür setPreferredDeviceForStrategy veya setPreferredDevicesForStrategy.

  • OnPreferredDevicesForStrategyChangedListener

    Tercih edilen sesteki değişikliklerin bildirilmesi için bir arayüz tanımlar belirli bir ses stratejisi için ayarlanmış cihazlardır.

  • addOnPreferredDevicesForStrategyChangedListener

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

  • removeOnPreferredDevicesForStrategyChangedListener

    Strateji için tercih edilen ayardaki değişikliklerin önceden eklenmiş bir işleyicisini kaldırır ses sistemi.

Cihaz özelliklerini raporlama

Tedarikçiler ses HAL uygulamasının bir parçası olarak raporlama cihaz özellikleri. Bu bölümde, veri türleri ve yöntemleriyle ilgili açıklamalar Cihaz özelliklerini bildirmek için kullanılır ve ses HIDL HAL'sinde yapılan bazı değişiklikleri listeler V7, birden fazla cihazı destekler.

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. İlgili içeriği oluşturmak için kullanılan AudioProfile yapısı ses biçimini içeriyor, örnek hızları destekleniyor aşağıdaki kodda gösterildiği gibi kanal maskelerinin listesine ve types.hal adlı kullanıcıdan blok:

/**
* 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:Tedarikçi firmaya özel parametreyi almak için genel bir yöntem değerleri (ör. desteklenen ses biçimleri ve ilgili örnekleme hızları) görebilirsiniz.
  • getAudioPort:Desteklenen özelliklerin (ör. örnekleme) listesini döndürür hızları, biçimleri, kanal maskeleri, kazanım denetleyicileri) sağlamanız gerekir.

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'nin eklenmesi nedeniyle, eski API'nin 3.2 sürümü API'yi kullanarak cihazların özelliklerini sorgulamak için get_audio_port_v7 adlı yeni API audio_port_v7 yapısı.

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 get_audio_port API'den alınan verilerin yeni Eski API sürümü 3.2'nin ve HIDL HAL'nin altında olduğunda AudioPort biçimi 7 veya üzeri bir sürüm olduğundan emin olun. 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 kullanımına bir örnek. getPreferredDevicesForStrategy, removePreferredDeviceForStrategy ve OnPreferredDevicesForStrategyChangedListener sistem API'si şurada: GTS'de bulunan PreferredDeviceRoutingTest yöntemidir.

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'nin GTS (Google Mobil Hizmetler 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 konumunda bulunmaktadır.

Strateji ve ön ayar yakalaması için tercih edilen cihazlar için API'lerin geçerli olup olmadığını doğrulamak amacıyla düzgün şekilde çalışıyorsa AudioServiceHostTest#testPreferredDeviceRouting ve AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset testlerini çalıştırın.