2011-11-27 20 views
6

He programado un programa de reconocimiento de voz y tengo problemas con el micrófono que me escucha, sobre la computadora reproduciendo música. Necesito un software que pueda filtrar el sonido dejando los parlantes del sonido que ingresa al micrófono.Cancelación de ruido activo

¿Hay algún software o componente (para Delphi) que pueda resolver mi problema?

+0

Debería capturar el perfil de ruido en un tipo de monitor fft (por ejemplo, definiría que la banda 36, ​​67, 123, ..., debe reducirse en x db) hacer un filtro fft con este perfil y aplícalo a tu señal. Yo voté porque esto es un poco fuera de tema. Usted solicita un software o un componente sin trabajo preliminar. Y tal vez se ajusta más en el sitio de QA 'Procesamiento de señal'? – az01

+0

Como consejo, para cancelar un ruido, puede reproducirlo por encima de sí mismo con la fase invertida. –

+0

¡He estado buscando por un tiempo y todo lo que encontré carecía de sentido! Luego esto. Este es el caso real! ¿Puedo preguntar, cómo te funcionó? – Fardin

Respuesta

7

lo necesario para capturar:

  1. salida del ordenador
  2. micrófono. entrada

Luego tiene que encontrar dos parámetros, dependiendo de su micrófono. localización y retraso del sistema de sonido. Estos dos parámetros son n-delay y k-amplify.

Stream1[t+n]*k=Stream2[t] 

Donde t = time. Cuando encuentre este parámetro, entonces su Stream resultante, solo speek mic. entrada será

Stream2[t]-Stream1[t+n]*k=MusicReductionStream[t] 
+0

Realmente me gusta esta buena solución. La 'n' en esta ecuación depende del tamaño del búfer de la salida de audio, es decir, la latencia de la salida. – Alex

+0

Podría erradicar la necesidad de conocer 'n' aquí al crear su propio búfer de' x' cantidad de marcos de muestra, antes de enviarlo al búfer de salida de audio. Esto sería bueno, aunque podría hacer que el tiempo de latencia sea intolerable para el usuario final. – Alex

+4

Esto no funcionará muy bien, ya que es poco probable que la respuesta de impulso del sistema sea un único toque de retardo. El sonido se extenderá en el tiempo debido a los reflejos en la sala, la respuesta de la fase del altavoz, etc. – hotpaw2

6

Creo que quieres hacer lo que noise canceling microphones hacer. Estos sistemas usan al menos un micrófono adicional para calcular la diferencia entre el "ruido circundante" y el ruido que apunta directamente al micrófono (el habla que debe registrar). No creo que pueda obtener de manera confiable el mismo efecto con una solución de solo software.

Un primer paso, obviamente, sería convertir la música abajo :-)

+1

-1: el suyo es un comentario, no una respuesta. La solicitud fue para una solución de software para eliminar el sonido que genera la computadora del sonido que recibe. – Argalatyr

+0

@Argalatyr Pero este es el punto válido, la cancelación de ruido es extremadamente difícil de hacer sin información adicional, que micrófono de cancelación de ruido tiene. – Harriv

+0

@Argalatyr Veo su punto, y dudé un tiempo entre una respuesta y un comentario. Sin embargo, el hecho de que el problema es muy difícil de resolver correctamente en el software combinado con la increíble simplicidad de la solución de hardware (un segundo micrófono o una cancelación de ruido fuera de la plataforma que no cuesta mucho) me hizo decidir formularlo como una respuesta a la pregunta. Pero estoy de acuerdo en que es algo confuso ... – fvu

1

creo que el pre-procesador de speex tiene una función de cancelación de eco. Necesitará alimentar los datos de audio que grabó y el audio que desea cancelar e intentará eliminarlos.

El principal problema es descubrir qué audio reproduce su computadora. No estoy seguro de si hay una buena API para eso.

También tiene una función de reducción de ruido y detección de actividad de voz. Puede compilarlo como un dll, y luego escribir un encabezado delphi.

5

Mira la bibliotecaAsioVST.

  • 100% de código abierto de código de Delphi
  • gratuito
  • muy completa
  • activa (se añade soporte para XE2/x64, por ejemplo)

Bajo Examples\Plugins\Crosstalk Cancellation\ se encuentra el código fuente para un complemento que probablemente hace lo que estás buscando.

Screenshot

La magia sucede en DAV_DspCrosstalkCancellation.pas.

1

Necesita estimar la respuesta de impulso del altavoz y la sala, etc., que puede cambiar con el altavoz exacto y el posicionamiento del micrófono y el tamaño y contenido de la sala, etc., así como conocer/estimar el retraso del sistema .

Si la persona o el micrófono son movibles, la respuesta al impulso y el retraso deberán ser continuamente reestimados.

Una vez que haya estimado la respuesta al impulso, puede convolucionarla con la señal de salida y tratar de restar las versiones diferidas del resultado de la entrada de micrófono hasta que pueda anular las partes silenciosas de la entrada de voz. La correlación cruzada puede ser útil para estimar el retraso.