Sto cercando di calcolare il livello di volume dal microfono su Android. Ho usato AudioRecord per ottenere i dati grezzi dal microfono e anche fatto un po 'di normalizzazione e calcolato il decibel dopo. Ma il risultato non è giusto. I valori di decibel ottenuti non erano costanti e non possono riflettere il suono. Ad esempio, anche quando ho battuto le mani, il valore di decibel non rifletteva il suono. Come dovrei cambiare il codice o cosa dovrei fare se voglio calcolare il volume dal microfono in tempo reale? Molte grazie.Calcola il livello di volume dal microfono su Android
recorder = new AudioRecord(AudioSource.MIC, iSampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, iAudioBufferSize);
iBufferReadResult = recorder.read(buffer, 0, iAudioBufferSize);
for (int i = 0; i < buffer.length-1; i++)
{
ByteBuffer bb = ByteBuffer.wrap(buffer, i, 2);
int isample = bb.getShort();
double dsample =(double) isample/32768.0;
sum += (dsample*dsample);
double rms = Math.sqrt(sum/(buffer.length*0.5));
double decibel = 20*Math.log10(rms);
sum = 0;
}
}
Lo scopo potrebbe essere rileva la modifica del suono ambiente solo in base alla sonorità. Come dovrei farlo? Grazie. – Foreverniu
penso che controlli il volume in gestione audio – DjHacktorReborn
Non ho ancora lavorato con il microfono, ma suppongo che il tuo calcolo abbia sempre lo stesso risultato. Supponete che non ci siano rumori, quindi avreste molti campioni al 50%, che sarebbe 0 se i numeri sono veramente firmati. D'altra parte, quando c'è un suono, avresti molti campioni con un'ampiezza positiva e negativa simile, che aggiungerebbe anche 0. Direi che è necessario prendere solo valori assoluti, ad es. eliminare il segno se ricevi veramente numeri positivi e negativi? –