Active noise reduction

I have programmed a voice recognition program and I have problems with the microphone listening to me over the computer playing music. I need software that can filter out the sound, leaving the speakers from the sound entering the microphone.

Is there any software or component (for Delphi) that would solve my problem?

+6
source share
5 answers

You need to write:

  • computer output
  • microphone. entrance

Then you need to find two parameters, depending on your microphone. location and delays of the sound system. These two parameters are n-delay and k-amplification.

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

Where t = time. When you find this parameter, then your resulting stream is just a microphone. entrance will be

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

I think you want to do something noise canceling microphones . These systems use at least one additional microphone to calculate the difference between โ€œambient noiseโ€ and noise directed directly at the microphone (speech should be recorded). I do not think that you can reliably get the same effect with a software solution.

The first step, obviously, would be to turn off the music :-)

+6
source

Open the AsioVST library.

  • 100% open source Delphi code
  • Free
  • Very full
  • Active (xe2 / x64 support added)

In Examples\Plugins\Crosstalk Cancellation\ you will find the source code of the plugin, which is likely to do what you are looking for.

Screen shot

The magic happens at DAV_DspCrosstalkCancellation.pas .

+5
source

I think the speex preprocessor has an echo cancellation function. You will need to transfer the audio data recorded by you and the sound you want to cancel and try to delete it.

The main problem is to find out what sound your computer is playing. Not sure if there is a good API for this.

It also has noise reduction function and voice activity detection. You can compile it as a dll and then write the delphi header.

+1
source

You need to evaluate the impulse response of the speaker and room, etc., which can vary with the exact location of the speakers and microphones, the size and contents of the room, etc., as well as knowing / evaluating the system delay.

If the person or microphone is moving, the impulse response and delay must be constantly counted.

After you have estimated the impulse response, you can drill it with the output signal and try to subtract the delayed versions of the result from the microphone input until you can turn off the quiet parts of the speech input. Cross-correlation may be useful for estimating latency.

+1
source

Source: https://habr.com/ru/post/902486/


All Articles