2012-05-14 13 views
8

Sto provando a registrare il suono dal MIC e a disegnare un grafico dal vivo. Sono in grado di registrare e disegnare il grafico. Il problema è che i valori che vengono registrati usando il codice sottostante non sono accurati per esempio ... l'immagine qui sotto è ciò che ottengo quando non c'è alcun suono presente. Ho visto esempi usando il fft, ma non sono sicuro se ciò sarà di aiuto nel mio caso mentre sto cercando di disegnare un grafico nel dominio del tempo e non vedo alcuno scopo per convertirlo in dominio di frequenza (per ora). Altri stanno usando il potere medio, questo potrebbe essere utile ma non ne sono sicuro.lettura dell'ampiezza di Android AudioRecord da MIC

Grazie per qualsiasi aiuto.

enter image description here

bufferSize = AudioRecord.getMinBufferSize(RECORDER_SAMPLERATE,RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING); 

    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 
      RECORDER_SAMPLERATE, RECORDER_CHANNELS,RECORDER_AUDIO_ENCODING, bufferSize); 

    short data [] = new short[bufferSize]; 

    while (!Thread.interrupted()) { 

     recorder.startRecording(); 

     recorder.read(data, 0, bufferSize); 

     recorder.stop(); 

     for (short s : data) 
     { 
      try { 
       Thread.sleep((long) 300.00); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      postUI (Math.abs(s)); 
     } 
    } 

    recorder.release(); 
+0

ciao come hai preso l'ampiezza del suono in Audiorecorder favore aiuto –

+1

registratore = new AudioRecord (MediaRecorder.AudioSource.MIC, RECORDER_SAMPLERATE, RECORDER_CHANNELS, RECORDER_AUDIO_ENCODING, bufferSize); recorder.startRecording(); \t \t \t recorder.read (dati, 0, bufferSize); \t \t \t recorder.stop(); per (numeri brevi: dati) { media + = Math.abs (s); } – user591124

risposta

12

Per chiunque altro alla ricerca di un modo per fare questo, controlla Samsung's fantastic example complete with source code

Samsung example

+2

Ho usato questo, ma Samsung ha (a torto) impostato arbitrariamente il volume massimo su "4.000", anche se il mio dispositivo può registrare almeno un volume di "7000" (qualunque cosa significhi). –

+0

Hey @KeirSimmons il valore varia da dispositivo a dispositivo. – Gourneau

1

Provare a usare una frequenza di campionamento più elevata. Il massimo è 48000, ma 44100 è standard.

Inoltre, è possibile che il microfono stia registrando solo il rumore di fondo.

+0

Ho preso la media di tutti i valori nella matrice corta invece di abs (s). Funziona bene – user591124