2012-11-26 8 views
10

Conosco Visualizer per mostrare un po 'di onda durante la riproduzione audio tramite Android Media Player.Come fare Visualizer durante la registrazione audio in Android

Ma voglio mostrare Visualizer durante la registrazione di mezzi audio durante la registrazione voglio mostrare l'onda lineare che cambia in base al battito della voce dell'utente.

E 'possibile fare in Android.

+0

un misuratore di livello sarebbe sufficiente, o hai bisogno di ogni livello di frequenze? – elgui

+0

ho bisogno di almeno qualche valore di battimento per disegnare un grafico me stesso utilizzando grafico api – koti

+0

trama registrato byte con intervalli di tempo crescenti .. riferirsi risposta sotto – everlasto

risposta

14

chiamando ogni x millisecondi tua MediaRecorder.getMaxAmplitude(), vuoi avere (da official documentation):

l'ampiezza massima assoluta che è stata campionata dopo l'ultima chiamata per questo metodo.

quindi, è possibile elaborare questo valore in tempo reale per disegnare un grafico o modificare alcune proprietà di visualizzazione.
non perfetto, ma spero che aiuta =)

edit: solo così si sa, il valore recuperato sarà lo stesso per tutti i dispositivi Android: tra 0 e 32767. (ho più di 10k report degli utenti dandomi questo valore quando soffiano nel microfono).

+0

grazie proverò questo – koti

+0

necessario specificare il file di output .. Può essere saltato? –

+0

no non può, basta dare al registratore uno come questo: File cacheDir = getWritableCacheDir(); samplePath = cacheDir.getAbsolutePath() + "/ sample"; mRecorder.setOutputFile (samplePath); e cancellalo quando hai finito ... – elgui

1

Potrebbe essere necessario utilizzare la classe AudioRecorder anziché MediaRecorder.

Controllare i metodi di lettura del numero di registrazione (...) che mettono i dati audio in byte [] invece di metterli direttamente in un file.

Per visualizzare le modifiche sul grafico, è necessario analizzare i dati (codificati in PCM 8 o 16 bit - link) e aggiornare il grafico in tempo reale.

3

due cose importanti:

  • è necessario convertire i byte dal vivo (dal MIC) per valori numerici inorder per tracciare loro.
  • Poiché si utilizza un grafico in tempo reale, per tracciare quei punti utilizzare SurfaceView.

    registrazione Converti byte a valori numerici riferiscono: Android: Listener to record sound if any sound occurs dove si trova la variabile "temp" contiene il valore numerico del vostro audio.

    tracciare punti Questi valori numerici che indicano i valori Y è tracciata contro aumento X (intervallo di tempo) valori (0,1,2 ..) come grafico. Utilizzando SurfaceView esempio ..,

//canvas.drawLine(previous X value,previous Y value,X,Y, paint); 
canvas.drawPoint(X,Y,paint); 
SurfaceHolder.unlockCanvasAndPost(canvas); 

Lei non ha bisogno di tracciare tutti i valori, per l'efficienza è possibile filtrare questi valori con le condizioni e la trama per certi intervalli di tempo.

Spero che questo aiuti :)