2012-05-03 24 views
6

Tengo una aplicación que lee el micrófono. Específicamente, estoy detectando que sopla en el micrófono;) No funciona en muchos dispositivos HTC. Recogí un HTC Droid Eris y un HTC Droid Incredible. Además de esos, tengo informes de muchos amigos que tienen dispositivos HTC que también experimentan este problema para incluir el relativamente nuevo HTC Thunderbolt.Inhabilitar cancelación de ruido HTC

Por lo tanto, la depuración de la aplicación ha demostrado que el ruido ambiental de la sala registra de 4000 a 11000 en un Starbucks. Tan pronto como soplo en el micrófono, el volumen de entrada desciende a los 4000: todo el tiempo, todo el tiempo.

¿Alguien sabe si esto se puede desactivar mediante programación?

Así es como estoy leyendo la entrada ...

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; 
     } 
    } 

Respuesta

5

Es ajustable a un grado muy pequeño.

El uso de la fuente de audio MediaRecorder.AudioSource.VOICE_RECOGNITION en lugar de MediaRecorder.AudioSource.MIC apagará los filtros de audio para esa entrada. En general, es una especie de salvaje oeste en términos del filtrado que se ve de un dispositivo a otro. Incluso el uso de VOICE_RECOGNITION no es perfecto, ya que la eliminación de los filtros solo se adoptó en la definición de compatibilidad de Ice Cream Sandwich. HTC lo estaba usando antes de Ice Cream Sandwich, así que para su caso, probablemente sea la opción correcta.

Desde la sección 5.3 de la Android 4.0 Compatibility Definition Document:

Además de las especificaciones de grabación anteriores, cuando una aplicación se ha iniciado la grabación de un flujo de audio utilizando la fuente de android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION audio:

  • procesamiento de reducción de ruido, si está presente, DEBE estar desactivado.
  • El control de ganancia automático, si está presente, DEBE estar desactivado.
+0

No he tenido la oportunidad de probar lo que sugiere. Voy a otorgarle una parte de la recompensa ya que su solución parece razonable, pero requeriría refactorizaciones y pruebas potencialmente significativas. –

+0

Definitivamente requiere un poco de gimnasia de código para obtener una solución de audio sólida que funcione en todos los dispositivos. Sé el dolor. –