2012-05-19 8 views
5

Qualcuno sa che cosa è l'unità restituita del metodo:Qual è l'unità dell'ampiezza restituita del metodo getMaxAmplitude?

MediaRecorder.getMaxAmplitude(); 

La documentazione API MediaRecorder Android indica solo che questo metodo restituisce l'ampiezza massima assoluta dei punti campionati dopo l'ultima chiamata, ma non specifica l'unità . È in pascal, milli-pascal, altro?

+1

Immagino che sia arbitrario; Dubito che sia calibrato su qualsiasi unità particolare. –

+0

Anche così, ma spero che non lo sia! Sto ancora cercando ma finora non ha avuto successo. Spero che questa domanda abbia un po 'più di attenzione. – Future2020

risposta

5

Dopo una ricerca dettagliata, io stesso e alcune università siamo giunti a questa conclusione. Le risposte a queste domande non erano ancora complete, perciò scrivo la mia risposta a questa domanda.

La funzione MediaRecorder.getMaxAmplitude() restituisce valori interi a 16 bit senza segno (0-32767). Questi valori sono probabilmente calcolati usando abs() su -32768 ... +32767, simile ai normali valori di esempio di qualità CD. Le ampiezze negative sono solo speculari e quindi l'ampiezza è sempre positiva.

I valori NON SONO CORRELATI a nessuna proprietà fisica calibrata concreta. I valori sono quindi solo digitalizzazione a 16 bit dell'uscita elettrica da 0-100% (intervallo di tensione massimo di quel microfono).

I microfoni convertono la pressione sonora (Pascal) linearmente in tensione. Pertanto, i valori riportati dall'API sono correlati alla pressione sonora, ma sono diversi su ciascun dispositivo utilizzato e dipendono fortemente dalla marca, dal modello e dal dispositivo specifico (circuiti, amplificatore, ecc.) Ciò significa che è estremamente difficile giudicare i valori senza calibrando il microfono del telefono su un affidabile misuratore di pressione sonora.

0

Le unità di misura saranno diverse per ogni dispositivo o microfono. Se vuoi sapere, dovrai testare ogni particolare modello di microfono con una sorgente o uno strumento di misura calibrato.

+0

@ hotpaw2: grazie mille per la tua risposta. Ho pubblicato una risposta personale, ritenendo che sia un po 'più completa della risposta con ulteriori informazioni sui valori restituiti dall'api. Spero che questo aiuti gli altri in futuro. – Future2020

3

I valori MediaRecorder.getMaxAmplitude() variano tra 0 e 32.767

(Nota: 32.767 è il valore massimo di un intero con segno)

Le unità non sono standard.

Nelle mie app, generalmente tratto un valore superiore a 18000 come "forte", che corrisponde a circa il 50% del valore massimo.

+0

@ gregm: grazie mille per la tua risposta. Tuttavia è molto inaffidabile impostare qualsiasi soglia, ad es. 18000, per indicare il volume senza una vera calibrazione. Ho pubblicato una risposta personale, ritenendo che sia un po 'più completa della tua risposta. – Future2020

+0

Suggerisco di utilizzare un valore vicino al massimo. Mi piace> 32.000. È facile massimizzare il valore con un rumore. Forse sarà più affidabile su tutti i dispositivi. – gregm

Problemi correlati