2016-01-14 36 views
5

La mia applicazione sta misurando il volume dell'audio catturato in funzione dell'ampiezza assoluta dei campioni.Modifica della sensibilità del microfono Android dopo la telefonata

Ho notato e comportamento imprevisto in android.media.AudioRecord di Android SDK. Supponiamo seguente flusso:

  1. applicazione viene avviata
  2. del volume audio viene misurata
  3. Telefonata risposta/composto
  4. del volume audio viene misurata

Il rumore intorno al microfono è prodotto dalla TV con impostazione del volume costante. I valori misurati per il punto 2 sono nel range [55-65] ei valori misurati per il punto 4 sono nel range [15-25] (si veda la visualizzazione audio per 2. e 4. sotto).

Capisco che ci deve essere una regolazione del volume in corso quando si verifica una telefonata. È possibile monitorare queste regolazioni o eliminarle?

Ho provato AutomaticGainControl ma non è supportato sul mio Nexus 5 e non voglio usarlo poiché i dispositivi di destinazione potrebbero non supportarlo.

regolazione Aggiornamento Questo volume sta accadendo non solo dopo telefonata. Ho appena notato lo stesso comportamento quando il telefono si trovava sul tavolo per misurare il volume.

PCM audio before and after the phone call

risposta

1

Per quanto riguarda le risorse che la vostra applicazione condivide con altre applicazioni (il microfono in questa materia) - si dovrebbe sempre trattarli con cura e assumere c'è la configurazione può cambiare nel corso di una telefonata o altro uso come il passaggio a un'altra app che sta usando il microfono.

Invece di cercare di monitorare variazioni del peso, che possono richiedere root o altri privilegi elevati - Vorrei prendere un altro approccio e procedere come segue:

  1. Salva il livello di sensibilità del microfono ad un file di configurazione (shared_prefs) nella tua attività di registrazione quando l'utente sta registrando. fare lo stesso se l'utente lo modifica naturalmente durante l'utilizzo della tua app.
  2. Nel proc onResume della vostra attività di registrazione - caricare il valore microfono livello di sensibilità e impostare prima di continuare a registrare (How to adjust microphone sensitivity while recording audio in android - Solved)

Se c'è una telefonata che getta la vostra applicazione per lo sfondo e prende il controllo del microfono, una volta terminato - la tua app tornerà in primo piano e manterrà il livello di sensibilità del microfono per ulteriori registrazioni.

Spero che questo aiuti.

+0

Hai assolutamente ragione di fare attenzione con risorse condivise come il microfono. Cosa intendi esattamente in 1.? Calcolo il volume per ciascun campione registrato, non è un'impostazione dell'interfaccia utente. L'altra preoccupazione che ho è che il guadagno non conserverà la qualità del suono. –

+1

Per 1 - salva tutte le impostazioni del microfono necessarie per ogni registrazione e ripristinala quando l'app torna in primo piano. – FunkSoulBrother

+0

Grazie per le tue idee @FunkSoulBrother.Questi sono suggerimenti validi ma il problema principale per me è evidenziato in una parte ** Aggiornamento **. Il cambiamento di sensibilità mi è venuto in mente senza un evento di chiamata telefonica: l'app era in primo piano e il telefono non aveva nemmeno la scheda SIM. Devo fornire un suono di qualità costante durante la registrazione. –