2012-05-03 17 views
6

Ho un'app che legge il microfono. In particolare, sto rilevando il soffio nel microfono;) Non funziona su molti dispositivi HTC. Ho preso un HTC Droid Eris e un HTC Droid Incredible. In aggiunta a quelli che ho segnalato da molti amici che hanno dispositivi HTC anche questo problema include il relativamente nuovo HTC Thunderbolt.Disabilita cancellazione rumore HTC

Quindi, il debug dell'applicazione ha dimostrato che il rumore ambientale della stanza si registra da 4000-11000 in uno Starbucks. Non appena soffio nel microfono, il volume di input scende ai 4000: ogni volta, sempre.

Qualcuno sa se questo può essere disabilitato a livello di programmazione?

Ecco come sto leggendo l'ingresso ...

int minBufferSize = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 
    AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize); 
    short[] buffer = new short[minBufferSize]; 

    audioRecord.startRecording(); 
    audioRecord.read(buffer, 0, minBufferSize); 

    int i = 0; 
    for (short sample : buffer) { 
     inputVolume = Math.abs(sample); 
     maxVolumeIn = (inputVolume > maxVolumeIn) ? inputVolume : maxVolumeIn; 
     if (inputVolume >= micSensitivity) { 
      Log.d(TAG, "Blowing Detected. Volume Level: " + inputVolume); 
      break; 
     } 
    } 

risposta

5

È impostabile ad un grado molto piccolo.

L'utilizzo della sorgente audio MediaRecorder.AudioSource.VOICE_RECOGNITION anziché MediaRecorder.AudioSource.MIC disattiva i filtri audio per tale ingresso. In generale è una specie di selvaggio west in termini di filtraggio che vedi da dispositivo a dispositivo. Anche l'utilizzo di VOICE_RECOGNITION non è perfetto poiché l'eliminazione dei filtri è stata adottata solo nella definizione di compatibilità di Ice Cream Sandwich. HTC lo stava usando prima di Ice Cream Sandwich, quindi per il tuo caso sarà probabilmente la scelta giusta.

Dalla sezione 5.3 del Android 4.0 Compatibility Definition Document:

Oltre alle specifiche di registrazione di cui sopra, quando un'applicazione è iniziato a registrare un flusso audio utilizzando la fonte android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION audio:

  • elaborazione per la riduzione del rumore, se presente, DEVE essere disabilitato.
  • Il controllo automatico del guadagno, se presente, DEVE essere disabilitato.
+0

Non ho avuto la possibilità di provare ciò che suggerisci. Ti assegnerò una parte della taglia in quanto la tua soluzione sembra ragionevole, ma richiederebbe refactoring e testing potenzialmente significativi. –

+0

Richiede sicuramente un po 'di ginnastica sul codice per ottenere una solida soluzione audio che funzioni su tutti i dispositivi. Conosco il dolore –