2012-12-28 20 views
8

Sto provando a creare una configurazione a doppio schermo. Il tablet Android (Nexus 10) è collegato a un altro schermo tramite HDMI.Uscita audio su cuffia e altoparlante contemporaneamente

Durante la riproduzione di filmati sul tablet (utilizzando VLC o altre app), verrà visualizzato correttamente su entrambi gli schermi.
Tuttavia, il segnale audio viene trasferito solo tramite HDMI. Usando il siamo riusciti ad avere l'uscita Audio su o su cuffie o HDMI.

Non riesco a vedere una funzione per impostare l'uscita audio per entrambi i dispositivi allo stesso tempo. Ho provato a configurarlo con Audio Manager, ma funziona solo per un canale.

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

am.setSpeakerphoneOn(true); 
am.setWiredHeadsetOn(true); 

Un'altra cosa che ho notato è l'API setParameters che poi passa le variabili al sistema audio della piattaforma. Potrebbe essere ALSA, forse la soluzione è lì?

risposta

2

Non c'è modo di farlo in un modo che è garantito per funzionare su tutti i dispositivi Android. Il problema qui è che in genere le piattaforme non dispongono di alcun tipo di dispositivo combinato HDMI + Speaker o HDMI + Headset (ovvero un dispositivo audio che descrive un percorso di basso livello per un singolo flusso di uscita verso HDMI e altre destinazioni). Non che ci siano necessariamente limitazioni hardware, ma semplicemente non è un percorso che in genere vorresti usare, e quindi non è stato aggiunto.

Non ho mai incontrato una piattaforma in cui sia la cuffia HDMI che quella cablata sarebbero state selezionate per qualsiasi tipo di streaming. È possibile selezionare HDMI + Speaker per i tipi di streaming RING e ALARM su alcune piattaforme, ma se la piattaforma non dispone di un dispositivo combinato per realizzare tale decisione di routing, l'audio sarà sempre o HDMI o l'altoparlante.
Dai uno sguardo allo at this code per vedere cosa intendo. Questo è ciò che gli OEM che usano le piattaforme Qualcomm basano molto sul loro codice. E ciò che fa questo particolare pezzo di codice è selezionare un percorso di output di basso livello per un particolare stream. Nel tuo caso vedrebbe che HDMI (AUX_DIGITAL) è disponibile, quindi sceglierebbe il "caso d'uso" HDMI (che corrisponde a qualcosa like this) e restituire immediatamente.

+0

Thx e ha tutto il senso. Per verificare la mia comprensione: un sistema Android personalizzato (ad esempio, sono un OEM e in grado di distribuire le mie versioni personali) potrebbe contenere un 'ALSADevice.cpp' modificato che quindi ha una route impostata per HDMI e Altoparlante allo stesso tempo. L'unica preoccupazione rimasta è che la funzione 'getUCMDevice' può restituire solo un singolo dispositivo audio - o è questo che intendi con percorsi? Quindi dovrei prima aggiungere un percorso, quindi restituire l'ID del percorso/nome lì, corretto? –

+0

Dovresti assicurarti che AudioPolicyManager selezioni effettivamente HDMI + Altoparlante per il tipo di stream che stai utilizzando (o almeno per il tipo di flusso _some_). Quindi ALSADevice deve selezionare un dispositivo UCM combinato (ad esempio qualcosa come 'SND_USE_CASE_DEV_HDMI_SPEAKER'), e infine dovresti aggiornare il file UCM (snd_soc_msm_blabla) per aggiungere le impostazioni effettive (quello che chiamo il routing di basso livello) per il tuo nuovo aggiunto Dispositivo UCM. ..e ovviamente la piattaforma deve supportare effettivamente questo. – Michael

+0

Grazie per le informazioni, ma puoi fare qualcosa come copiare il flusso di dati all'interno dell'applicazione e inviarlo a un dispositivo di output diverso da solo? –

Problemi correlati