9

Uso la classe AudioRecord per registrare la voce durante una chiamata.Android AudioRecord quali impostazioni registrare chiamata

Sono interinteressato per registrare solo la voce della persona che possiede il telefono (dal microfono). Durante la registrazione mi piacerebbe fare un po 'di elaborazione audio, ma per ora è fuori programma.

Android ha le seguenti opzioni: Audiosources

  • MediaRecorder.AudioSource.VOICE_CALL
  • MediaRecorder.AudioSource.MIC
  • MediaRecorder.AudioSource.VOICE_UPLINK
  • MediaRecorder.AudioSource.VOICE_DOWNLINK

Puoi spiegare quali sono le differenze tra di loro. Ok MIC è ovvio ma VOICE_CALL vs VOICE_UPLINK vs VOICE_DOWNLINK?

Inoltre dovrei scegliere una frequenza di campionamento (8000Hz, 16000Hz, 2250Hz, 44100Hz). Potresti dirmi quale frequenza di campionamento scegliere e perché?

Per il formato audio Ho scelto AudioFormat.ENCODING_PCM_16BIT ma ha anche: - AudioFormat.ENCODING_DEFAULT - AudioFormat.ENCODING_INVALID - AudioFormat.ENCODING_PCM_8BIT

Infine è il numero di canali devo usare e perché? (AudioFormat.CHANNEL_IN_STEREO o AudioFormat.CHANNEL_IN_MONO)

+1

registrazione delle chiamate è molto difficile in android.In parole migliori (La mia esperienza personale) la sua non possible..just google.u può vedere che molti documenti dicendo che non è possible.because registrazione di chiamata è nello strato di base di Android os.so non possiamo modificare quella part.its in binario –

+0

In quale versione di Android hai provato? Penso che l'Api dice che lo supporta (ufficiale), quindi vorrei fare un tentativo. – gosom

+1

quando ho provato allora registrerà solo per pochi secondi ... registrazione di supporto solo per alcuni mobiles..check queste pubblicitari thes sono utili per u..http: //stackoverflow.com/questions/3929984/recording-call-help -needed http://stackoverflow.com/questions/8632247/android-call-recording –

risposta

10

Si dovrebbe sempre mirare a utilizzare 44100 come frequenza di campionamento poiché è l'unica frequenza di campionamento che è garantita per funzionare secondo google.

"la frequenza di campionamento espresso in Hertz. 44100Hz è attualmente l'unico tasso che è garantito per funzionare su tutti i dispositivi, ma altri tassi come come 22050, 16000, 11025 e può funzionare su alcuni dispositivi." Dev site

Per quanto riguarda lo stereo rispetto al mono, utilizzare mono.

"descrive la configurazione dei canali audio. Vedere CHANNEL_IN_MONO e CHANNEL_IN_STEREO. CHANNEL_IN_MONO è garantito per funzionare su tutti i dispositivi." Dev site

Infine: 8bit pcm vs 16bit PCM: Usa PCM 16bit,

"formato di dati audio:. PCM 16 bit per campione Garantito per essere supportato dai dispositivi." Dev site

Ricordarsi di utilizzare un buffer breve [] invece del buffer di byte quando si utilizza 16 bit.Dal momento che a 16 bit è di 2 byte si dovrà combinare due voci nel buffer alla volta:

byte] [] {sample_1_upper, sample_1_lower, sample_2_upper, sample_2_lower, ..., sample_n_lower} Tuttavia, se viene utilizzato un breve del buffer []:
breve [] {sample1, sample2, ..., sample3}

non ho mai provato a registrare una chiamata, ma se il sistema operativo non vincola la fonte MIC probabilmente si potrebbe registrare da. Dal momento che stai registrando dal microfono dovresti solo far ascoltare la voce agli utenti.

+0

44100 non è garantito per funzionare) –

+0

Deve informare la documentazione Android allora che ancora afferma chiaramente che: "44100Hz è attualmente l'unico tasso garantito per funzionare su tutti i dispositivi, ma altre tariffe come 22050, 16000 e 11025 potrebbero funzionare su alcuni dispositivi. " – Risch

+0

La documentazione non è vera, alcuni dispositivi non supportano 44100 –

10

Ci può spiegare qual è la differenza tra di loro. Ok MIC è ovvio, ma VOICE_CALL vs VOICE_UPLINK vs VOICE_DOWNLINK?

VOICE_UPLINK: l'audio trasmesso dall'estremità all'altra parte. IOW, ciò che si parla nel microfono (più il rumore circostante a seconda che venga utilizzata la soppressione del rumore e quanto bene funzioni).

VOICE_DOWNLINK: L'audio trasmesso dalla altra parte vostra fine.

VOICE_CALL: VOICE_UPLINK + VOICE_DOWNLINK.

+0

Ciao nel mio caso voglio entrambe le registrazioni laterali, ma in alcuni dispositivi mobili come Samsung S8plusEdhe, S7edge non funziona, registrano solo la mia voce, non un'altra voce laterale che sto parlando al telefono. –

1

Un po 'in ritardo, ma è possibile interrogare il dispositivo audio per scoprire che cosa può fare;

AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 
String sampleRate = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); 
String sampleBufferSize = audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER); 
int bufferSize = AudioRecord.getMinBufferSize(Integer.parseInt(sampleRate), AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); 
+0

Ciao nel mio caso voglio entrambe le registrazioni laterali, ma in alcuni dispositivi mobili come Samsung S8plusEdhe, S7edge non funziona, registrano solo la mia voce, non la voce laterale che sto parlando al telefono. –

+0

Nelle ultime versioni di Android i produttori sono stati incoraggiati a costruire i loro telefoni con Voice.Call registrando entrambi i lati della chiamata (alcuni lo hanno incasinato e utilizzato Voice.Comm). Ad un certo punto quasi tutti i telefoni lo supportano e un gran numero di terze parti ha messo in circolazione i sistemi di registrazione delle chiamate (con costi e tempi elevati) e ha iscritto molti utenti ALLORA Android lo ha disabilitato ..... Completamente non correlato ma all'incirca allo stesso tempo Samsung (il più grande produttore di dispositivi Android) ha portato fuori la propria soluzione di registrazione delle chiamate (che può bypassare la disattivazione mentre fanno i telefoni). –

Problemi correlati