A partire dal 27 marzo 2025, ti consigliamo di utilizzare android-latest-release anziché aosp-main per compilare e contribuire ad AOSP. Per ulteriori informazioni, vedi Modifiche ad AOSP.
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
La release di Android 10 include un refactoring significativo del gestore delle norme audio per offrire maggiore flessibilità a supporto di casi d'uso complessi per il settore automobilistico:
Strategie di routing specifiche per gli OEM.
Gruppi di volumi personalizzabili per gruppi di tipi di stream legacy che utilizzano le stesse curve di volume.
Strategie di routing dichiarate dal motore di criteri audio anziché essere codificate.
Curve e gruppi di volume gestiti dal motore di policy audio.
Refactoring interno in preparazione di una futura suddivisione tra codice comune e codice configurabile
e per offrire una gestione più completa dei dispositivi audio. Ad esempio, l'utilizzo di tutte le proprietà del dispositivo, non solo
il tipo, nelle regole dei criteri.
Android 7.0 ha introdotto un formato di file di configurazione delle policy audio (XML) per
descrivere la topologia audio.
Le versioni precedenti di Android richiedevano l'utilizzo di
device/<company>/<device>/audio/audio_policy.conf
per dichiarare i dispositivi audio presenti nel tuo prodotto (puoi vedere un esempio di
questo file per l'hardware audio di Galaxy Nexus in
device/samsung/tuna/audio/audio_policy.conf). Tuttavia, CONF è un
formato proprietario semplice troppo limitato per descrivere topologie complesse per
verticali come televisori e automobili.
Android 7.0 ha ritirato audio_policy.conf e ha aggiunto il supporto
per la definizione di una topologia audio utilizzando un formato di file XML più
leggibile, con un'ampia gamma di strumenti di modifica e analisi e sufficientemente flessibile
per descrivere topologie audio complesse. Android 7.0 utilizza il flag di build USE_XML_AUDIO_POLICY_CONF per scegliere il formato XML dei file di configurazione.
Vantaggi del formato XML
Come nel file CONF, il file XML consente di definire il numero e i tipi
di profili di stream di output e input, i dispositivi utilizzabili per la riproduzione e l'acquisizione e
gli attributi audio. Inoltre, il formato XML offre i seguenti miglioramenti:
In Android 10, sono consentite più app di registrazione attive
contemporaneamente.
L'avvio della registrazione non viene mai rifiutato a causa di una situazione di concorrenza.
Il callback registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb)
notifica ai client le modifiche al percorso di acquisizione.
Nelle seguenti situazioni, un client riceve campioni audio silenziosi:
È attivo un caso d'uso sensibile alla privacy (ad esempio, VOICE_COMMUNICATION).
Il client non dispone di un servizio in primo piano o di un'interfaccia utente in primo piano.
I ruoli speciali sono riconosciuti dai criteri:
Servizio di accessibilità: può registrare anche se è attivo un caso d'uso sensibile alla privacy.
Assistente: considerato sensibile alla privacy se la UI è in primo piano.
I profili audio hanno una struttura simile ai descrittori audio semplici HDMI, consentendo un diverso
set di frequenze di campionamento/maschere dei canali per ogni formato audio.
Esistono definizioni esplicite per tutte le possibili connessioni tra dispositivi e stream.
In precedenza, una regola implicita consentiva di connettere tutti i dispositivi collegati allo stesso modulo HAL, impedendo alla policy audio di controllare le connessioni richieste con le API patch audio. Nel formato XML, la descrizione della topologia definisce i limiti di connessione.
Il supporto per include evita di ripetere le definizioni standard di A2DP, USB o invio di reindirizzamento.
Le curve del volume sono personalizzabili. In precedenza, le tabelle del volume erano codificate. Nel formato XML, le tabelle dei volumi sono descritte e possono essere personalizzate.
Il modello all'indirizzo
frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml
mostra molte di queste funzionalità in uso.
Formato e posizione del file
Il nuovo file di configurazione delle norme audio è
audio_policy_configuration.xml e si trova in
/system/etc. Gli esempi seguenti mostrano una semplice configurazione delle norme audio nel formato
file XML per Android 12 e per le versioni precedenti
di Android 12.
La struttura di primo livello contiene moduli che corrispondono a ogni modulo hardware HAL
audio, dove ogni modulo ha un elenco di porte di mixaggio, porte del dispositivo e
routing:
Mix ports descrive i possibili profili di configurazione per gli stream
che possono essere aperti nell'HAL audio per la riproduzione e l'acquisizione.
Le porte del dispositivo descrivono i dispositivi che possono essere collegati con
il relativo tipo (e, facoltativamente, indirizzo e proprietà audio, se pertinenti).
Routes è separato dal descrittore della porta di mixaggio,
consentendo la descrizione dei percorsi da dispositivo a dispositivo o da stream a dispositivo.
Le tabelle del volume sono semplici elenchi di punti che definiscono la curva utilizzata per la conversione
da un indice dell'interfaccia utente a un volume in dB. Un file di inclusione separato fornisce curve
predefinite, ma ogni curva per un determinato caso d'uso e categoria di dispositivo può essere
sovrascritta.
Il metodo XML Inclusions (XInclude) può essere utilizzato per includere informazioni di configurazione
delle policy audio contenute in altri file XML. Tutti i file inclusi devono
seguire la struttura descritta sopra con le seguenti limitazioni:
I file possono contenere solo elementi di primo livello.
I file non possono contenere elementi XInclude.
Utilizza include per evitare di copiare le informazioni di configurazione del modulo HAL audio standard di Android Open Source Project (AOSP) in tutti i file di configurazione delle norme audio (che è soggetto a errori). Viene fornito un file XML di configurazione della policy audio standard
per i seguenti HAL audio:
AudioPolicyManager.cpp è suddiviso in diversi moduli
per semplificare la manutenzione e la configurazione. L'organizzazione di
frameworks/av/services/audiopolicy include i
seguenti moduli.
Modulo
Descrizione
/managerdefault
Include le interfacce generiche e l'implementazione del comportamento comuni a tutte le
app. Simile a AudioPolicyManager.cpp con funzionalità del motore e concetti comuni astratti.
/common
Definisce le classi di base (ad esempio, strutture di dati per profili di stream audio di input/output, descrittori di dispositivi audio, patch audio e porte audio). In precedenza, questo valore
era definito all'interno di AudioPolicyManager.cpp.
/engine
Implementa le regole che definiscono quali dispositivi e volumi devono essere utilizzati per
un determinato caso d'uso. Implementa un'interfaccia standard con la parte generica, ad esempio per ottenere il dispositivo appropriato per un determinato caso d'uso di riproduzione o acquisizione oppure per impostare dispositivi connessi o uno stato esterno (ovvero uno stato di chiamata di utilizzo forzato) che può alterare la decisione di routing.
Implementazione del motore delle policy che si basa sul framework dei parametri (vedi sotto).
La configurazione si basa sul framework dei parametri e sul punto in cui la policy è
definita dai file XML.
/enginedefault
Implementazione del motore delle policy basata sulle implementazioni precedenti di Android Audio Policy Manager. Questa è l'impostazione predefinita e include regole hardcoded che
corrispondono alle implementazioni Nexus e AOSP.
/service
Include interfacce, threading e implementazione del blocco del binder con
l'interfaccia al resto del framework.
Configurazione tramite il framework dei parametri
Il codice dei criteri audio è organizzato in modo da essere facile da comprendere e
gestire, supportando al contempo un criterio audio definito interamente da file di configurazione. La progettazione dell'organizzazione e delle norme audio si basa sul framework dei parametri di Intel, un framework basato su plug-in e regole per la gestione dei parametri.
L'utilizzo del criterio audio configurabile consente ai fornitori OEM di:
Descrivere la struttura di un sistema e i relativi parametri in XML.
Scrivi (in C++) o riutilizza un backend (plug-in) per accedere ai parametri descritti.
Definisci (in XML o in un linguaggio specifico del dominio) le condizioni/regole in base alle quali
un determinato parametro deve assumere un determinato valore.
AOSP include un esempio di file di configurazione delle norme audio che utilizza il framework dei parametri
all'indirizzo Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml. Per
maggiori dettagli, consulta la documentazione di Intel sul
framework dei parametri.
In Android 10 o versioni precedenti, la policy audio configurabile
viene selezionata utilizzando l'opzione di build USE_CONFIGURABLE_AUDIO_POLICY.
In Android 11 o versioni successive, la versione del motore
delle norme audio è selezionata nel file audio_policy_configuration.xml.
Per selezionare il motore di policy audio configurabile, imposta il valore dell'attributo engine_library
dell'elemento globalConfiguration su configurable
come nel seguente esempio:
Android 6.0 ha introdotto un'API di enumerazione e selezione pubblica che si basa
sull'infrastruttura di patch/porta audio e consente agli sviluppatori di app
di indicare una preferenza per un input o un output specifico del dispositivo per
tracce o registrazioni audio connesse.
In Android 7.0, l'API Enumeration and Selection viene verificata dai test CTS
ed è estesa per includere il routing per i flussi audio C/C++ nativi (OpenSL ES).
Il routing degli stream nativi continua a essere eseguito in Java, con l'aggiunta di
un'interfaccia AudioRouting che sostituisce, combina e ritira
i metodi di routing espliciti specifici delle classi AudioTrack e
AudioRecord.
Per dettagli sull'API Enumeration and Selection, consulta
Interfacce di configurazione
Android e OpenSLES_AndroidConfiguration.h.
Per informazioni dettagliate sul routing audio, consulta
AudioRouting.
Assistenza multicanale
Se l'hardware e il driver supportano l'audio multicanale tramite HDMI, puoi
inviare il flusso audio direttamente all'hardware audio (in questo modo viene bypassato il mixer
AudioFlinger, quindi non viene eseguito il downmix a due canali). L'HAL audio
deve esporre se un profilo di stream di output supporta le funzionalità
audio multicanale. Se l'HAL espone le proprie funzionalità, il gestore delle norme predefinito
consente la riproduzione multicanale tramite HDMI. Per i dettagli sull'implementazione, vedi
device/samsung/tuna/audio/audio_hw.c.
Per specificare che il tuo prodotto contiene un output audio multicanale, modifica il file di configurazione delle norme audio per descrivere l'output multicanale per il tuo prodotto. Il seguente esempio tratto da
frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml
mostra una maschera di canale dinamica, il che significa che Audio Policy Manager esegue query sulle maschere di canale
supportate dal sink HDMI dopo la connessione.
Mostra esempio di configurazione del dispositivo HDMI
Puoi anche specificare una maschera di canale statica, ad esempio
AUDIO_CHANNEL_OUT_5POINT1. Il mixer di AudioFlinger esegue il downmix
automatico dei contenuti in stereo quando vengono inviati a un dispositivo audio che non
supporta l'audio multicanale.
Codec multimediali
Assicurati che i codec audio supportati dall'hardware e dai driver siano dichiarati correttamente per il tuo prodotto. Per i dettagli, vedi
Esposizione di codec al
framework.
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-10-10 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-10-10 UTC."],[],[]]